chore: enforce clippy lints in pumpkin-world

This commit is contained in:
Alexander Medvedev 2026-07-03 18:51:47 +02:00
parent 920fc3ec50
commit a9f69fea01
130 changed files with 1268 additions and 1061 deletions

208
Cargo.lock generated
View File

@ -81,9 +81,9 @@ checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
[[package]]
name = "anyhow"
version = "1.0.102"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
[[package]]
name = "arbitrary"
@ -93,9 +93,9 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
[[package]]
name = "arc-swap"
version = "1.9.1"
version = "1.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207"
checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b"
dependencies = [
"rustversion",
]
@ -631,27 +631,27 @@ dependencies = [
[[package]]
name = "cranelift-assembler-x64"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "715783c05f20985a5dfe6bfdccbfcb146cb44bfd8f6ff1d09526c3bf442fdac5"
checksum = "e06aeba2c965fc446d13c56a6ccb2631b78445d7544543dd9a25289977630914"
dependencies = [
"cranelift-assembler-x64-meta",
]
[[package]]
name = "cranelift-assembler-x64-meta"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c3da5a783f2b72af39ab98c1bf3157e081511e1febeafe550d71a4d0ba75f66"
checksum = "ee2d2dde4ec1352715595b5cfa6fe2e5b8ebb9da3457b3ee8db0aa2808c069aa"
dependencies = [
"cranelift-srcgen",
]
[[package]]
name = "cranelift-bforest"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e2e9b7adf77fa02204d4d523ae4f171b6591c2632b030865336335c7d7b420e"
checksum = "03b4982ef9fa54ec9eee841e891e7ddc5434be1250e88de31572e000c888f30b"
dependencies = [
"cranelift-entity",
"wasmtime-internal-core",
@ -659,9 +659,9 @@ dependencies = [
[[package]]
name = "cranelift-bitset"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90f09d9f397eae612ac15becf0e0b2165d2232003f4f2a1549572a724d1c48c5"
checksum = "529143118c4eeb58c39ecb02319557d512be6c61348486422974ab8e3906b8a8"
dependencies = [
"serde",
"serde_derive",
@ -670,9 +670,9 @@ dependencies = [
[[package]]
name = "cranelift-codegen"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e004cf1270abc82f7b9fb32d1a9d73a1cc0d5a0215b97db8c32658748e78b01"
checksum = "b7780677247ad3577e3a6a3ebf43f39b325a11d6393db72b2c9968a910d4d13d"
dependencies = [
"bumpalo",
"cranelift-assembler-x64",
@ -701,9 +701,9 @@ dependencies = [
[[package]]
name = "cranelift-codegen-meta"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04f32034641f96b123e4fdb5666e726d9f252e222638fc8fdd905b4ff18c3c4e"
checksum = "ac9645250416cbf92454fe61160e17e026e0ce405906a54500b114f923ddffc9"
dependencies = [
"cranelift-assembler-x64-meta",
"cranelift-codegen-shared",
@ -714,24 +714,24 @@ dependencies = [
[[package]]
name = "cranelift-codegen-shared"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "746566ae868b0e87a89206b3856350886a4fc2e078ce6485bec2ea6727c31685"
checksum = "20ee8d222ff0fd3681791979afbf88586ac9f49010d3db96b3cbe4c96759aee3"
[[package]]
name = "cranelift-control"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "def01ab5cd08a1be551d4bc96adc6af91f89138c4f81d0a60fdf3b9f82272703"
checksum = "591abe6f5312bd2c4220f1b3bead56c2ad00257c52668015ba013b85dcf2a17a"
dependencies = [
"arbitrary",
]
[[package]]
name = "cranelift-entity"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "341d5e1e071320505ebbc8194a8eb61fa94394b1ed93ba3cbec3be5fa1c3c1ce"
checksum = "a5300c49cf940526fe771517b3b3eabd5d0ff164ee61698579cf403fe8d3af3c"
dependencies = [
"cranelift-bitset",
"serde",
@ -741,9 +741,9 @@ dependencies = [
[[package]]
name = "cranelift-frontend"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97c6f3e2419ecb54a5503994d35421554c5e487d0493bc86ea96907bab51fd29"
checksum = "da4adbf760207fdbbe130f1191cce01cdef66831a9f648b1f39ff2800d126d45"
dependencies = [
"cranelift-codegen",
"hashbrown 0.17.1",
@ -754,15 +754,15 @@ dependencies = [
[[package]]
name = "cranelift-isle"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21aa47a5e0b1e9fb2c9348459088d5dbb872ebe17781ada1270d8364c7e73257"
checksum = "8315b21ff018226a42a60a4702c2dd75f6447cac26e9bca622e14c22088c2ff5"
[[package]]
name = "cranelift-native"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3054a03ac285b170662ec9530602b01cd394a7428cd753b48d9cae51f05249a"
checksum = "d506ef23a60715bde451b06620b14402166ded3b648454fccbf04f3e46a4aa70"
dependencies = [
"cranelift-codegen",
"libc",
@ -771,9 +771,9 @@ dependencies = [
[[package]]
name = "cranelift-srcgen"
version = "0.133.0"
version = "0.133.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd2498406acfcfd39c69078af187154ac8dcd31d3082888b258deb2a4fd0ecf4"
checksum = "48ed47e602652e3410f9387fc0db70fefadcee4d78a78881421aabcab4e26b89"
[[package]]
name = "crc-fast"
@ -892,9 +892,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crossfire"
version = "3.1.16"
version = "3.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d8c4de3db833e7ef74050bae09d5f3fa8f9d1507d3c2689c6e8c50b71208b18"
checksum = "df981decccf9b846c396ae513b3d2c6a1770d9593c8e47853d8fdb336c7bcb46"
dependencies = [
"crossbeam-utils",
"embed-collections",
@ -1578,15 +1578,15 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "humantime"
version = "2.3.0"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424"
checksum = "15cdd26707701c53297e2fa6afb323d55fbc1d0810c3aec078ae3ef0424c3c15"
[[package]]
name = "hybrid-array"
version = "0.4.12"
version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da"
checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c"
dependencies = [
"typenum",
]
@ -1817,9 +1817,9 @@ dependencies = [
[[package]]
name = "inotify-sys"
version = "0.1.5"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
checksum = "9ea94e891b3606826e9c998be69ddca42247dad8ad50b1649a5cb7e1c9ae06fd"
dependencies = [
"libc",
]
@ -1900,9 +1900,9 @@ dependencies = [
[[package]]
name = "js-sys"
version = "0.3.102"
version = "0.3.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31"
checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102"
dependencies = [
"cfg-if",
"futures-util",
@ -1965,9 +1965,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
[[package]]
name = "libredox"
version = "0.1.17"
version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3"
checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652"
dependencies = [
"libc",
]
@ -2192,9 +2192,9 @@ dependencies = [
[[package]]
name = "num-bigint"
version = "0.4.6"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
checksum = "7032fbb7ef662c18e806aa75b311f68ddf5c94e8fc62832c0039d79095ab6abf"
dependencies = [
"num-integer",
"num-traits",
@ -2627,9 +2627,9 @@ dependencies = [
[[package]]
name = "pulley-interpreter"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "047bda68096e5f290619ce037b7c3fa352d11f08edf0fce3030c351adc0f8ec0"
checksum = "38b92604caae1a1899b6a5b54967289dd538177c626004c91accf9d0ec7e4a12"
dependencies = [
"cranelift-bitset",
"log",
@ -2639,9 +2639,9 @@ dependencies = [
[[package]]
name = "pulley-macros"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83258a9bcc97d3fb15bf4e1c43bc2cc85c718e3563a697f145f245e651f2828f"
checksum = "5a7ac85c0bb3fb351f10d531230aaa5e366b46d7c4e5328e5f02801d6dac1165"
dependencies = [
"proc-macro2",
"quote",
@ -2919,9 +2919,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
[[package]]
name = "rand"
version = "0.10.1"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207"
checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80"
dependencies = [
"chacha20",
"getrandom 0.4.3",
@ -3077,9 +3077,9 @@ checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d"
[[package]]
name = "rustc-hash"
version = "2.1.2"
version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"
[[package]]
name = "rustc_version"
@ -3140,9 +3140,9 @@ dependencies = [
[[package]]
name = "rustls-pki-types"
version = "1.14.1"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9"
checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046"
dependencies = [
"zeroize",
]
@ -3166,9 +3166,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "rustyline"
version = "18.0.0"
version = "18.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a990b25f351b25139ddc7f21ee3f6f56f86d6846b74ac8fad3a719a287cd4a0"
checksum = "53f6a737db68eb1a8ccff86b584b2fc13eca6a7bb6f78ebc7c529547e3ab9684"
dependencies = [
"bitflags",
"cfg-if",
@ -3615,9 +3615,9 @@ dependencies = [
[[package]]
name = "time"
version = "0.3.51"
version = "0.3.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327"
checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50"
dependencies = [
"deranged",
"libc",
@ -3637,9 +3637,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
[[package]]
name = "time-macros"
version = "0.2.30"
version = "0.2.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935"
checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f"
dependencies = [
"num-conv",
"time-core",
@ -4043,9 +4043,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
version = "1.23.3"
version = "1.23.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53"
dependencies = [
"getrandom 0.4.3",
"js-sys",
@ -4102,9 +4102,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen"
version = "0.2.125"
version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a"
checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4"
dependencies = [
"cfg-if",
"once_cell",
@ -4115,9 +4115,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.125"
version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d"
checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@ -4125,9 +4125,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.125"
version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd"
checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e"
dependencies = [
"bumpalo",
"proc-macro2",
@ -4138,9 +4138,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.125"
version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f"
checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24"
dependencies = [
"unicode-ident",
]
@ -4193,9 +4193,9 @@ dependencies = [
[[package]]
name = "wasmtime"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08dd5caf09eda1d523261a0dd421a54e3bb165cf6f5b02c82327e712d49e3cf4"
checksum = "c4213d2f019a5e44aa8a61d8826dd33a505bff79f749b14a8bafd67321cb9351"
dependencies = [
"addr2line",
"async-trait",
@ -4236,9 +4236,9 @@ dependencies = [
[[package]]
name = "wasmtime-environ"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1f3aa689689cf295568aa4d24ab636579fb3b36dfa7cea35020d87064fc88ec"
checksum = "d45863de41977ec6453e859cf843d456fa3fcb45a659b66d16e794f90ec4f5b7"
dependencies = [
"anyhow",
"cpp_demangle",
@ -4267,9 +4267,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-cache"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd6c27fbabb7df6c88a592a28773a92aa8cfba5ee656963d7ad9b32a8f57a3d8"
checksum = "438bc7dc45fb75297d75f79a9a0ce852345d13ebc6a6863f6f688f013836a9dd"
dependencies = [
"base64 0.22.1",
"directories-next",
@ -4287,9 +4287,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-component-macro"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de4451ab437d7b2d41e637a4379e87ff76aeeb051236064dcc75c1855714ee58"
checksum = "f1e48f8d4966d62a10b6d70722bc432c1e163890be2801d3b5784589ad36ffc3"
dependencies = [
"anyhow",
"proc-macro2",
@ -4302,15 +4302,15 @@ dependencies = [
[[package]]
name = "wasmtime-internal-component-util"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53b5e357002645964342b99a6fe8405cda7dd031f498927992c9d99d5012daa7"
checksum = "819ad5abd5822a22dbf4014475cdfd1fe790707761cd732d74aaa3ba4d5ba489"
[[package]]
name = "wasmtime-internal-core"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f6ce74d60a8ed870548e7efa9710c54f982bbfcf80e5ee5eee8498318616483"
checksum = "3fc28372e36eaf8cf70faa83b5779137f7e99c8d18569a125d1580e735cc9e4d"
dependencies = [
"hashbrown 0.17.1",
"libm",
@ -4319,9 +4319,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-cranelift"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e24204583d847b7ce3d770f7a3456739d5d43f65c884cb47111dbe27b26ebbe6"
checksum = "a433efc6e35112a5457e1dc8bc4d8d39820ac7722267e89bc04e5df641f32124"
dependencies = [
"cfg-if",
"cranelift-codegen",
@ -4346,9 +4346,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-fiber"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecaeb13bf3eb94a02e32ea3842c8fda3ea6897c299745100c1230b65769d2d91"
checksum = "18a1d3a39d0d210f6b8574ee96a4315e0a14c67f3a1fc3cd5372cb10d2fb4422"
dependencies = [
"cc",
"cfg-if",
@ -4361,9 +4361,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-jit-debug"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5090e9a302bb5729a84766e4af07b6b10efe733e437bc266dd954a957114df63"
checksum = "9f667288cb4dfa68a4639ffac4d5628535dda64ebdc2b990526efb12b30ba803"
dependencies = [
"cc",
"wasmtime-internal-versioned-export-macros",
@ -4371,9 +4371,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-jit-icache-coherence"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bba33d9d951a9a974a866e80c864a9a46b28086e369582e0caa78e14a9f29e4"
checksum = "eba651d44ab0faad4c58106b3adb45068189fb65ef50f0c404b6d9e3bf81a357"
dependencies = [
"cfg-if",
"libc",
@ -4383,9 +4383,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-unwinder"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "695063a19bac17895f95c0c0f2f9544e85a277763cd77b5778f0cce6a971073e"
checksum = "2ecc52563b0558af2a7487eb710de07cc4532564b55528876129238e83118cb1"
dependencies = [
"cfg-if",
"cranelift-codegen",
@ -4396,9 +4396,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-versioned-export-macros"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc77f7513209b76e8f4772af640819f47fca3a5425b4417ef9c20b888334063c"
checksum = "e747f4a074699ba1b4e4d841fb263f9b7df5bd1555181c4752bf5990d21ba676"
dependencies = [
"proc-macro2",
"quote",
@ -4407,9 +4407,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-wit-bindgen"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e859103d8336304b8beebbf89a620c2f53a118fd5fbce41bc572cf4bacc8111d"
checksum = "80009f46991622814196d96fac6fc0a938f46b5cba737a8f4e21e24e5a03856f"
dependencies = [
"anyhow",
"bitflags",
@ -4420,9 +4420,9 @@ dependencies = [
[[package]]
name = "wasmtime-wasi"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "093c67243785465fdab0cb8bfada4a1171a543dfc22b392201c77d8086367b58"
checksum = "e9f65ef30a2c5478873cdb619085a7a649d3ce41cc3eaf298a7ce3dee96a8e11"
dependencies = [
"async-trait",
"bitflags",
@ -4448,9 +4448,9 @@ dependencies = [
[[package]]
name = "wasmtime-wasi-http"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "357b734a727b95c9117d78b3ad17abea5e6208e2af545160dfc462b0c342fa94"
checksum = "cb65eeb8116615c2a22f51b19672c0d5b652ca7b051086da5c7c0a9eb39f4af7"
dependencies = [
"async-trait",
"bytes",
@ -4471,9 +4471,9 @@ dependencies = [
[[package]]
name = "wasmtime-wasi-io"
version = "46.0.0"
version = "46.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95db6ca70bd5b7aab6b0297419ccbdb88682e12cc37764c757f58e917da650b9"
checksum = "cee57d5fef4976b1ab542615f4cef2c43278eb549d8078939668ea0f13d5c696"
dependencies = [
"async-trait",
"bytes",
@ -4931,9 +4931,9 @@ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
[[package]]
name = "xxhash-rust"
version = "0.8.15"
version = "0.8.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3"
checksum = "4d93c89cdc2d3a63c3ec48ffe926931bdc069eafa8e4402fe6d8f790c9d1e576"
[[package]]
name = "yoke"

View File

@ -56,6 +56,7 @@ cargo_common_metadata = "allow"
cast_precision_loss = "allow"
multiple_crate_versions = "allow"
single_call_fn = "allow"
similar_names = "allow"
unreadable_literal = "allow"
many_single_char_names = "allow"
suboptimal_flops = "allow"
@ -127,7 +128,7 @@ console-subscriber = { version = "0.5.0", default-features = false }
crc-fast = { version = "1.10.0", default-features = false, features = ["std"] }
criterion = { version = "0.8", default-features = false }
crossbeam-utils = { version = "0.8.21", default-features = false, features = ["std"] }
crossfire = { version = "3.1.16", default-features = false, features = ["compat"] }
crossfire = { version = "3.1.18", default-features = false, features = ["compat"] }
crypto-bigint = { version = "0.7.5", default-features = false }
dashmap = { version = "6.2", default-features = false }
ecdsa = { version = "0.16.9", default-features = false, features = ["std"] }
@ -142,7 +143,7 @@ libloading = { version = "0.9", default-features = false, features = ["std"] }
lru = { version = "0.18.0", default-features = false }
lz4-java-wrc = { version = "0.2.0", default-features = false, features = ["lz4_flex"] }
md5 = { version = "0.8", default-features = false }
num-bigint = { version = "0.4", default-features = false, features = ["std"] }
num-bigint = { version = "0.5", default-features = false, features = ["std"] }
num-derive = { version = "0.4", default-features = false }
num-traits = { version = "0.2", default-features = false, features = ["std"] }
p384 = { version = "0.13.1", default-features = false, features = ["std", "arithmetic", "pkcs8"] }
@ -158,11 +159,11 @@ pumpkin-protocol = { path = "pumpkin-protocol", default-features = false }
pumpkin-util = { path = "pumpkin-util", default-features = false }
pumpkin-world = { path = "pumpkin-world", default-features = false }
quote = { version = "1.0", default-features = false, features = ["proc-macro"] }
rand = { version = "0.10.1", default-features = false, features = ["std", "std_rng", "thread_rng"] }
rand = { version = "0.10.2", default-features = false, features = ["std", "std_rng", "thread_rng"] }
rsa = { version = "=0.10.0-rc.18", default-features = false, features = ["std", "encoding"] }
cipher = { version = "0.5.2", default-features = false }
rustc-hash = { version = "2.1.2", default-features = false, features = ["std"] }
rustyline = { version = "18.0.0", default-features = false, features = ["with-file-history"] }
rustc-hash = { version = "2.1.3", default-features = false, features = ["std"] }
rustyline = { version = "18.0.1", default-features = false, features = ["with-file-history"] }
ruzstd = { version = "0.8.3", default-features = false, features = ["std"] }
sha1 = { version = "=0.11.0", default-features = false, features = ["oid"] }
sha2 = { version = "=0.11.0", default-features = false, features = ["oid"] }

View File

@ -82,7 +82,7 @@ pub fn build() -> TokenStream {
.collect();
quote! {
#[allow(clippy::all, unused_imports, dead_code)]
#[allow(clippy::all, unused_imports, dead_code, clippy::large_stack_frames, clippy::too_many_lines)]
fn build_configured_features() -> std::collections::HashMap<pumpkin_data::configured_feature::ConfiguredFeature, ConfiguredFeature> {
use crate::generation::block_predicate::{
AllOfBlockPredicate, AnyOfBlockPredicate, BlockPredicate,
@ -462,10 +462,10 @@ pub fn value_to_configured_feature(v: &Value) -> TokenStream {
let r3 = config["chance_of_spread_radius3"].as_f64().unwrap_or(0.5) as f32;
quote! {
ConfiguredFeature::PointedDripstone(SmallDripstoneFeature {
chance_of_taller_dripstone: #taller,
chance_of_directional_spread: #dir_spread,
chance_of_spread_radius2: #r2,
chance_of_spread_radius3: #r3,
taller_dripstone: #taller,
directional_spread: #dir_spread,
spread_radius2: #r2,
spread_radius3: #r3,
})
}
}
@ -1302,10 +1302,10 @@ fn value_to_trunk_placer(v: &Value) -> TokenStream {
value_to_int_provider(&v["branch_end_offset_from_top"]);
quote! {
TrunkType::Cherry(CherryTrunkPlacer {
branch_count: #branch_count,
branch_horizontal_length: #branch_horizontal_length,
branch_start_offset_from_top: UniformIntProvider { min_inclusive: #min, max_inclusive: #max },
branch_end_offset_from_top: #branch_end_offset_from_top,
count: #branch_count,
horizontal_length: #branch_horizontal_length,
start_offset_from_top: UniformIntProvider { min_inclusive: #min, max_inclusive: #max },
end_offset_from_top: #branch_end_offset_from_top,
})
}
}
@ -1684,7 +1684,7 @@ fn value_to_placement_modifier_cf(v: &Value) -> TokenStream {
let r = v["noise_to_count_ratio"].as_i64().unwrap_or(0) as i32;
let f = v["noise_factor"].as_f64().unwrap_or(1.0);
let o = v["noise_offset"].as_f64().unwrap_or(0.0);
quote! { PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier { noise_to_count_ratio: #r, noise_factor: #f, noise_offset: #o }) }
quote! { PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier { to_count_ratio: #r, factor: #f, offset: #o }) }
}
"minecraft:noise_threshold_count" => {
let l = v["noise_level"].as_f64().unwrap_or(0.0);

View File

@ -77,7 +77,7 @@ pub fn build() -> TokenStream {
.collect();
quote! {
#[allow(clippy::all, unused_imports, dead_code)]
#[allow(clippy::all, unused_imports, dead_code, clippy::too_many_lines)]
fn build_placed_features() -> std::collections::HashMap<pumpkin_data::placed_feature::PlacedFeature, PlacedFeature> {
use crate::generation::block_predicate::{
AllOfBlockPredicate, AnyOfBlockPredicate, BlockPredicate,
@ -255,9 +255,9 @@ fn value_to_placement_modifier(v: &Value) -> TokenStream {
let offset = v["noise_offset"].as_f64().unwrap_or(0.0);
quote! {
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
noise_to_count_ratio: #ratio,
noise_factor: #factor,
noise_offset: #offset,
to_count_ratio: #ratio,
factor: #factor,
offset: #offset,
})
}
}

View File

@ -1,5 +1,11 @@
/* This file is generated. Do not edit manually. */
#[allow(clippy::all, unused_imports, dead_code)]
#[allow(
clippy::all,
unused_imports,
dead_code,
clippy::large_stack_frames,
clippy::too_many_lines
)]
fn build_configured_features()
-> std::collections::HashMap<pumpkin_data::configured_feature::ConfiguredFeature, ConfiguredFeature>
{
@ -748,8 +754,8 @@ fn build_configured_features()
prioritize_tip: true,
}),
);
map . insert (pumpkin_data :: configured_feature :: ConfiguredFeature :: Cherry , ConfiguredFeature :: Tree (Box :: new (TreeFeature { trunk_provider : BlockStateProvider :: Simple (SimpleStateProvider { state : { let mut props = std :: collections :: HashMap :: new () ; props . insert ("axis" . to_string () , "y" . to_string ()) ; BlockStateCodec { name : & pumpkin_data :: Block :: CHERRY_LOG , properties : Some (props) , } . get_state () } }) , trunk_placer : TrunkPlacer { base_height : 7u8 , height_rand_a : 1u8 , height_rand_b : 0u8 , r#type : TrunkType :: Cherry (CherryTrunkPlacer { branch_count : IntProvider :: Object (NormalIntProvider :: WeightedList (WeightedListIntProvider { distribution : vec ! [WeightedEntry { data : IntProvider :: Constant (1i32) , weight : 1i32 } , WeightedEntry { data : IntProvider :: Constant (2i32) , weight : 1i32 } , WeightedEntry { data : IntProvider :: Constant (3i32) , weight : 1i32 }] })) , branch_horizontal_length : IntProvider :: Object (NormalIntProvider :: Uniform (UniformIntProvider { min_inclusive : 2i32 , max_inclusive : 4i32 })) , branch_start_offset_from_top : UniformIntProvider { min_inclusive : - 4i32 , max_inclusive : - 3i32 } , branch_end_offset_from_top : IntProvider :: Object (NormalIntProvider :: Uniform (UniformIntProvider { min_inclusive : - 1i32 , max_inclusive : 0i32 })) , }) , } , foliage_provider : BlockStateProvider :: Simple (SimpleStateProvider { state : { let mut props = std :: collections :: HashMap :: new () ; props . insert ("waterlogged" . to_string () , "false" . to_string ()) ; props . insert ("persistent" . to_string () , "false" . to_string ()) ; props . insert ("distance" . to_string () , "7" . to_string ()) ; BlockStateCodec { name : & pumpkin_data :: Block :: CHERRY_LEAVES , properties : Some (props) , } . get_state () } }) , foliage_placer : FoliagePlacer { radius : IntProvider :: Constant (4i32) , offset : IntProvider :: Constant (0i32) , r#type : FoliageType :: Cherry (CherryFoliagePlacer { height : IntProvider :: Constant (5i32) , wide_bottom_layer_hole_chance : 0.25f32 , corner_hole_chance : 0.25f32 , hanging_leaves_chance : 0.16666667f32 , hanging_leaves_extension_chance : 0.33333334f32 , }) } , minimum_size : FeatureSize { min_clipped_height : None , r#type : FeatureSizeType :: TwoLayersFeatureSize (TwoLayersFeatureSize { limit : 1u8 , lower_size : 0u8 , upper_size : 2u8 , }) } , ignore_vines : true , below_trunk_provider : BlockStateProvider :: Rule (RuleBasedBlockStateProvider { fallback : None , rules : vec ! [BlockStateRule { if_true : BlockPredicate :: Not (NotBlockPredicate { predicate : Box :: new (BlockPredicate :: MatchingBlockTag (MatchingBlockTagPredicate { offset : OffsetBlocksBlockPredicate { offset : None } , tag : pumpkin_data :: tag :: Block :: MINECRAFT_CANNOT_REPLACE_BELOW_TREE_TRUNK , })) , }) , then : BlockStateProvider :: Simple (SimpleStateProvider { state : pumpkin_data :: Block :: DIRT . default_state }) }] , }) , decorators : vec ! [] , root_placer : None , }))) ;
map . insert (pumpkin_data :: configured_feature :: ConfiguredFeature :: CherryBees005 , ConfiguredFeature :: Tree (Box :: new (TreeFeature { trunk_provider : BlockStateProvider :: Simple (SimpleStateProvider { state : { let mut props = std :: collections :: HashMap :: new () ; props . insert ("axis" . to_string () , "y" . to_string ()) ; BlockStateCodec { name : & pumpkin_data :: Block :: CHERRY_LOG , properties : Some (props) , } . get_state () } }) , trunk_placer : TrunkPlacer { base_height : 7u8 , height_rand_a : 1u8 , height_rand_b : 0u8 , r#type : TrunkType :: Cherry (CherryTrunkPlacer { branch_count : IntProvider :: Object (NormalIntProvider :: WeightedList (WeightedListIntProvider { distribution : vec ! [WeightedEntry { data : IntProvider :: Constant (1i32) , weight : 1i32 } , WeightedEntry { data : IntProvider :: Constant (2i32) , weight : 1i32 } , WeightedEntry { data : IntProvider :: Constant (3i32) , weight : 1i32 }] })) , branch_horizontal_length : IntProvider :: Object (NormalIntProvider :: Uniform (UniformIntProvider { min_inclusive : 2i32 , max_inclusive : 4i32 })) , branch_start_offset_from_top : UniformIntProvider { min_inclusive : - 4i32 , max_inclusive : - 3i32 } , branch_end_offset_from_top : IntProvider :: Object (NormalIntProvider :: Uniform (UniformIntProvider { min_inclusive : - 1i32 , max_inclusive : 0i32 })) , }) , } , foliage_provider : BlockStateProvider :: Simple (SimpleStateProvider { state : { let mut props = std :: collections :: HashMap :: new () ; props . insert ("waterlogged" . to_string () , "false" . to_string ()) ; props . insert ("persistent" . to_string () , "false" . to_string ()) ; props . insert ("distance" . to_string () , "7" . to_string ()) ; BlockStateCodec { name : & pumpkin_data :: Block :: CHERRY_LEAVES , properties : Some (props) , } . get_state () } }) , foliage_placer : FoliagePlacer { radius : IntProvider :: Constant (4i32) , offset : IntProvider :: Constant (0i32) , r#type : FoliageType :: Cherry (CherryFoliagePlacer { height : IntProvider :: Constant (5i32) , wide_bottom_layer_hole_chance : 0.25f32 , corner_hole_chance : 0.25f32 , hanging_leaves_chance : 0.16666667f32 , hanging_leaves_extension_chance : 0.33333334f32 , }) } , minimum_size : FeatureSize { min_clipped_height : None , r#type : FeatureSizeType :: TwoLayersFeatureSize (TwoLayersFeatureSize { limit : 1u8 , lower_size : 0u8 , upper_size : 2u8 , }) } , ignore_vines : true , below_trunk_provider : BlockStateProvider :: Rule (RuleBasedBlockStateProvider { fallback : None , rules : vec ! [BlockStateRule { if_true : BlockPredicate :: Not (NotBlockPredicate { predicate : Box :: new (BlockPredicate :: MatchingBlockTag (MatchingBlockTagPredicate { offset : OffsetBlocksBlockPredicate { offset : None } , tag : pumpkin_data :: tag :: Block :: MINECRAFT_CANNOT_REPLACE_BELOW_TREE_TRUNK , })) , }) , then : BlockStateProvider :: Simple (SimpleStateProvider { state : pumpkin_data :: Block :: DIRT . default_state }) }] , }) , decorators : vec ! [TreeDecorator :: Beehive (BeehiveTreeDecorator { probability : 0.05f32 })] , root_placer : None , }))) ;
map . insert (pumpkin_data :: configured_feature :: ConfiguredFeature :: Cherry , ConfiguredFeature :: Tree (Box :: new (TreeFeature { trunk_provider : BlockStateProvider :: Simple (SimpleStateProvider { state : { let mut props = std :: collections :: HashMap :: new () ; props . insert ("axis" . to_string () , "y" . to_string ()) ; BlockStateCodec { name : & pumpkin_data :: Block :: CHERRY_LOG , properties : Some (props) , } . get_state () } }) , trunk_placer : TrunkPlacer { base_height : 7u8 , height_rand_a : 1u8 , height_rand_b : 0u8 , r#type : TrunkType :: Cherry (CherryTrunkPlacer { count : IntProvider :: Object (NormalIntProvider :: WeightedList (WeightedListIntProvider { distribution : vec ! [WeightedEntry { data : IntProvider :: Constant (1i32) , weight : 1i32 } , WeightedEntry { data : IntProvider :: Constant (2i32) , weight : 1i32 } , WeightedEntry { data : IntProvider :: Constant (3i32) , weight : 1i32 }] })) , horizontal_length : IntProvider :: Object (NormalIntProvider :: Uniform (UniformIntProvider { min_inclusive : 2i32 , max_inclusive : 4i32 })) , start_offset_from_top : UniformIntProvider { min_inclusive : - 4i32 , max_inclusive : - 3i32 } , end_offset_from_top : IntProvider :: Object (NormalIntProvider :: Uniform (UniformIntProvider { min_inclusive : - 1i32 , max_inclusive : 0i32 })) , }) , } , foliage_provider : BlockStateProvider :: Simple (SimpleStateProvider { state : { let mut props = std :: collections :: HashMap :: new () ; props . insert ("waterlogged" . to_string () , "false" . to_string ()) ; props . insert ("persistent" . to_string () , "false" . to_string ()) ; props . insert ("distance" . to_string () , "7" . to_string ()) ; BlockStateCodec { name : & pumpkin_data :: Block :: CHERRY_LEAVES , properties : Some (props) , } . get_state () } }) , foliage_placer : FoliagePlacer { radius : IntProvider :: Constant (4i32) , offset : IntProvider :: Constant (0i32) , r#type : FoliageType :: Cherry (CherryFoliagePlacer { height : IntProvider :: Constant (5i32) , wide_bottom_layer_hole_chance : 0.25f32 , corner_hole_chance : 0.25f32 , hanging_leaves_chance : 0.16666667f32 , hanging_leaves_extension_chance : 0.33333334f32 , }) } , minimum_size : FeatureSize { min_clipped_height : None , r#type : FeatureSizeType :: TwoLayersFeatureSize (TwoLayersFeatureSize { limit : 1u8 , lower_size : 0u8 , upper_size : 2u8 , }) } , ignore_vines : true , below_trunk_provider : BlockStateProvider :: Rule (RuleBasedBlockStateProvider { fallback : None , rules : vec ! [BlockStateRule { if_true : BlockPredicate :: Not (NotBlockPredicate { predicate : Box :: new (BlockPredicate :: MatchingBlockTag (MatchingBlockTagPredicate { offset : OffsetBlocksBlockPredicate { offset : None } , tag : pumpkin_data :: tag :: Block :: MINECRAFT_CANNOT_REPLACE_BELOW_TREE_TRUNK , })) , }) , then : BlockStateProvider :: Simple (SimpleStateProvider { state : pumpkin_data :: Block :: DIRT . default_state }) }] , }) , decorators : vec ! [] , root_placer : None , }))) ;
map . insert (pumpkin_data :: configured_feature :: ConfiguredFeature :: CherryBees005 , ConfiguredFeature :: Tree (Box :: new (TreeFeature { trunk_provider : BlockStateProvider :: Simple (SimpleStateProvider { state : { let mut props = std :: collections :: HashMap :: new () ; props . insert ("axis" . to_string () , "y" . to_string ()) ; BlockStateCodec { name : & pumpkin_data :: Block :: CHERRY_LOG , properties : Some (props) , } . get_state () } }) , trunk_placer : TrunkPlacer { base_height : 7u8 , height_rand_a : 1u8 , height_rand_b : 0u8 , r#type : TrunkType :: Cherry (CherryTrunkPlacer { count : IntProvider :: Object (NormalIntProvider :: WeightedList (WeightedListIntProvider { distribution : vec ! [WeightedEntry { data : IntProvider :: Constant (1i32) , weight : 1i32 } , WeightedEntry { data : IntProvider :: Constant (2i32) , weight : 1i32 } , WeightedEntry { data : IntProvider :: Constant (3i32) , weight : 1i32 }] })) , horizontal_length : IntProvider :: Object (NormalIntProvider :: Uniform (UniformIntProvider { min_inclusive : 2i32 , max_inclusive : 4i32 })) , start_offset_from_top : UniformIntProvider { min_inclusive : - 4i32 , max_inclusive : - 3i32 } , end_offset_from_top : IntProvider :: Object (NormalIntProvider :: Uniform (UniformIntProvider { min_inclusive : - 1i32 , max_inclusive : 0i32 })) , }) , } , foliage_provider : BlockStateProvider :: Simple (SimpleStateProvider { state : { let mut props = std :: collections :: HashMap :: new () ; props . insert ("waterlogged" . to_string () , "false" . to_string ()) ; props . insert ("persistent" . to_string () , "false" . to_string ()) ; props . insert ("distance" . to_string () , "7" . to_string ()) ; BlockStateCodec { name : & pumpkin_data :: Block :: CHERRY_LEAVES , properties : Some (props) , } . get_state () } }) , foliage_placer : FoliagePlacer { radius : IntProvider :: Constant (4i32) , offset : IntProvider :: Constant (0i32) , r#type : FoliageType :: Cherry (CherryFoliagePlacer { height : IntProvider :: Constant (5i32) , wide_bottom_layer_hole_chance : 0.25f32 , corner_hole_chance : 0.25f32 , hanging_leaves_chance : 0.16666667f32 , hanging_leaves_extension_chance : 0.33333334f32 , }) } , minimum_size : FeatureSize { min_clipped_height : None , r#type : FeatureSizeType :: TwoLayersFeatureSize (TwoLayersFeatureSize { limit : 1u8 , lower_size : 0u8 , upper_size : 2u8 , }) } , ignore_vines : true , below_trunk_provider : BlockStateProvider :: Rule (RuleBasedBlockStateProvider { fallback : None , rules : vec ! [BlockStateRule { if_true : BlockPredicate :: Not (NotBlockPredicate { predicate : Box :: new (BlockPredicate :: MatchingBlockTag (MatchingBlockTagPredicate { offset : OffsetBlocksBlockPredicate { offset : None } , tag : pumpkin_data :: tag :: Block :: MINECRAFT_CANNOT_REPLACE_BELOW_TREE_TRUNK , })) , }) , then : BlockStateProvider :: Simple (SimpleStateProvider { state : pumpkin_data :: Block :: DIRT . default_state }) }] , }) , decorators : vec ! [TreeDecorator :: Beehive (BeehiveTreeDecorator { probability : 0.05f32 })] , root_placer : None , }))) ;
map.insert(
pumpkin_data::configured_feature::ConfiguredFeature::ChorusPlant,
ConfiguredFeature::ChorusPlant(
@ -3629,10 +3635,10 @@ fn build_configured_features()
PlacedFeature {
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
SmallDripstoneFeature {
chance_of_taller_dripstone: 0.2f32,
chance_of_directional_spread: 0.7f32,
chance_of_spread_radius2: 0.5f32,
chance_of_spread_radius3: 0.5f32,
taller_dripstone: 0.2f32,
directional_spread: 0.7f32,
spread_radius2: 0.5f32,
spread_radius3: 0.5f32,
},
))),
placement: vec![
@ -3672,10 +3678,10 @@ fn build_configured_features()
PlacedFeature {
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
SmallDripstoneFeature {
chance_of_taller_dripstone: 0.2f32,
chance_of_directional_spread: 0.7f32,
chance_of_spread_radius2: 0.5f32,
chance_of_spread_radius3: 0.5f32,
taller_dripstone: 0.2f32,
directional_spread: 0.7f32,
spread_radius2: 0.5f32,
spread_radius3: 0.5f32,
},
))),
placement: vec![
@ -4102,10 +4108,10 @@ fn build_configured_features()
PlacedFeature {
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
SmallDripstoneFeature {
chance_of_taller_dripstone: 0.2f32,
chance_of_directional_spread: 0.7f32,
chance_of_spread_radius2: 0.5f32,
chance_of_spread_radius3: 0.5f32,
taller_dripstone: 0.2f32,
directional_spread: 0.7f32,
spread_radius2: 0.5f32,
spread_radius3: 0.5f32,
},
))),
placement: vec![
@ -4145,10 +4151,10 @@ fn build_configured_features()
PlacedFeature {
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
SmallDripstoneFeature {
chance_of_taller_dripstone: 0.2f32,
chance_of_directional_spread: 0.7f32,
chance_of_spread_radius2: 0.5f32,
chance_of_spread_radius3: 0.5f32,
taller_dripstone: 0.2f32,
directional_spread: 0.7f32,
spread_radius2: 0.5f32,
spread_radius3: 0.5f32,
},
))),
placement: vec![

View File

@ -37898,7 +37898,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const APPLE : Self = Self { id : 285 , registry_key : "minecraft:apple" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Eminecraft:food\x03\tnutrition\x08\x01\x0Ecan_always_eat\0\x05\x13saturation_modifier\x9A\x99\x99>\n\x11using_converts_to\0\0\t\titem_tags\x08\x02\x11minecraft:is_food\n\x16minecraft:display_name\x08\x05value\x0Fitem.apple.name\0\n\x17minecraft:use_modifiers\x05\x11movement_modifier33\xB3>\x01\x0Femit_vibrations\x01\x05\x0Cuse_duration\xCD\xCC\xCC?\x08\x0Bstart_using\x06always\0\n\x0Fitem_properties\x03\x11creative_category\x04\x08\x10enchantable_slot\x04none\x01\x04foil\0\x01\x0Fstacked_by_data\0\x08\x0Ecreative_group\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x05apple\0\0\x03\x06damage\0\x01\rhand_equipped\0\x01\x0Eallow_off_hand\0\x01\x0Eshould_despawn\x01\x01\x0Eliquid_clipped\0\x01\x17can_destroy_in_creative\x01\x01\x12hidden_in_commands\x02\x05\x0Cmining_speed\0\0\x80?\x03\x0Cuse_duration@\x03\ruse_animation\x02\x03\x0Emax_stack_size\x80\x01\x03\x11enchantable_value\0\x03\x0Bframe_count\x02\0\n\x17minecraft:use_animation\x08\x05value\x03eat\0\n\x0Eminecraft:tags\t\x04tags\x08\x02\x11minecraft:is_food\0\0" } ;
pub const APPLE : Self = Self { id : 285 , registry_key : "minecraft:apple" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x05\x13saturation_modifier\x9A\x99\x99>\x03\tnutrition\x08\n\x11using_converts_to\0\0\n\x16minecraft:display_name\x08\x05value\x0Fitem.apple.name\0\n\x17minecraft:use_animation\x08\x05value\x03eat\0\n\x17minecraft:use_modifiers\x01\x0Femit_vibrations\x01\x08\x0Bstart_using\x06always\x05\x11movement_modifier33\xB3>\x05\x0Cuse_duration\xCD\xCC\xCC?\0\t\titem_tags\x08\x02\x11minecraft:is_food\n\x0Fitem_properties\x01\x04foil\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x05apple\0\0\x03\x0Emax_stack_size\x80\x01\x03\x06damage\0\x01\rhand_equipped\0\x01\x0Eliquid_clipped\0\x03\ruse_animation\x02\x08\x0Ecreative_group\0\x01\x0Eshould_despawn\x01\x03\x11creative_category\x04\x05\x0Cmining_speed\0\0\x80?\x03\x0Cuse_duration@\x03\x0Bframe_count\x02\x01\x0Eallow_off_hand\0\x01\x17can_destroy_in_creative\x01\x03\x11enchantable_value\0\x01\x0Fstacked_by_data\0\x08\x10enchantable_slot\x04none\x01\x12hidden_in_commands\x02\0\n\x0Eminecraft:tags\t\x04tags\x08\x02\x11minecraft:is_food\0\0" } ;
pub const ARCHER_POTTERY_SHERD: Self = Self {
id: 700,
registry_key: "minecraft:archer_pottery_sherd",
@ -37983,7 +37983,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const BAKED_POTATO : Self = Self { id : 310 , registry_key : "minecraft:baked_potato" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x05\x13saturation_modifier\x9A\x99\x19?\x08\x11using_converts_to\0\x03\ron_use_action\x01\x03\rcooldown_time\0\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\tnutrition\n\0\0" } ;
pub const BAKED_POTATO : Self = Self { id : 310 , registry_key : "minecraft:baked_potato" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x05\x13saturation_modifier\x9A\x99\x19?\x08\rcooldown_type\0\x08\x11using_converts_to\0\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x03\tnutrition\n\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\x03\x16minecraft:use_duration@\0" } ;
pub const BALLOON: Self = Self {
id: 641,
registry_key: "minecraft:balloon",
@ -38236,7 +38236,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const BEEF : Self = Self { id : 302 , registry_key : "minecraft:beef" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\rcooldown_time\0\x03\ron_use_action\x01\x08\rcooldown_type\0\x05\x13saturation_modifier\x9A\x99\x99>\x08\x11using_converts_to\0\x03\tnutrition\x06\0\0" } ;
pub const BEEF : Self = Self { id : 302 , registry_key : "minecraft:beef" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\ron_use_action\x01\x08\x11using_converts_to\0\x03\tnutrition\x06\x08\rcooldown_type\0\x03\rcooldown_time\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\x9A\x99\x99>\x01\x0Ecan_always_eat\0\0\0" } ;
pub const BEEHIVE: Self = Self {
id: -219,
registry_key: "minecraft:beehive",
@ -38244,9 +38244,9 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const BEETROOT : Self = Self { id : 314 , registry_key : "minecraft:beetroot" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\tnutrition\x02\x01\x0Ecan_always_eat\0\x03\ron_use_action\x01\x03\rcooldown_time\0\x08\rcooldown_type\0\x05\x13saturation_modifier\x9A\x99\x19?\x08\x11using_converts_to\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\x03\x16minecraft:use_duration@\0" } ;
pub const BEETROOT_SEEDS : Self = Self { id : 324 , registry_key : "minecraft:beetroot_seeds" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\x01\x1Aplant_at_any_solid_surface\0\t\x08plant_at\x08\x02\x12minecraft:farmland\x08\x0Bcrop_result\x12minecraft:beetroot\x08\rplant_at_face\x02up\0\0" } ;
pub const BEETROOT_SOUP : Self = Self { id : 315 , registry_key : "minecraft:beetroot_soup" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x18minecraft:max_stack_size\x02\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x08\rcooldown_type\0\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x03\tnutrition\x0C\x03\ron_use_action\x01\x08\x11using_converts_to\x04bowl\x05\x13saturation_modifier\x9A\x99\x19?\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\0" } ;
pub const BEETROOT : Self = Self { id : 314 , registry_key : "minecraft:beetroot" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x03\tnutrition\x02\x03\rcooldown_time\0\x05\x13saturation_modifier\x9A\x99\x19?\x08\rcooldown_type\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\x03\ron_use_action\x01\0\0" } ;
pub const BEETROOT_SEEDS : Self = Self { id : 324 , registry_key : "minecraft:beetroot_seeds" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\t\x08plant_at\x08\x02\x12minecraft:farmland\x08\rplant_at_face\x02up\x08\x0Bcrop_result\x12minecraft:beetroot\x01\x1Aplant_at_any_solid_surface\0\0\0" } ;
pub const BEETROOT_SOUP : Self = Self { id : 315 , registry_key : "minecraft:beetroot_soup" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x18minecraft:max_stack_size\x02\n\x0Eminecraft:food\x03\rcooldown_time\0\x01\x0Ecan_always_eat\0\x08\x11using_converts_to\x04bowl\x03\ron_use_action\x01\x05\x13saturation_modifier\x9A\x99\x19?\x08\rcooldown_type\0\x03\tnutrition\x0C\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\x03\x16minecraft:use_duration@\0" } ;
pub const BELL: Self = Self {
id: -206,
registry_key: "minecraft:bell",
@ -38408,7 +38408,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const BLACK_BUNDLE : Self = Self { id : 264 , registry_key : "minecraft:black_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\t\titem_tags\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\0\n\x0Fitem_properties\x01\x0Fstacked_by_data\0\x01\x04foil\0\x01\x0Eallow_off_hand\0\x08\x10enchantable_slot\x04none\x01\x17can_destroy_in_creative\x01\x01\rhand_equipped\0\x01\x12hidden_in_commands\x02\x01\x0Eliquid_clipped\0\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x17bundle_black_open_front\x08\x07default\x0Cbundle_black\x08\x10bundle_open_back\x16bundle_black_open_back\0\0\x03\x0Cuse_duration\0\x05\x0Cmining_speed\0\0\x80?\x03\x11enchantable_value\0\x01\x0Eshould_despawn\x01\x03\x11creative_category\x06\x03\x0Bframe_count\x02\x03\x0Emax_stack_size\x02\x03\x06damage\0\x03\ruse_animation\0\x08\x0Ecreative_group\0\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\0" } ;
pub const BLACK_BUNDLE : Self = Self { id : 264 , registry_key : "minecraft:black_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Fitem_properties\x01\x17can_destroy_in_creative\x01\x05\x0Cmining_speed\0\0\x80?\x01\x0Eshould_despawn\x01\x01\x0Fstacked_by_data\0\x03\ruse_animation\0\x01\x04foil\0\x03\x0Bframe_count\x02\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Cbundle_black\x08\x11bundle_open_front\x17bundle_black_open_front\x08\x10bundle_open_back\x16bundle_black_open_back\0\0\x03\x0Cuse_duration\0\x03\x11enchantable_value\0\x03\x06damage\0\x03\x0Emax_stack_size\x02\x08\x10enchantable_slot\x04none\x01\x0Eallow_off_hand\0\x01\x0Eliquid_clipped\0\x01\x12hidden_in_commands\x02\x03\x11creative_category\x06\x08\x0Ecreative_group\0\x01\rhand_equipped\0\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\t\titem_tags\0\0\n\x16minecraft:storage_item\x01\x1Aallow_nested_storage_items\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\t\rallowed_items\0\0\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\0" } ;
pub const BLACK_CANDLE: Self = Self {
id: -428,
registry_key: "minecraft:black_candle",
@ -38577,7 +38577,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const BLUE_BUNDLE : Self = Self { id : 265 , registry_key : "minecraft:blue_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x16minecraft:storage_item\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x0Fitem_properties\x08\x0Ecreative_group\0\x03\x11creative_category\x06\x08\x10enchantable_slot\x04none\x01\x12hidden_in_commands\x02\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Bbundle_blue\x08\x11bundle_open_front\x16bundle_blue_open_front\x08\x10bundle_open_back\x15bundle_blue_open_back\0\0\x01\rhand_equipped\0\x03\x11enchantable_value\0\x01\x0Eliquid_clipped\0\x01\x0Fstacked_by_data\0\x03\ruse_animation\0\x01\x0Eallow_off_hand\0\x03\x0Emax_stack_size\x02\x03\x0Cuse_duration\0\x05\x0Cmining_speed\0\0\x80?\x03\x0Bframe_count\x02\x01\x17can_destroy_in_creative\x01\x01\x04foil\0\x01\x0Eshould_despawn\x01\x03\x06damage\0\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\t\titem_tags\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\0" } ;
pub const BLUE_BUNDLE : Self = Self { id : 265 , registry_key : "minecraft:blue_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x0Fitem_properties\x03\x11creative_category\x06\x03\x0Cuse_duration\0\x08\x10enchantable_slot\x04none\x01\x04foil\0\x01\rhand_equipped\0\x01\x12hidden_in_commands\x02\x01\x0Eliquid_clipped\0\x03\x11enchantable_value\0\x03\x0Emax_stack_size\x02\x01\x0Eshould_despawn\x01\x01\x0Eallow_off_hand\0\x01\x0Fstacked_by_data\0\x03\ruse_animation\0\x08\x0Ecreative_group\0\x03\x06damage\0\x03\x0Bframe_count\x02\x05\x0Cmining_speed\0\0\x80?\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x15bundle_blue_open_back\x08\x11bundle_open_front\x16bundle_blue_open_front\x08\x07default\x0Bbundle_blue\0\0\x01\x17can_destroy_in_creative\x01\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\t\titem_tags\0\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\0" } ;
pub const BLUE_CANDLE: Self = Self {
id: -424,
registry_key: "minecraft:blue_candle",
@ -38809,8 +38809,8 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const BREAD : Self = Self { id : 290 , registry_key : "minecraft:bread" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\tnutrition\n\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\rcooldown_time\0\x05\x13saturation_modifier\x9A\x99\x19?\x08\x11using_converts_to\0\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\x03\ron_use_action\x01\0\x03\x16minecraft:use_duration@\0" } ;
pub const BREEZE_ROD : Self = Self { id : 281 , registry_key : "minecraft:breeze_rod" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Fitem_properties\x03\x0Cuse_duration\0\x01\x0Eshould_despawn\x01\x01\rhand_equipped\x01\x03\x11creative_category\x08\x01\x17can_destroy_in_creative\x01\x01\x0Eliquid_clipped\0\x03\ruse_animation\0\x01\x0Eallow_off_hand\0\x03\x0Bframe_count\x02\n\x0Eminecraft:icon\n\x08textures\x08\x07default\nbreeze_rod\0\0\x05\x0Cmining_speed\0\0\x80?\x08\x0Ecreative_group\0\x03\x11enchantable_value\0\x01\x04foil\0\x01\x12hidden_in_commands\x02\x03\x0Emax_stack_size\x80\x01\x03\x06damage\0\x01\x0Fstacked_by_data\0\x08\x10enchantable_slot\x04none\0\n\x16minecraft:display_name\x08\x05value\x14item.breeze_rod.name\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\t\titem_tags\0\0\0" } ;
pub const BREAD : Self = Self { id : 290 , registry_key : "minecraft:bread" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\rcooldown_time\0\x03\ron_use_action\x01\x03\tnutrition\n\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\rcooldown_type\0\x05\x13saturation_modifier\x9A\x99\x19?\x08\x11using_converts_to\0\x01\x0Ecan_always_eat\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const BREEZE_ROD : Self = Self { id : 281 , registry_key : "minecraft:breeze_rod" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x16minecraft:display_name\x08\x05value\x14item.breeze_rod.name\0\n\x0Fitem_properties\x03\ruse_animation\0\x01\x04foil\0\x08\x10enchantable_slot\x04none\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\x01\x0Eshould_despawn\x01\x03\x0Cuse_duration\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\nbreeze_rod\0\0\x08\x0Ecreative_group\0\x03\x11enchantable_value\0\x03\x0Bframe_count\x02\x03\x06damage\0\x01\rhand_equipped\x01\x01\x12hidden_in_commands\x02\x03\x0Emax_stack_size\x80\x01\x03\x11creative_category\x08\x01\x0Eallow_off_hand\0\x01\x17can_destroy_in_creative\x01\x01\x0Eliquid_clipped\0\0\t\titem_tags\0\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\0" } ;
pub const BREEZE_SPAWN_EGG: Self = Self {
id: 535,
registry_key: "minecraft:breeze_spawn_egg",
@ -38874,7 +38874,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const BROWN_BUNDLE : Self = Self { id : 266 , registry_key : "minecraft:brown_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x0Fitem_properties\x01\x0Eshould_despawn\x01\x03\x0Bframe_count\x02\x01\x17can_destroy_in_creative\x01\x01\x0Eliquid_clipped\0\x03\x11creative_category\x06\x01\rhand_equipped\0\x03\ruse_animation\0\x01\x12hidden_in_commands\x02\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\x08\x10enchantable_slot\x04none\x03\x0Cuse_duration\0\x03\x11enchantable_value\0\x01\x04foil\0\x03\x0Emax_stack_size\x02\x03\x06damage\0\x08\x0Ecreative_group\0\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x16bundle_brown_open_back\x08\x11bundle_open_front\x17bundle_brown_open_front\x08\x07default\x0Cbundle_brown\0\0\x01\x0Eallow_off_hand\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\0\t\titem_tags\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\0" } ;
pub const BROWN_BUNDLE : Self = Self { id : 266 , registry_key : "minecraft:brown_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x16minecraft:storage_item\x01\x1Aallow_nested_storage_items\x01\t\rallowed_items\0\0\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x0Fitem_properties\x08\x10enchantable_slot\x04none\x01\x0Eallow_off_hand\0\x01\x0Eshould_despawn\x01\x05\x0Cmining_speed\0\0\x80?\x03\x11creative_category\x06\x01\x0Fstacked_by_data\0\x08\x0Ecreative_group\0\x03\x11enchantable_value\0\x01\rhand_equipped\0\x03\x0Cuse_duration\0\x03\ruse_animation\0\x01\x0Eliquid_clipped\0\x03\x0Bframe_count\x02\x03\x06damage\0\x01\x04foil\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Cbundle_brown\x08\x10bundle_open_back\x16bundle_brown_open_back\x08\x11bundle_open_front\x17bundle_brown_open_front\0\0\x01\x12hidden_in_commands\x02\x03\x0Emax_stack_size\x02\x01\x17can_destroy_in_creative\x01\0\t\titem_tags\0\0\0" } ;
pub const BROWN_CANDLE: Self = Self {
id: -425,
registry_key: "minecraft:brown_candle",
@ -39043,7 +39043,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const BUNDLE : Self = Self { id : 267 , registry_key : "minecraft:bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x0Fitem_properties\x01\rhand_equipped\0\x08\x0Ecreative_group\0\x03\x0Emax_stack_size\x02\x01\x04foil\0\x03\x11enchantable_value\0\x01\x12hidden_in_commands\x02\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x06bundle\x08\x10bundle_open_back\x10bundle_open_back\x08\x11bundle_open_front\x11bundle_open_front\0\0\x01\x17can_destroy_in_creative\x01\x01\x0Eallow_off_hand\0\x08\x10enchantable_slot\x04none\x05\x0Cmining_speed\0\0\x80?\x03\x11creative_category\x06\x01\x0Fstacked_by_data\0\x03\x0Bframe_count\x02\x01\x0Eliquid_clipped\0\x01\x0Eshould_despawn\x01\x03\ruse_animation\0\x03\x06damage\0\x03\x0Cuse_duration\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\t\titem_tags\0\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\0" } ;
pub const BUNDLE : Self = Self { id : 267 , registry_key : "minecraft:bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\t\titem_tags\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x0Fitem_properties\x01\x12hidden_in_commands\x02\x01\x0Eshould_despawn\x01\x01\x0Fstacked_by_data\0\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x11bundle_open_front\x08\x10bundle_open_back\x10bundle_open_back\x08\x07default\x06bundle\0\0\x05\x0Cmining_speed\0\0\x80?\x03\x11enchantable_value\0\x01\x0Eallow_off_hand\0\x03\ruse_animation\0\x03\x06damage\0\x08\x10enchantable_slot\x04none\x01\x04foil\0\x03\x0Cuse_duration\0\x08\x0Ecreative_group\0\x03\x0Bframe_count\x02\x01\x17can_destroy_in_creative\x01\x01\rhand_equipped\0\x03\x11creative_category\x06\x01\x0Eliquid_clipped\0\x03\x0Emax_stack_size\x02\0\n\x16minecraft:storage_item\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\t\rallowed_items\0\0\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\0" } ;
pub const BURN_POTTERY_SHERD: Self = Self {
id: 704,
registry_key: "minecraft:burn_pottery_sherd",
@ -39107,7 +39107,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const CAMERA : Self = Self { id : 636 , registry_key : "minecraft:camera" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x10minecraft:camera\x05\x10shutter_duration\xCD\xCCL>\x05\x13black_bars_duration\xCD\xCCL>\x05\x10picture_duration\0\0\x80?\x05\x17black_bars_screen_ratio\n\xD7\xA3=\x05\x14shutter_screen_ratio\0\0\0?\x05\x13slide_away_duration\xCD\xCCL>\0\x03\x16minecraft:use_duration\xC0\x9A\x0C\x08\x0Fminecraft:block\x10minecraft:camera\0" } ;
pub const CAMERA : Self = Self { id : 636 , registry_key : "minecraft:camera" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x08\x0Fminecraft:block\x10minecraft:camera\x03\x16minecraft:use_duration\xC0\x9A\x0C\n\x10minecraft:camera\x05\x10shutter_duration\xCD\xCCL>\x05\x14shutter_screen_ratio\0\0\0?\x05\x13slide_away_duration\xCD\xCCL>\x05\x17black_bars_screen_ratio\n\xD7\xA3=\x05\x10picture_duration\0\0\x80?\x05\x13black_bars_duration\xCD\xCCL>\0\0" } ;
pub const CAMPFIRE: Self = Self {
id: 630,
registry_key: "minecraft:campfire",
@ -39136,7 +39136,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const CARROT : Self = Self { id : 308 , registry_key : "minecraft:carrot" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\t\x08plant_at\x08\x02\x12minecraft:farmland\x01\x1Aplant_at_any_solid_surface\0\x08\x0Bcrop_result\x11minecraft:carrots\x08\rplant_at_face\x02up\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x08\rcooldown_type\0\x03\rcooldown_time\0\x03\tnutrition\x06\x08\x11using_converts_to\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x01\x0Ecan_always_eat\0\x03\ron_use_action\x01\x05\x13saturation_modifier\x9A\x99\x19?\0\0" } ;
pub const CARROT : Self = Self { id : 308 , registry_key : "minecraft:carrot" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\ron_use_action\x01\x08\rcooldown_type\0\x03\rcooldown_time\0\x03\tnutrition\x06\x08\x11using_converts_to\0\x05\x13saturation_modifier\x9A\x99\x19?\x01\x0Ecan_always_eat\0\0\n\x0Eminecraft:seed\x08\x0Bcrop_result\x11minecraft:carrots\x08\rplant_at_face\x02up\t\x08plant_at\x08\x02\x12minecraft:farmland\x01\x1Aplant_at_any_solid_surface\0\0\0" } ;
pub const CARROT_ON_A_STICK: Self = Self {
id: 556,
registry_key: "minecraft:carrot_on_a_stick",
@ -39438,7 +39438,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const CHICKEN : Self = Self { id : 304 , registry_key : "minecraft:chicken" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\rcooldown_time\0\x03\tnutrition\x04\x08\rcooldown_type\0\x05\x13saturation_modifier\x9A\x99\x99>\t\x07effects\n\x02\x03\tamplifier\0\x08\x04name\x06hunger\x05\x06chance\x9A\x99\x99>\x03\x02id\"\x08\rdescriptionId\rpotion.hunger\x03\x08duration<\0\x03\ron_use_action\x01\x08\x11using_converts_to\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const CHICKEN : Self = Self { id : 304 , registry_key : "minecraft:chicken" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\t\x07effects\n\x02\x03\tamplifier\0\x08\rdescriptionId\rpotion.hunger\x03\x08duration<\x03\x02id\"\x08\x04name\x06hunger\x05\x06chance\x9A\x99\x99>\0\x03\tnutrition\x04\x03\ron_use_action\x01\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\x9A\x99\x99>\x03\rcooldown_time\0\x08\rcooldown_type\0\x08\x11using_converts_to\0\0\0" } ;
pub const CHICKEN_SPAWN_EGG: Self = Self {
id: 468,
registry_key: "minecraft:chicken_spawn_egg",
@ -39558,7 +39558,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const CHORUS_FRUIT : Self = Self { id : 597 , registry_key : "minecraft:chorus_fruit" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\rcooldown_time(\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\rcooldown_type\x0Bchorusfruit\x03\ron_use_action\0\x05\x13saturation_modifier\x9A\x99\x99>\x08\x11using_converts_to\0\x01\x0Ecan_always_eat\x01\x03\tnutrition\x08\0\0" } ;
pub const CHORUS_FRUIT : Self = Self { id : 597 , registry_key : "minecraft:chorus_fruit" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x05\x13saturation_modifier\x9A\x99\x99>\x01\x0Ecan_always_eat\x01\x08\rcooldown_type\x0Bchorusfruit\x03\rcooldown_time(\x03\ron_use_action\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\x03\tnutrition\x08\0\x03\x16minecraft:use_duration@\0" } ;
pub const CHORUS_PLANT: Self = Self {
id: 240,
registry_key: "minecraft:chorus_plant",
@ -39783,7 +39783,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const COD : Self = Self { id : 293 , registry_key : "minecraft:cod" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x01\x19minecraft:stacked_by_data\x01\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\ron_use_action\x01\x03\tnutrition\x04\x03\rcooldown_time\0\x05\x13saturation_modifier\xCD\xCC\xCC=\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x01\x0Ecan_always_eat\0\x08\x11using_converts_to\0\x08\rcooldown_type\0\0\0" } ;
pub const COD : Self = Self { id : 293 , registry_key : "minecraft:cod" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x03\ron_use_action\x01\x08\rcooldown_type\0\x08\x11using_converts_to\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\xCD\xCC\xCC=\x03\tnutrition\x04\x03\rcooldown_time\0\0\x01\x19minecraft:stacked_by_data\x01\x03\x16minecraft:use_duration@\0" } ;
pub const COD_BUCKET: Self = Self {
id: 396,
registry_key: "minecraft:cod_bucket",
@ -39910,14 +39910,14 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const COOKED_BEEF : Self = Self { id : 303 , registry_key : "minecraft:cooked_beef" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\x11using_converts_to\0\x03\rcooldown_time\0\x03\ron_use_action\x01\x05\x13saturation_modifier\xCD\xCCL?\x08\rcooldown_type\0\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\tnutrition\x10\0\x03\x16minecraft:use_duration@\0" } ;
pub const COOKED_CHICKEN : Self = Self { id : 305 , registry_key : "minecraft:cooked_chicken" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\x11using_converts_to\0\x08\rcooldown_type\0\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x03\tnutrition\x0C\x05\x13saturation_modifier\x9A\x99\x19?\0\x03\x16minecraft:use_duration@\0" } ;
pub const COOKED_COD : Self = Self { id : 297 , registry_key : "minecraft:cooked_cod" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\rcooldown_time\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\x01\x0Ecan_always_eat\0\x03\ron_use_action\x01\x03\tnutrition\n\x05\x13saturation_modifier\x9A\x99\x19?\x08\rcooldown_type\0\0\x03\x16minecraft:use_duration@\x01\x19minecraft:stacked_by_data\x01\0" } ;
pub const COOKED_MUTTON : Self = Self { id : 590 , registry_key : "minecraft:cooked_mutton" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\rcooldown_time\0\x08\x11using_converts_to\0\x03\tnutrition\x0C\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\x05\x13saturation_modifier\xCD\xCCL?\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\0" } ;
pub const COOKED_PORKCHOP : Self = Self { id : 292 , registry_key : "minecraft:cooked_porkchop" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\ron_use_action\x01\x05\x13saturation_modifier\xCD\xCCL?\x03\rcooldown_time\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\tnutrition\x10\x08\x11using_converts_to\0\x08\rcooldown_type\0\x01\x0Ecan_always_eat\0\0\0" } ;
pub const COOKED_RABBIT : Self = Self { id : 318 , registry_key : "minecraft:cooked_rabbit" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x08\x11using_converts_to\0\x03\rcooldown_time\0\x08\rcooldown_type\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\x9A\x99\x19?\x03\ron_use_action\x01\x03\tnutrition\n\0\x03\x16minecraft:use_duration@\0" } ;
pub const COOKED_SALMON : Self = Self { id : 298 , registry_key : "minecraft:cooked_salmon" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\tnutrition\x0C\x05\x13saturation_modifier\xCD\xCCL?\x08\rcooldown_type\0\x08\x11using_converts_to\0\x03\rcooldown_time\0\x01\x0Ecan_always_eat\0\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\x01\x19minecraft:stacked_by_data\x01\0" } ;
pub const COOKIE : Self = Self { id : 300 , registry_key : "minecraft:cookie" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\xCD\xCC\xCC=\x03\ron_use_action\x01\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x03\tnutrition\x04\x08\x11using_converts_to\0\x08\rcooldown_type\0\0\0" } ;
pub const COOKED_BEEF : Self = Self { id : 303 , registry_key : "minecraft:cooked_beef" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\tnutrition\x10\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\rcooldown_type\0\x01\x0Ecan_always_eat\0\x08\x11using_converts_to\0\x03\ron_use_action\x01\x05\x13saturation_modifier\xCD\xCCL?\x03\rcooldown_time\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const COOKED_CHICKEN : Self = Self { id : 305 , registry_key : "minecraft:cooked_chicken" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\rcooldown_time\0\x08\rcooldown_type\0\x03\tnutrition\x0C\x08\x11using_converts_to\0\x03\ron_use_action\x01\x05\x13saturation_modifier\x9A\x99\x19?\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\x03\x16minecraft:use_duration@\0" } ;
pub const COOKED_COD : Self = Self { id : 297 , registry_key : "minecraft:cooked_cod" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\rcooldown_type\0\x08\x11using_converts_to\0\x05\x13saturation_modifier\x9A\x99\x19?\x03\tnutrition\n\x03\ron_use_action\x01\x03\rcooldown_time\0\0\x03\x16minecraft:use_duration@\x01\x19minecraft:stacked_by_data\x01\0" } ;
pub const COOKED_MUTTON : Self = Self { id : 590 , registry_key : "minecraft:cooked_mutton" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\x03\ron_use_action\x01\x03\rcooldown_time\0\x03\tnutrition\x0C\x05\x13saturation_modifier\xCD\xCCL?\x08\rcooldown_type\0\x01\x0Ecan_always_eat\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const COOKED_PORKCHOP : Self = Self { id : 292 , registry_key : "minecraft:cooked_porkchop" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\x05\x13saturation_modifier\xCD\xCCL?\x03\rcooldown_time\0\x03\tnutrition\x10\x08\x11using_converts_to\0\0\0" } ;
pub const COOKED_RABBIT : Self = Self { id : 318 , registry_key : "minecraft:cooked_rabbit" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\rcooldown_time\0\x03\tnutrition\n\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\x03\ron_use_action\x01\x05\x13saturation_modifier\x9A\x99\x19?\x08\x11using_converts_to\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const COOKED_SALMON : Self = Self { id : 298 , registry_key : "minecraft:cooked_salmon" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x01\x19minecraft:stacked_by_data\x01\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x08\rcooldown_type\0\x03\tnutrition\x0C\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x05\x13saturation_modifier\xCD\xCCL?\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\0\0" } ;
pub const COOKIE : Self = Self { id : 300 , registry_key : "minecraft:cookie" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\rcooldown_time\0\x05\x13saturation_modifier\xCD\xCC\xCC=\x03\tnutrition\x04\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\ron_use_action\x01\x08\rcooldown_type\0\x01\x0Ecan_always_eat\0\x08\x11using_converts_to\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const COPPER_AXE: Self = Self {
id: 776,
registry_key: "minecraft:copper_axe",
@ -40079,7 +40079,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const COPPER_SPEAR : Self = Self { id : 257 , registry_key : "minecraft:copper_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x16minecraft:display_name\x08\x05value\x16item.copper_spear.name\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\x05\x11damage_multiplier\x85\xEBQ?\n\x13dismount_conditions\x05\x12min_relative_speed\0\0\0\0\x02\x0Cmax_durationP\0\x05\tmin_speed\0\0@A\0\n\x14knockback_conditions\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed33\xA3@\x02\x0Cmax_duration\xA5\0\0\x05\rhitbox_margin\0\0\x80>\x05\x0Fdamage_modifier\0\0\0\0\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\n\x11damage_conditions\x05\x12min_relative_speed33\x93@\x02\x0Cmax_duration\xFA\0\x05\tmin_speed\0\0\0\0\0\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\x02\x05delay\r\0\0\0\n\x14minecraft:durability\x03\x0Emax_durability\xFC\x02\n\rdamage_chance\x03\x03min\0\x03\x03max\xC8\x01\0\0\n\x18minecraft:swing_duration\x05\x05value\x9A\x99Y?\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x15minecraft:copper_tier\x12minecraft:is_spear\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\t\x05items\n\x02\x08\x04name\x16minecraft:copper_spear\0\n\rrepair_amount\x08\nexpression)context.other->query.remaining_durability\x02\x07version\r\0\0\0\t\x05items\n\x02\x08\x04name\x16minecraft:copper_ingot\0\n\rrepair_amount\x02\x07version\r\0\x08\nexpression\x1Bquery.max_durability * 0.25\0\0\0\t\titem_tags\x08\x04\x15minecraft:copper_tier\x12minecraft:is_spear\n\x19minecraft:piercing_weapon\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\x05\rhitbox_margin\0\0\x80>\0\n\x10minecraft:damage\x02\x05value\x02\0\0\n\x12minecraft:cooldown\x08\x08category\x05spear\x05\x08duration\x9A\x99Y?\x08\x04type\x06attack\0\n\x17minecraft:use_modifiers\x01\x0Femit_vibrations\0\x08\x0Bstart_using\x06always\x05\x11movement_modifier\0\0\x80?\x05\x0Cuse_duration\0\xA0\x8CG\x08\x0Bstart_sound\x15item.copper_spear.use\0\n\x0Fitem_properties\x03\x0Cuse_duration\x80\xE4\xAF\x01\x01\x0Eshould_despawn\x01\x01\x0Eallow_off_hand\0\x08\x0Ecreative_group\0\x08\x10enchantable_slot\x0Bmelee_spear\x03\x11creative_category\x06\x01\rhand_equipped\x01\x03\x0Emax_stack_size\x02\x01\x04foil\0\x01\x17can_destroy_in_creative\x01\x03\ruse_animation\0\x01\x0Eliquid_clipped\0\x01\x0Fstacked_by_data\0\x01\x12hidden_in_commands\x02\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Ccopper_spear\0\0\x03\x11enchantable_value\x1A\x03\x06damage\x04\x05\x0Cmining_speed\0\0\x80?\x03\x0Bframe_count\x02\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x16minecraft:swing_sounds\x08\nattack_hit\x1Citem.copper_spear.attack_hit\x08\x0Battack_miss\x1Ditem.copper_spear.attack_miss\0\n\x15minecraft:enchantable\x01\x05value\r\x08\x04slot\x0Bmelee_spear\0\0" } ;
pub const COPPER_SPEAR : Self = Self { id : 257 , registry_key : "minecraft:copper_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\n\rrepair_amount\x02\x07version\r\0\x08\nexpression)context.other->query.remaining_durability\0\t\x05items\n\x02\x08\x04name\x16minecraft:copper_spear\0\0\t\x05items\n\x02\x08\x04name\x16minecraft:copper_ingot\0\n\rrepair_amount\x08\nexpression\x1Bquery.max_durability * 0.25\x02\x07version\r\0\0\0\0\n\x18minecraft:swing_duration\x05\x05value\x9A\x99Y?\0\t\titem_tags\x08\x04\x15minecraft:copper_tier\x12minecraft:is_spear\n\x16minecraft:swing_sounds\x08\x0Battack_miss\x1Ditem.copper_spear.attack_miss\x08\nattack_hit\x1Citem.copper_spear.attack_hit\0\n\x12minecraft:cooldown\x08\x08category\x05spear\x05\x08duration\x9A\x99Y?\x08\x04type\x06attack\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x15minecraft:copper_tier\x12minecraft:is_spear\0\n\x15minecraft:enchantable\x08\x04slot\x0Bmelee_spear\x01\x05value\r\0\n\x16minecraft:display_name\x08\x05value\x16item.copper_spear.name\0\n\x0Fitem_properties\x01\x0Eshould_despawn\x01\x01\x0Eliquid_clipped\0\x03\x11creative_category\x06\x08\x0Ecreative_group\0\x08\x10enchantable_slot\x0Bmelee_spear\x03\ruse_animation\0\x01\x0Eallow_off_hand\0\x01\x12hidden_in_commands\x02\x03\x0Cuse_duration\x80\xE4\xAF\x01\x03\x11enchantable_value\x1A\x05\x0Cmining_speed\0\0\x80?\x03\x06damage\x04\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Ccopper_spear\0\0\x03\x0Emax_stack_size\x02\x01\x0Fstacked_by_data\0\x01\x17can_destroy_in_creative\x01\x01\rhand_equipped\x01\x03\x0Bframe_count\x02\x01\x04foil\0\0\n\x10minecraft:damage\x02\x05value\x02\0\0\n\x19minecraft:piercing_weapon\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\x05\rhitbox_margin\0\0\x80>\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\n\x11damage_conditions\x02\x0Cmax_duration\xFA\0\x05\x12min_relative_speed33\x93@\x05\tmin_speed\0\0\0\0\0\x02\x05delay\r\0\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\x05\rhitbox_margin\0\0\x80>\n\x13dismount_conditions\x02\x0Cmax_durationP\0\x05\tmin_speed\0\0@A\x05\x12min_relative_speed\0\0\0\0\0\n\x14knockback_conditions\x02\x0Cmax_duration\xA5\0\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed33\xA3@\0\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\x05\x0Fdamage_modifier\0\0\0\0\x05\x11damage_multiplier\x85\xEBQ?\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x17minecraft:use_modifiers\x05\x0Cuse_duration\0\xA0\x8CG\x08\x0Bstart_sound\x15item.copper_spear.use\x05\x11movement_modifier\0\0\x80?\x08\x0Bstart_using\x06always\x01\x0Femit_vibrations\0\0\n\x14minecraft:durability\n\rdamage_chance\x03\x03min\0\x03\x03max\xC8\x01\0\x03\x0Emax_durability\xFC\x02\0\0" } ;
pub const COPPER_SWORD: Self = Self {
id: 773,
registry_key: "minecraft:copper_sword",
@ -40444,7 +40444,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const CYAN_BUNDLE : Self = Self { id : 268 , registry_key : "minecraft:cyan_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x16minecraft:storage_item\x03\tmax_slots\x80\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x01\x1Aallow_nested_storage_items\x01\t\rallowed_items\0\0\0\t\titem_tags\0\0\n\x0Fitem_properties\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x16bundle_cyan_open_front\x08\x07default\x0Bbundle_cyan\x08\x10bundle_open_back\x15bundle_cyan_open_back\0\0\x01\x0Fstacked_by_data\0\x03\x0Bframe_count\x02\x01\rhand_equipped\0\x08\x0Ecreative_group\0\x08\x10enchantable_slot\x04none\x01\x04foil\0\x03\x06damage\0\x03\x0Cuse_duration\0\x01\x12hidden_in_commands\x02\x03\x11enchantable_value\0\x01\x17can_destroy_in_creative\x01\x03\x11creative_category\x06\x01\x0Eliquid_clipped\0\x01\x0Eshould_despawn\x01\x03\ruse_animation\0\x01\x0Eallow_off_hand\0\x03\x0Emax_stack_size\x02\x05\x0Cmining_speed\0\0\x80?\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\0" } ;
pub const CYAN_BUNDLE : Self = Self { id : 268 , registry_key : "minecraft:cyan_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\t\titem_tags\0\0\n\x0Fitem_properties\x08\x10enchantable_slot\x04none\x08\x0Ecreative_group\0\x01\x12hidden_in_commands\x02\x03\x11enchantable_value\0\x01\x17can_destroy_in_creative\x01\x03\x0Emax_stack_size\x02\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x16bundle_cyan_open_front\x08\x10bundle_open_back\x15bundle_cyan_open_back\x08\x07default\x0Bbundle_cyan\0\0\x03\ruse_animation\0\x01\x04foil\0\x03\x0Cuse_duration\0\x03\x06damage\0\x01\x0Eallow_off_hand\0\x03\x11creative_category\x06\x01\x0Eshould_despawn\x01\x01\rhand_equipped\0\x05\x0Cmining_speed\0\0\x80?\x03\x0Bframe_count\x02\x01\x0Eliquid_clipped\0\x01\x0Fstacked_by_data\0\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\0" } ;
pub const CYAN_CANDLE: Self = Self {
id: -422,
registry_key: "minecraft:cyan_candle",
@ -41159,7 +41159,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const DIAMOND_SPEAR : Self = Self { id : 258 , registry_key : "minecraft:diamond_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x15minecraft:enchantable\x01\x05value\n\x08\x04slot\x0Bmelee_spear\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\n\x11damage_conditions\x02\x0Cmax_duration\xC8\0\x05\tmin_speed\0\0\0\0\x05\x12min_relative_speed33\x93@\0\n\x14knockback_conditions\x02\x0Cmax_duration\x82\0\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed33\xA3@\0\x05\x0Fdamage_modifier\0\0\0\0\x05\rhitbox_margin\0\0\x80>\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\x05\x11damage_multiplier\x9A\x99\x89?\x02\x05delay\n\0\n\x13dismount_conditions\x02\x0Cmax_duration<\0\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed\0\0 A\0\0\0\n\x19minecraft:piercing_weapon\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\x05\rhitbox_margin\0\0\x80>\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\0\n\x18minecraft:swing_duration\x05\x05valueff\x86?\0\n\x10minecraft:damage\x02\x05value\x04\0\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\t\x05items\n\x02\x08\x04name\x17minecraft:diamond_spear\0\n\rrepair_amount\x08\nexpression)context.other->query.remaining_durability\x02\x07version\r\0\0\0\t\x05items\n\x02\x08\x04name\x11minecraft:diamond\0\n\rrepair_amount\x08\nexpression\x1Bquery.max_durability * 0.25\x02\x07version\r\0\0\0\0\n\x14minecraft:durability\x03\x0Emax_durability\xB0\x18\n\rdamage_chance\x03\x03min\0\x03\x03max\xC8\x01\0\0\n\x0Eminecraft:tags\t\x04tags\x08\x06\x16minecraft:diamond_tier\x1Dminecraft:transformable_items\x12minecraft:is_spear\0\n\x12minecraft:cooldown\x05\x08durationff\x86?\x08\x08category\x05spear\x08\x04type\x06attack\0\n\x0Fitem_properties\x03\ruse_animation\0\x03\x0Cuse_duration\x80\xE4\xAF\x01\x01\x0Eallow_off_hand\0\x03\x0Emax_stack_size\x02\n\x0Eminecraft:icon\n\x08textures\x08\x07default\rdiamond_spear\0\0\x03\x11creative_category\x06\x03\x06damage\x08\x08\x10enchantable_slot\x0Bmelee_spear\x01\x0Fstacked_by_data\0\x03\x11enchantable_value\x14\x01\rhand_equipped\x01\x03\x0Bframe_count\x02\x01\x04foil\0\x08\x0Ecreative_group\0\x05\x0Cmining_speed\0\0\x80?\x01\x12hidden_in_commands\x02\x01\x0Eliquid_clipped\0\x01\x17can_destroy_in_creative\x01\x01\x0Eshould_despawn\x01\0\t\titem_tags\x08\x06\x16minecraft:diamond_tier\x1Dminecraft:transformable_items\x12minecraft:is_spear\n\x17minecraft:use_modifiers\x05\x0Cuse_duration\0\xA0\x8CG\x05\x11movement_modifier\0\0\x80?\x08\x0Bstart_sound\x16item.diamond_spear.use\x08\x0Bstart_using\x06always\x01\x0Femit_vibrations\0\0\n\x16minecraft:swing_sounds\x08\nattack_hit\x1Ditem.diamond_spear.attack_hit\x08\x0Battack_miss\x1Eitem.diamond_spear.attack_miss\0\n\x16minecraft:display_name\x08\x05value\x17item.diamond_spear.name\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\0" } ;
pub const DIAMOND_SPEAR : Self = Self { id : 258 , registry_key : "minecraft:diamond_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x10minecraft:damage\x02\x05value\x04\0\0\n\x12minecraft:cooldown\x08\x08category\x05spear\x05\x08durationff\x86?\x08\x04type\x06attack\0\n\x17minecraft:use_modifiers\x08\x0Bstart_using\x06always\x01\x0Femit_vibrations\0\x08\x0Bstart_sound\x16item.diamond_spear.use\x05\x11movement_modifier\0\0\x80?\x05\x0Cuse_duration\0\xA0\x8CG\0\n\x0Fitem_properties\x03\x06damage\x08\x01\x0Fstacked_by_data\0\x01\rhand_equipped\x01\n\x0Eminecraft:icon\n\x08textures\x08\x07default\rdiamond_spear\0\0\x01\x0Eallow_off_hand\0\x08\x10enchantable_slot\x0Bmelee_spear\x08\x0Ecreative_group\0\x01\x12hidden_in_commands\x02\x03\x0Emax_stack_size\x02\x03\x11enchantable_value\x14\x01\x04foil\0\x05\x0Cmining_speed\0\0\x80?\x01\x17can_destroy_in_creative\x01\x03\x0Bframe_count\x02\x01\x0Eshould_despawn\x01\x03\x11creative_category\x06\x03\x0Cuse_duration\x80\xE4\xAF\x01\x01\x0Eliquid_clipped\0\x03\ruse_animation\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x16minecraft:display_name\x08\x05value\x17item.diamond_spear.name\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\x02\x05delay\n\0\n\x11damage_conditions\x05\x12min_relative_speed33\x93@\x02\x0Cmax_duration\xC8\0\x05\tmin_speed\0\0\0\0\0\n\x13dismount_conditions\x05\tmin_speed\0\0 A\x02\x0Cmax_duration<\0\x05\x12min_relative_speed\0\0\0\0\0\n\x14knockback_conditions\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed33\xA3@\x02\x0Cmax_duration\x82\0\0\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\x05\x0Fdamage_modifier\0\0\0\0\x05\rhitbox_margin\0\0\x80>\x05\x11damage_multiplier\x9A\x99\x89?\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\0\0\n\x19minecraft:piercing_weapon\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\x05\rhitbox_margin\0\0\x80>\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\0\n\x18minecraft:swing_duration\x05\x05valueff\x86?\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x16minecraft:swing_sounds\x08\x0Battack_miss\x1Eitem.diamond_spear.attack_miss\x08\nattack_hit\x1Ditem.diamond_spear.attack_hit\0\t\titem_tags\x08\x06\x16minecraft:diamond_tier\x1Dminecraft:transformable_items\x12minecraft:is_spear\n\x0Eminecraft:tags\t\x04tags\x08\x06\x16minecraft:diamond_tier\x1Dminecraft:transformable_items\x12minecraft:is_spear\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\n\rrepair_amount\x02\x07version\r\0\x08\nexpression)context.other->query.remaining_durability\0\t\x05items\n\x02\x08\x04name\x17minecraft:diamond_spear\0\0\n\rrepair_amount\x02\x07version\r\0\x08\nexpression\x1Bquery.max_durability * 0.25\0\t\x05items\n\x02\x08\x04name\x11minecraft:diamond\0\0\0\n\x15minecraft:enchantable\x01\x05value\n\x08\x04slot\x0Bmelee_spear\0\n\x14minecraft:durability\n\rdamage_chance\x03\x03max\xC8\x01\x03\x03min\0\0\x03\x0Emax_durability\xB0\x18\0\0" } ;
pub const DIAMOND_SWORD: Self = Self {
id: 347,
registry_key: "minecraft:diamond_sword",
@ -41314,7 +41314,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const DRIED_KELP : Self = Self { id : 299 , registry_key : "minecraft:dried_kelp" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\x11using_converts_to\0\x03\tnutrition\x02\x08\rcooldown_type\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\ron_use_action\x01\x03\rcooldown_time\0\x05\x13saturation_modifier\xCD\xCC\xCC=\x01\x0Ecan_always_eat\0\0\x03\x16minecraft:use_duration \0" } ;
pub const DRIED_KELP : Self = Self { id : 299 , registry_key : "minecraft:dried_kelp" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\rcooldown_type\0\x08\x11using_converts_to\0\x05\x13saturation_modifier\xCD\xCC\xCC=\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\tnutrition\x02\x03\rcooldown_time\0\x03\ron_use_action\x01\x01\x0Ecan_always_eat\0\0\x03\x16minecraft:use_duration \0" } ;
pub const DRIED_KELP_BLOCK: Self = Self {
id: -139,
registry_key: "minecraft:dried_kelp_block",
@ -42260,7 +42260,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const ENCHANTED_GOLDEN_APPLE : Self = Self { id : 288 , registry_key : "minecraft:enchanted_golden_apple" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\rcooldown_type\0\x08\x11using_converts_to\0\x01\x0Ecan_always_eat\x01\x03\tnutrition\x08\x05\x13saturation_modifier\x9A\x99\x99?\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\rcooldown_time\0\t\x07effects\n\x08\x03\x08duration<\x03\tamplifier\x02\x08\x04name\x0Cregeneration\x03\x02id\x14\x08\rdescriptionId\x13potion.regeneration\x05\x06chance\0\0\x80?\0\x03\x02id,\x08\rdescriptionId\x11potion.absorption\x03\x08duration\xF0\x01\x05\x06chance\0\0\x80?\x03\tamplifier\x06\x08\x04name\nabsorption\0\x08\x04name\nresistance\x05\x06chance\0\0\x80?\x08\rdescriptionId\x11potion.resistance\x03\x08duration\xD8\x04\x03\tamplifier\0\x03\x02id\x16\0\x03\x02id\x18\x05\x06chance\0\0\x80?\x03\x08duration\xD8\x04\x08\rdescriptionId\x15potion.fireResistance\x03\tamplifier\0\x08\x04name\x0Ffire_resistance\0\0\x01\x0Eminecraft:foil\x01\x01\x19minecraft:stacked_by_data\x01\x03\x16minecraft:use_duration@\0" } ;
pub const ENCHANTED_GOLDEN_APPLE : Self = Self { id : 288 , registry_key : "minecraft:enchanted_golden_apple" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x01\x19minecraft:stacked_by_data\x01\n\x0Eminecraft:food\x08\x11using_converts_to\0\x03\rcooldown_time\0\x08\rcooldown_type\0\x01\x0Ecan_always_eat\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\ron_use_action\x01\x05\x13saturation_modifier\x9A\x99\x99?\t\x07effects\n\x08\x08\x04name\x0Cregeneration\x05\x06chance\0\0\x80?\x08\rdescriptionId\x13potion.regeneration\x03\x02id\x14\x03\x08duration<\x03\tamplifier\x02\0\x03\tamplifier\x06\x05\x06chance\0\0\x80?\x03\x02id,\x08\rdescriptionId\x11potion.absorption\x08\x04name\nabsorption\x03\x08duration\xF0\x01\0\x03\x02id\x16\x08\x04name\nresistance\x08\rdescriptionId\x11potion.resistance\x03\tamplifier\0\x03\x08duration\xD8\x04\x05\x06chance\0\0\x80?\0\x05\x06chance\0\0\x80?\x03\x08duration\xD8\x04\x03\x02id\x18\x08\x04name\x0Ffire_resistance\x03\tamplifier\0\x08\rdescriptionId\x15potion.fireResistance\0\x03\tnutrition\x08\0\x03\x16minecraft:use_duration@\x01\x0Eminecraft:foil\x01\0" } ;
pub const ENCHANTING_TABLE: Self = Self {
id: 116,
registry_key: "minecraft:enchanting_table",
@ -42835,7 +42835,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const GLOW_BERRIES : Self = Self { id : 845 , registry_key : "minecraft:glow_berries" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x05\x13saturation_modifier\x9A\x99\x99>\x03\ron_use_action\x01\x08\rcooldown_type\0\x03\tnutrition\x04\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\0\n\x0Eminecraft:seed\x08\x0Bcrop_result\x14minecraft:cave_vines\x01\x1Aplant_at_any_solid_surface\x01\x08\rplant_at_face\x04down\t\x08plant_at\x08\x04\ncave_vines\x1Ccave_vines_head_with_berries\0\0" } ;
pub const GLOW_BERRIES : Self = Self { id : 845 , registry_key : "minecraft:glow_berries" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\rcooldown_type\0\x03\ron_use_action\x01\x05\x13saturation_modifier\x9A\x99\x99>\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\x03\rcooldown_time\0\x03\tnutrition\x04\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:seed\x01\x1Aplant_at_any_solid_surface\x01\x08\x0Bcrop_result\x14minecraft:cave_vines\t\x08plant_at\x08\x04\ncave_vines\x1Ccave_vines_head_with_berries\x08\rplant_at_face\x04down\0\0" } ;
pub const GLOW_FRAME: Self = Self {
id: 665,
registry_key: "minecraft:glow_frame",
@ -42934,7 +42934,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const GOLDEN_APPLE : Self = Self { id : 287 , registry_key : "minecraft:golden_apple" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\tnutrition\x08\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\x03\ron_use_action\x01\t\x07effects\n\x04\x03\x02id\x14\x08\x04name\x0Cregeneration\x05\x06chance\0\0\x80?\x08\rdescriptionId\x13potion.regeneration\x03\tamplifier\x02\x03\x08duration\n\0\x03\tamplifier\0\x08\rdescriptionId\x11potion.absorption\x03\x02id,\x05\x06chance\0\0\x80?\x08\x04name\nabsorption\x03\x08duration\xF0\x01\0\x03\rcooldown_time\0\x05\x13saturation_modifier\x9A\x99\x99?\x01\x0Ecan_always_eat\x01\x08\rcooldown_type\0\0\x01\x19minecraft:stacked_by_data\x01\0" } ;
pub const GOLDEN_APPLE : Self = Self { id : 287 , registry_key : "minecraft:golden_apple" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\x11using_converts_to\0\x08\rcooldown_type\0\t\x07effects\n\x04\x03\x08duration\n\x03\tamplifier\x02\x03\x02id\x14\x08\x04name\x0Cregeneration\x05\x06chance\0\0\x80?\x08\rdescriptionId\x13potion.regeneration\0\x03\tamplifier\0\x05\x06chance\0\0\x80?\x08\rdescriptionId\x11potion.absorption\x03\x08duration\xF0\x01\x03\x02id,\x08\x04name\nabsorption\0\x03\tnutrition\x08\x03\ron_use_action\x01\x01\x0Ecan_always_eat\x01\x03\rcooldown_time\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\x9A\x99\x99?\0\x01\x19minecraft:stacked_by_data\x01\x03\x16minecraft:use_duration@\0" } ;
pub const GOLDEN_AXE: Self = Self {
id: 357,
registry_key: "minecraft:golden_axe",
@ -42949,7 +42949,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const GOLDEN_CARROT : Self = Self { id : 312 , registry_key : "minecraft:golden_carrot" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x05\x13saturation_modifier\x9A\x99\x99?\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\x03\ron_use_action\x01\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x08\rcooldown_type\0\x03\tnutrition\x0C\0\x03\x16minecraft:use_duration@\0" } ;
pub const GOLDEN_CARROT : Self = Self { id : 312 , registry_key : "minecraft:golden_carrot" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\tnutrition\x0C\x08\x11using_converts_to\0\x01\x0Ecan_always_eat\0\x03\ron_use_action\x01\x03\rcooldown_time\0\x08\rcooldown_type\0\x05\x13saturation_modifier\x9A\x99\x99?\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\0" } ;
pub const GOLDEN_CHESTPLATE: Self = Self {
id: 384,
registry_key: "minecraft:golden_chestplate",
@ -43020,7 +43020,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const GOLDEN_SPEAR : Self = Self { id : 259 , registry_key : "minecraft:golden_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x10minecraft:damage\x02\x05value\x01\0\0\n\x15minecraft:enchantable\x08\x04slot\x0Bmelee_spear\x01\x05value\x16\0\n\x16minecraft:display_name\x08\x05value\x16item.golden_spear.name\0\n\x16minecraft:swing_sounds\x08\nattack_hit\x1Citem.golden_spear.attack_hit\x08\x0Battack_miss\x1Ditem.golden_spear.attack_miss\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\n\rrepair_amount\x08\nexpression)context.other->query.remaining_durability\x02\x07version\r\0\0\t\x05items\n\x02\x08\x04name\x16minecraft:golden_spear\0\0\n\rrepair_amount\x02\x07version\r\0\x08\nexpression\x1Bquery.max_durability * 0.25\0\t\x05items\n\x02\x08\x04name\x14minecraft:gold_ingot\0\0\0\n\x0Fitem_properties\x01\rhand_equipped\x01\n\x0Eminecraft:icon\n\x08textures\x08\x07default\ngold_spear\0\0\x01\x0Eallow_off_hand\0\x08\x0Ecreative_group\0\x01\x0Eliquid_clipped\0\x03\x0Cuse_duration\x80\xE4\xAF\x01\x01\x17can_destroy_in_creative\x01\x03\x0Emax_stack_size\x02\x03\ruse_animation\0\x03\x0Bframe_count\x02\x03\x11creative_category\x06\x03\x11enchantable_value,\x08\x10enchantable_slot\x0Bmelee_spear\x01\x12hidden_in_commands\x02\x05\x0Cmining_speed\0\0\x80?\x03\x06damage\x02\x01\x0Eshould_despawn\x01\x01\x0Fstacked_by_data\0\x01\x04foil\0\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\x05\rhitbox_margin\0\0\x80>\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\n\x13dismount_conditions\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed\0\0PA\x02\x0Cmax_durationF\0\0\x05\x0Fdamage_modifier\0\0\0\0\n\x11damage_conditions\x05\x12min_relative_speed33\x93@\x05\tmin_speed\0\0\0\0\x02\x0Cmax_duration\x13\x01\0\n\x14knockback_conditions\x02\x0Cmax_duration\xAA\0\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed33\xA3@\0\x05\x11damage_multiplier333?\x02\x05delay\x0E\0\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x19minecraft:piercing_weapon\x05\rhitbox_margin\0\0\x80>\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\0\t\titem_tags\x08\x04\x15minecraft:golden_tier\x12minecraft:is_spear\n\x12minecraft:cooldown\x08\x08category\x05spear\x08\x04type\x06attack\x05\x08duration33s?\0\n\x14minecraft:durability\n\rdamage_chance\x03\x03max\xC8\x01\x03\x03min\0\0\x03\x0Emax_durability<\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x17minecraft:use_modifiers\x01\x0Femit_vibrations\0\x05\x0Cuse_duration\0\xA0\x8CG\x05\x11movement_modifier\0\0\x80?\x08\x0Bstart_using\x06always\x08\x0Bstart_sound\x15item.golden_spear.use\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x15minecraft:golden_tier\x12minecraft:is_spear\0\n\x18minecraft:swing_duration\x05\x05value33s?\0\0" } ;
pub const GOLDEN_SPEAR : Self = Self { id : 259 , registry_key : "minecraft:golden_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x19minecraft:piercing_weapon\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\x05\rhitbox_margin\0\0\x80>\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\0\t\titem_tags\x08\x04\x15minecraft:golden_tier\x12minecraft:is_spear\n\x15minecraft:enchantable\x01\x05value\x16\x08\x04slot\x0Bmelee_spear\0\n\x16minecraft:display_name\x08\x05value\x16item.golden_spear.name\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\n\x11damage_conditions\x05\tmin_speed\0\0\0\0\x02\x0Cmax_duration\x13\x01\x05\x12min_relative_speed33\x93@\0\x05\x0Fdamage_modifier\0\0\0\0\x05\rhitbox_margin\0\0\x80>\x02\x05delay\x0E\0\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\n\x13dismount_conditions\x02\x0Cmax_durationF\0\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed\0\0PA\0\x05\x11damage_multiplier333?\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\n\x14knockback_conditions\x05\x12min_relative_speed\0\0\0\0\x02\x0Cmax_duration\xAA\0\x05\tmin_speed33\xA3@\0\0\0\n\x14minecraft:durability\n\rdamage_chance\x03\x03max\xC8\x01\x03\x03min\0\0\x03\x0Emax_durability<\0\n\x0Fitem_properties\x01\x12hidden_in_commands\x02\x08\x10enchantable_slot\x0Bmelee_spear\x03\x11enchantable_value,\x03\x0Bframe_count\x02\n\x0Eminecraft:icon\n\x08textures\x08\x07default\ngold_spear\0\0\x01\x0Eshould_despawn\x01\x05\x0Cmining_speed\0\0\x80?\x08\x0Ecreative_group\0\x03\ruse_animation\0\x01\x0Eallow_off_hand\0\x03\x0Emax_stack_size\x02\x03\x0Cuse_duration\x80\xE4\xAF\x01\x01\x0Eliquid_clipped\0\x03\x06damage\x02\x01\rhand_equipped\x01\x01\x0Fstacked_by_data\0\x01\x04foil\0\x01\x17can_destroy_in_creative\x01\x03\x11creative_category\x06\0\n\x10minecraft:damage\x02\x05value\x01\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x12minecraft:cooldown\x08\x04type\x06attack\x08\x08category\x05spear\x05\x08duration33s?\0\n\x18minecraft:swing_duration\x05\x05value33s?\0\n\x17minecraft:use_modifiers\x05\x11movement_modifier\0\0\x80?\x08\x0Bstart_using\x06always\x05\x0Cuse_duration\0\xA0\x8CG\x08\x0Bstart_sound\x15item.golden_spear.use\x01\x0Femit_vibrations\0\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x16minecraft:swing_sounds\x08\nattack_hit\x1Citem.golden_spear.attack_hit\x08\x0Battack_miss\x1Ditem.golden_spear.attack_miss\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x15minecraft:golden_tier\x12minecraft:is_spear\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\n\rrepair_amount\x08\nexpression)context.other->query.remaining_durability\x02\x07version\r\0\0\t\x05items\n\x02\x08\x04name\x16minecraft:golden_spear\0\0\t\x05items\n\x02\x08\x04name\x14minecraft:gold_ingot\0\n\rrepair_amount\x02\x07version\r\0\x08\nexpression\x1Bquery.max_durability * 0.25\0\0\0\0" } ;
pub const GOLDEN_SWORD: Self = Self {
id: 354,
registry_key: "minecraft:golden_sword",
@ -43084,7 +43084,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const GRAY_BUNDLE : Self = Self { id : 269 , registry_key : "minecraft:gray_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\t\titem_tags\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x16minecraft:storage_item\x01\x1Aallow_nested_storage_items\x01\t\rallowed_items\0\0\x03\tmax_slots\x80\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x0Fitem_properties\x03\x0Bframe_count\x02\x03\x0Emax_stack_size\x02\x03\x11creative_category\x06\x01\x12hidden_in_commands\x02\x08\x0Ecreative_group\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\x01\x04foil\0\x03\ruse_animation\0\x01\x0Eliquid_clipped\0\x03\x11enchantable_value\0\x01\x0Eshould_despawn\x01\x08\x10enchantable_slot\x04none\x01\x17can_destroy_in_creative\x01\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x16bundle_gray_open_front\x08\x07default\x0Bbundle_gray\x08\x10bundle_open_back\x15bundle_gray_open_back\0\0\x01\x0Eallow_off_hand\0\x03\x0Cuse_duration\0\x03\x06damage\0\x01\rhand_equipped\0\0\0" } ;
pub const GRAY_BUNDLE : Self = Self { id : 269 , registry_key : "minecraft:gray_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\t\titem_tags\0\0\n\x0Fitem_properties\x03\x11enchantable_value\0\x01\x12hidden_in_commands\x02\x03\x0Emax_stack_size\x02\x03\x06damage\0\x01\x04foil\0\x01\rhand_equipped\0\x01\x0Eshould_despawn\x01\x03\x0Bframe_count\x02\x03\x0Cuse_duration\0\x01\x0Fstacked_by_data\0\x03\x11creative_category\x06\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x15bundle_gray_open_back\x08\x07default\x0Bbundle_gray\x08\x11bundle_open_front\x16bundle_gray_open_front\0\0\x03\ruse_animation\0\x08\x10enchantable_slot\x04none\x01\x17can_destroy_in_creative\x01\x01\x0Eliquid_clipped\0\x01\x0Eallow_off_hand\0\x08\x0Ecreative_group\0\x05\x0Cmining_speed\0\0\x80?\0\n\x16minecraft:storage_item\x01\x1Aallow_nested_storage_items\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\t\rallowed_items\0\0\x03\tmax_slots\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\0" } ;
pub const GRAY_CANDLE: Self = Self {
id: -420,
registry_key: "minecraft:gray_candle",
@ -43176,7 +43176,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const GREEN_BUNDLE : Self = Self { id : 270 , registry_key : "minecraft:green_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x16minecraft:storage_item\x01\x1Aallow_nested_storage_items\x01\t\rallowed_items\0\0\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\0\n\x0Fitem_properties\x01\rhand_equipped\0\x03\x11creative_category\x06\x03\x06damage\0\x03\x11enchantable_value\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x17bundle_green_open_front\x08\x07default\x0Cbundle_green\x08\x10bundle_open_back\x16bundle_green_open_back\0\0\x01\x04foil\0\x03\x0Cuse_duration\0\x03\x0Emax_stack_size\x02\x01\x17can_destroy_in_creative\x01\x01\x0Eshould_despawn\x01\x01\x0Eallow_off_hand\0\x03\ruse_animation\0\x03\x0Bframe_count\x02\x01\x12hidden_in_commands\x02\x08\x0Ecreative_group\0\x01\x0Eliquid_clipped\0\x08\x10enchantable_slot\x04none\0\t\titem_tags\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\0" } ;
pub const GREEN_BUNDLE : Self = Self { id : 270 , registry_key : "minecraft:green_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Fitem_properties\x03\x0Bframe_count\x02\x03\x11enchantable_value\0\x01\rhand_equipped\0\x08\x0Ecreative_group\0\x01\x12hidden_in_commands\x02\x03\x11creative_category\x06\x08\x10enchantable_slot\x04none\x01\x04foil\0\x01\x0Eshould_despawn\x01\x03\x0Emax_stack_size\x02\x01\x0Fstacked_by_data\0\x03\ruse_animation\0\x01\x0Eallow_off_hand\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Cbundle_green\x08\x10bundle_open_back\x16bundle_green_open_back\x08\x11bundle_open_front\x17bundle_green_open_front\0\0\x03\x06damage\0\x01\x0Eliquid_clipped\0\x03\x0Cuse_duration\0\x01\x17can_destroy_in_creative\x01\x05\x0Cmining_speed\0\0\x80?\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x16minecraft:storage_item\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\t\rallowed_items\0\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\t\titem_tags\0\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\0" } ;
pub const GREEN_CANDLE: Self = Self {
id: -426,
registry_key: "minecraft:green_candle",
@ -43632,7 +43632,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const HONEY_BOTTLE : Self = Self { id : 633 , registry_key : "minecraft:honey_bottle" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\x11using_converts_to\x0Cglass_bottle\x08\rcooldown_type\0\t\x0Eremove_effects\x03\x02&\x01\x0Ecan_always_eat\x01\x03\tnutrition\x0C\x05\x13saturation_modifier\xCD\xCC\xCC=\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\rcooldown_time\0\x03\ron_use_action\x01\0\x03\x18minecraft:max_stack_size \x03\x16minecraft:use_durationP\0" } ;
pub const HONEY_BOTTLE : Self = Self { id : 633 , registry_key : "minecraft:honey_bottle" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x18minecraft:max_stack_size \x03\x16minecraft:use_durationP\n\x0Eminecraft:food\x03\ron_use_action\x01\x05\x13saturation_modifier\xCD\xCC\xCC=\x08\x11using_converts_to\x0Cglass_bottle\x01\x0Ecan_always_eat\x01\x08\rcooldown_type\0\t\x0Eremove_effects\x03\x02&\x03\rcooldown_time\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\tnutrition\x0C\0\0" } ;
pub const HONEYCOMB: Self = Self {
id: 632,
registry_key: "minecraft:honeycomb",
@ -43934,7 +43934,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const IRON_SPEAR : Self = Self { id : 260 , registry_key : "minecraft:iron_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Fitem_properties\x01\x0Eshould_despawn\x01\x03\ruse_animation\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\niron_spear\0\0\x01\x0Eallow_off_hand\0\x01\x0Eliquid_clipped\0\x03\x11creative_category\x06\x03\x0Cuse_duration\x80\xE4\xAF\x01\x01\x0Fstacked_by_data\0\x01\x12hidden_in_commands\x02\x08\x10enchantable_slot\x0Bmelee_spear\x03\x11enchantable_value\x1C\x03\x0Emax_stack_size\x02\x03\x06damage\x06\x01\x17can_destroy_in_creative\x01\x08\x0Ecreative_group\0\x01\x04foil\0\x03\x0Bframe_count\x02\x01\rhand_equipped\x01\x05\x0Cmining_speed\0\0\x80?\0\n\x14minecraft:durability\x03\x0Emax_durability\xF4\x03\n\rdamage_chance\x03\x03min\0\x03\x03max\xC8\x01\0\0\n\x16minecraft:swing_sounds\x08\nattack_hit\x1Aitem.iron_spear.attack_hit\x08\x0Battack_miss\x1Bitem.iron_spear.attack_miss\0\t\titem_tags\x08\x04\x13minecraft:iron_tier\x12minecraft:is_spear\n\x10minecraft:damage\x02\x05value\x03\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x17minecraft:use_modifiers\x05\x0Cuse_duration\0\xA0\x8CG\x08\x0Bstart_using\x06always\x05\x11movement_modifier\0\0\x80?\x01\x0Femit_vibrations\0\x08\x0Bstart_sound\x13item.iron_spear.use\0\n\x15minecraft:enchantable\x01\x05value\x0E\x08\x04slot\x0Bmelee_spear\0\n\x18minecraft:swing_duration\x05\x05value33s?\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x16minecraft:display_name\x08\x05value\x14item.iron_spear.name\0\n\x19minecraft:piercing_weapon\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\x05\rhitbox_margin\0\0\x80>\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\t\x05items\n\x02\x08\x04name\x14minecraft:iron_spear\0\n\rrepair_amount\x02\x07version\r\0\x08\nexpression)context.other->query.remaining_durability\0\0\t\x05items\n\x02\x08\x04name\x14minecraft:iron_ingot\0\n\rrepair_amount\x08\nexpression\x1Bquery.max_durability * 0.25\x02\x07version\r\0\0\0\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x13minecraft:iron_tier\x12minecraft:is_spear\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\n\x14knockback_conditions\x05\x12min_relative_speed\0\0\0\0\x02\x0Cmax_duration\x87\0\x05\tmin_speed33\xA3@\0\x05\x11damage_multiplier33s?\x05\rhitbox_margin\0\0\x80>\x02\x05delay\x0C\0\x05\x0Fdamage_modifier\0\0\0\0\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\n\x13dismount_conditions\x02\x0Cmax_duration2\0\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed\0\x000A\0\n\x11damage_conditions\x02\x0Cmax_duration\xE1\0\x05\x12min_relative_speed33\x93@\x05\tmin_speed\0\0\0\0\0\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\0\0\n\x12minecraft:cooldown\x08\x08category\x05spear\x05\x08duration33s?\x08\x04type\x06attack\0\0" } ;
pub const IRON_SPEAR : Self = Self { id : 260 , registry_key : "minecraft:iron_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x15minecraft:enchantable\x08\x04slot\x0Bmelee_spear\x01\x05value\x0E\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\n\rrepair_amount\x08\nexpression)context.other->query.remaining_durability\x02\x07version\r\0\0\t\x05items\n\x02\x08\x04name\x14minecraft:iron_spear\0\0\t\x05items\n\x02\x08\x04name\x14minecraft:iron_ingot\0\n\rrepair_amount\x02\x07version\r\0\x08\nexpression\x1Bquery.max_durability * 0.25\0\0\0\n\x12minecraft:cooldown\x08\x04type\x06attack\x08\x08category\x05spear\x05\x08duration33s?\0\n\x17minecraft:use_modifiers\x05\x0Cuse_duration\0\xA0\x8CG\x05\x11movement_modifier\0\0\x80?\x08\x0Bstart_sound\x13item.iron_spear.use\x08\x0Bstart_using\x06always\x01\x0Femit_vibrations\0\0\n\x10minecraft:damage\x02\x05value\x03\0\0\n\x18minecraft:swing_duration\x05\x05value33s?\0\n\x14minecraft:durability\n\rdamage_chance\x03\x03min\0\x03\x03max\xC8\x01\0\x03\x0Emax_durability\xF4\x03\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x13minecraft:iron_tier\x12minecraft:is_spear\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x16minecraft:swing_sounds\x08\nattack_hit\x1Aitem.iron_spear.attack_hit\x08\x0Battack_miss\x1Bitem.iron_spear.attack_miss\0\n\x0Fitem_properties\x01\x17can_destroy_in_creative\x01\x01\x0Eallow_off_hand\0\x08\x10enchantable_slot\x0Bmelee_spear\x03\x11creative_category\x06\x01\x0Eshould_despawn\x01\x03\x0Bframe_count\x02\x03\ruse_animation\0\x01\x0Eliquid_clipped\0\x03\x0Cuse_duration\x80\xE4\xAF\x01\x08\x0Ecreative_group\0\x03\x11enchantable_value\x1C\x03\x0Emax_stack_size\x02\x01\x12hidden_in_commands\x02\x01\x04foil\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\x03\x06damage\x06\x01\rhand_equipped\x01\n\x0Eminecraft:icon\n\x08textures\x08\x07default\niron_spear\0\0\0\t\titem_tags\x08\x04\x13minecraft:iron_tier\x12minecraft:is_spear\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x19minecraft:piercing_weapon\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\x05\rhitbox_margin\0\0\x80>\0\n\x16minecraft:display_name\x08\x05value\x14item.iron_spear.name\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\n\x13dismount_conditions\x05\tmin_speed\0\x000A\x02\x0Cmax_duration2\0\x05\x12min_relative_speed\0\0\0\0\0\x05\x0Fdamage_modifier\0\0\0\0\n\x11damage_conditions\x05\x12min_relative_speed33\x93@\x02\x0Cmax_duration\xE1\0\x05\tmin_speed\0\0\0\0\0\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\x05\rhitbox_margin\0\0\x80>\n\x14knockback_conditions\x02\x0Cmax_duration\x87\0\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed33\xA3@\0\x05\x11damage_multiplier33s?\x02\x05delay\x0C\0\0\0\0" } ;
pub const IRON_SWORD: Self = Self {
id: 338,
registry_key: "minecraft:iron_sword",
@ -44509,7 +44509,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const LIGHT_BLUE_BUNDLE : Self = Self { id : 271 , registry_key : "minecraft:light_blue_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Fitem_properties\x01\x12hidden_in_commands\x02\x01\x0Eliquid_clipped\0\x03\x11enchantable_value\0\x05\x0Cmining_speed\0\0\x80?\x03\x11creative_category\x06\x01\x04foil\0\x01\x0Eshould_despawn\x01\x03\x06damage\0\x03\x0Bframe_count\x02\x01\rhand_equipped\0\x01\x0Eallow_off_hand\0\x08\x0Ecreative_group\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x11bundle_light_blue\x08\x10bundle_open_back\x1Bbundle_light_blue_open_back\x08\x11bundle_open_front\x1Cbundle_light_blue_open_front\0\0\x01\x0Fstacked_by_data\0\x01\x17can_destroy_in_creative\x01\x08\x10enchantable_slot\x04none\x03\x0Emax_stack_size\x02\x03\ruse_animation\0\x03\x0Cuse_duration\0\0\t\titem_tags\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\0" } ;
pub const LIGHT_BLUE_BUNDLE : Self = Self { id : 271 , registry_key : "minecraft:light_blue_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\t\titem_tags\0\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x0Fitem_properties\x01\x04foil\0\x01\x17can_destroy_in_creative\x01\x03\ruse_animation\0\x03\x11creative_category\x06\x01\x0Fstacked_by_data\0\x03\x0Cuse_duration\0\x01\x12hidden_in_commands\x02\x01\rhand_equipped\0\x03\x06damage\0\x08\x10enchantable_slot\x04none\x03\x0Emax_stack_size\x02\x03\x0Bframe_count\x02\x01\x0Eliquid_clipped\0\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x1Cbundle_light_blue_open_front\x08\x07default\x11bundle_light_blue\x08\x10bundle_open_back\x1Bbundle_light_blue_open_back\0\0\x01\x0Eallow_off_hand\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Eshould_despawn\x01\x03\x11enchantable_value\0\x08\x0Ecreative_group\0\0\0" } ;
pub const LIGHT_BLUE_CANDLE: Self = Self {
id: -416,
registry_key: "minecraft:light_blue_candle",
@ -44601,7 +44601,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const LIGHT_GRAY_BUNDLE : Self = Self { id : 272 , registry_key : "minecraft:light_gray_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Fitem_properties\x01\x0Eallow_off_hand\0\x03\x06damage\0\x03\x0Emax_stack_size\x02\x03\x0Cuse_duration\0\x03\x11enchantable_value\0\x01\x12hidden_in_commands\x02\x03\ruse_animation\0\x01\x0Eshould_despawn\x01\x08\x10enchantable_slot\x04none\x01\rhand_equipped\0\x03\x0Bframe_count\x02\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x1Bbundle_light_gray_open_back\x08\x11bundle_open_front\x1Cbundle_light_gray_open_front\x08\x07default\x11bundle_light_gray\0\0\x01\x17can_destroy_in_creative\x01\x03\x11creative_category\x06\x08\x0Ecreative_group\0\x01\x04foil\0\x01\x0Eliquid_clipped\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\0\t\titem_tags\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x16minecraft:storage_item\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\0" } ;
pub const LIGHT_GRAY_BUNDLE : Self = Self { id : 272 , registry_key : "minecraft:light_gray_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Fitem_properties\x01\x0Eliquid_clipped\0\x03\x0Emax_stack_size\x02\x03\x06damage\0\x03\x0Cuse_duration\0\x01\x0Fstacked_by_data\0\x05\x0Cmining_speed\0\0\x80?\x01\x17can_destroy_in_creative\x01\x01\x0Eshould_despawn\x01\x08\x10enchantable_slot\x04none\x01\rhand_equipped\0\x03\x0Bframe_count\x02\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x1Cbundle_light_gray_open_front\x08\x07default\x11bundle_light_gray\x08\x10bundle_open_back\x1Bbundle_light_gray_open_back\0\0\x01\x12hidden_in_commands\x02\x08\x0Ecreative_group\0\x01\x0Eallow_off_hand\0\x01\x04foil\0\x03\ruse_animation\0\x03\x11enchantable_value\0\x03\x11creative_category\x06\0\t\titem_tags\0\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x16minecraft:storage_item\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\0" } ;
pub const LIGHT_GRAY_CANDLE: Self = Self {
id: -421,
registry_key: "minecraft:light_gray_candle",
@ -44714,7 +44714,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const LIME_BUNDLE : Self = Self { id : 273 , registry_key : "minecraft:lime_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x0Fitem_properties\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x15bundle_lime_open_back\x08\x11bundle_open_front\x16bundle_lime_open_front\x08\x07default\x0Bbundle_lime\0\0\x03\x11creative_category\x06\x01\x0Eallow_off_hand\0\x08\x10enchantable_slot\x04none\x03\x11enchantable_value\0\x01\x17can_destroy_in_creative\x01\x03\x0Bframe_count\x02\x01\x12hidden_in_commands\x02\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\x01\x0Eliquid_clipped\0\x03\x0Cuse_duration\0\x08\x0Ecreative_group\0\x03\x06damage\0\x03\ruse_animation\0\x01\x0Eshould_despawn\x01\x01\x04foil\0\x01\rhand_equipped\0\x03\x0Emax_stack_size\x02\0\n\x16minecraft:storage_item\x01\x1Aallow_nested_storage_items\x01\t\rallowed_items\0\0\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\t\titem_tags\0\0\0" } ;
pub const LIME_BUNDLE : Self = Self { id : 273 , registry_key : "minecraft:lime_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x16minecraft:storage_item\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\t\rallowed_items\0\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\t\titem_tags\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x0Fitem_properties\x03\x0Emax_stack_size\x02\x01\x12hidden_in_commands\x02\x03\x11creative_category\x06\x03\x06damage\0\x01\x17can_destroy_in_creative\x01\x03\x11enchantable_value\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Eshould_despawn\x01\x03\x0Cuse_duration\0\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x15bundle_lime_open_back\x08\x11bundle_open_front\x16bundle_lime_open_front\x08\x07default\x0Bbundle_lime\0\0\x03\x0Bframe_count\x02\x01\x0Eliquid_clipped\0\x08\x10enchantable_slot\x04none\x01\x0Fstacked_by_data\0\x08\x0Ecreative_group\0\x01\x0Eallow_off_hand\0\x01\x04foil\0\x01\rhand_equipped\0\x03\ruse_animation\0\0\0" } ;
pub const LIME_CANDLE: Self = Self {
id: -418,
registry_key: "minecraft:lime_candle",
@ -44911,7 +44911,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const MAGENTA_BUNDLE : Self = Self { id : 274 , registry_key : "minecraft:magenta_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\t\titem_tags\0\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\x03\tmax_slots\x80\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x01\x1Aallow_nested_storage_items\x01\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x0Fitem_properties\x08\x0Ecreative_group\0\x01\x0Eallow_off_hand\0\x01\rhand_equipped\0\x05\x0Cmining_speed\0\0\x80?\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Ebundle_magenta\x08\x11bundle_open_front\x19bundle_magenta_open_front\x08\x10bundle_open_back\x18bundle_magenta_open_back\0\0\x01\x12hidden_in_commands\x02\x03\x0Cuse_duration\0\x03\x06damage\0\x01\x0Eliquid_clipped\0\x03\x0Emax_stack_size\x02\x08\x10enchantable_slot\x04none\x03\ruse_animation\0\x01\x0Fstacked_by_data\0\x01\x04foil\0\x01\x17can_destroy_in_creative\x01\x03\x0Bframe_count\x02\x01\x0Eshould_despawn\x01\x03\x11enchantable_value\0\x03\x11creative_category\x06\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\0" } ;
pub const MAGENTA_BUNDLE : Self = Self { id : 274 , registry_key : "minecraft:magenta_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x16minecraft:storage_item\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x0Fitem_properties\x05\x0Cmining_speed\0\0\x80?\x01\x12hidden_in_commands\x02\x08\x0Ecreative_group\0\x03\x0Bframe_count\x02\x03\x11enchantable_value\0\x01\x0Eallow_off_hand\0\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x18bundle_magenta_open_back\x08\x11bundle_open_front\x19bundle_magenta_open_front\x08\x07default\x0Ebundle_magenta\0\0\x01\x0Fstacked_by_data\0\x01\rhand_equipped\0\x03\x0Cuse_duration\0\x03\x11creative_category\x06\x01\x0Eliquid_clipped\0\x03\x06damage\0\x03\ruse_animation\0\x03\x0Emax_stack_size\x02\x01\x17can_destroy_in_creative\x01\x01\x04foil\0\x08\x10enchantable_slot\x04none\x01\x0Eshould_despawn\x01\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\t\titem_tags\0\0\0" } ;
pub const MAGENTA_CANDLE: Self = Self {
id: -415,
registry_key: "minecraft:magenta_candle",
@ -45206,8 +45206,8 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const MELON_SEEDS : Self = Self { id : 322 , registry_key : "minecraft:melon_seeds" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\x08\rplant_at_face\x02up\x01\x1Aplant_at_any_solid_surface\0\x08\x0Bcrop_result\x14minecraft:melon_stem\t\x08plant_at\x08\x02\x12minecraft:farmland\0\0" } ;
pub const MELON_SLICE : Self = Self { id : 301 , registry_key : "minecraft:melon_slice" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\rcooldown_time\0\x08\rcooldown_type\0\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\tnutrition\x04\x08\x11using_converts_to\0\x03\ron_use_action\x01\x05\x13saturation_modifier\x9A\x99\x99>\0\0" } ;
pub const MELON_SEEDS : Self = Self { id : 322 , registry_key : "minecraft:melon_seeds" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\x08\x0Bcrop_result\x14minecraft:melon_stem\t\x08plant_at\x08\x02\x12minecraft:farmland\x08\rplant_at_face\x02up\x01\x1Aplant_at_any_solid_surface\0\0\0" } ;
pub const MELON_SLICE : Self = Self { id : 301 , registry_key : "minecraft:melon_slice" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x08\rcooldown_type\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\rcooldown_time\0\x03\ron_use_action\x01\x08\x11using_converts_to\0\x03\tnutrition\x04\x05\x13saturation_modifier\x9A\x99\x99>\x01\x0Ecan_always_eat\0\0\0" } ;
pub const MELON_STEM: Self = Self {
id: 105,
registry_key: "minecraft:melon_stem",
@ -45425,7 +45425,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const MUSHROOM_STEW : Self = Self { id : 289 , registry_key : "minecraft:mushroom_stew" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x08\rcooldown_type\0\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\tnutrition\x0C\x03\rcooldown_time\0\x08\x11using_converts_to\x04bowl\x05\x13saturation_modifier\x9A\x99\x19?\x01\x0Ecan_always_eat\0\0\x03\x18minecraft:max_stack_size\x02\0" } ;
pub const MUSHROOM_STEW : Self = Self { id : 289 , registry_key : "minecraft:mushroom_stew" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x05\x13saturation_modifier\x9A\x99\x19?\x08\rcooldown_type\0\x03\ron_use_action\x01\x03\tnutrition\x0C\x08\x11using_converts_to\x04bowl\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\x03\x18minecraft:max_stack_size\x02\0" } ;
pub const MUSIC_DISC_11: Self = Self {
id: 583,
registry_key: "minecraft:music_disc_11",
@ -45580,7 +45580,7 @@ impl BedrockItem {
component_based: true,
definition_components: b"\n\0\0",
};
pub const MUTTON : Self = Self { id : 589 , registry_key : "minecraft:mutton" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\x03\rcooldown_time\0\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\x9A\x99\x99>\x08\x11using_converts_to\0\x03\tnutrition\x04\0\x03\x16minecraft:use_duration@\0" } ;
pub const MUTTON : Self = Self { id : 589 , registry_key : "minecraft:mutton" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x05\x13saturation_modifier\x9A\x99\x99>\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\rcooldown_type\0\x03\rcooldown_time\0\x03\ron_use_action\x01\x03\tnutrition\x04\x08\x11using_converts_to\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const MYCELIUM: Self = Self {
id: 110,
registry_key: "minecraft:mycelium",
@ -45672,7 +45672,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const NETHER_WART : Self = Self { id : 323 , registry_key : "minecraft:nether_wart" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\x01\x1Aplant_at_any_solid_surface\0\x08\x0Bcrop_result\x15minecraft:nether_wart\t\x08plant_at\x08\x02\tsoul_sand\x08\rplant_at_face\x02up\0\0" } ;
pub const NETHER_WART : Self = Self { id : 323 , registry_key : "minecraft:nether_wart" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\t\x08plant_at\x08\x02\tsoul_sand\x08\x0Bcrop_result\x15minecraft:nether_wart\x08\rplant_at_face\x02up\x01\x1Aplant_at_any_solid_surface\0\0\0" } ;
pub const NETHER_WART_BLOCK: Self = Self {
id: 214,
registry_key: "minecraft:nether_wart_block",
@ -45778,7 +45778,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const NETHERITE_SPEAR : Self = Self { id : 261 , registry_key : "minecraft:netherite_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x15minecraft:enchantable\x08\x04slot\x0Bmelee_spear\x01\x05value\x0F\0\n\x16minecraft:display_name\x08\x05value\x19item.netherite_spear.name\0\n\x18minecraft:fire_resistant\x01\x05value\x01\0\n\x19minecraft:piercing_weapon\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\x05\rhitbox_margin\0\0\x80>\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\0\t\titem_tags\x08\x04\x18minecraft:netherite_tier\x12minecraft:is_spear\n\x18minecraft:swing_duration\x05\x05value33\x93?\0\n\x17minecraft:use_modifiers\x08\x0Bstart_sound\x18item.netherite_spear.use\x05\x0Cuse_duration\0\xA0\x8CG\x01\x0Femit_vibrations\0\x05\x11movement_modifier\0\0\x80?\x08\x0Bstart_using\x06always\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\t\x05items\n\x02\x08\x04name\x19minecraft:netherite_spear\0\n\rrepair_amount\x08\nexpression)context.other->query.remaining_durability\x02\x07version\r\0\0\0\t\x05items\n\x02\x08\x04name\x19minecraft:netherite_ingot\0\n\rrepair_amount\x08\nexpression\x1Bquery.max_durability * 0.25\x02\x07version\r\0\0\0\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x0Fitem_properties\x08\x0Ecreative_group\0\x03\x0Cuse_duration\x80\xE4\xAF\x01\x03\x0Bframe_count\x02\x01\x0Fstacked_by_data\0\x03\x11enchantable_value\x1E\x01\x12hidden_in_commands\x02\x03\x06damage\n\x01\x0Eallow_off_hand\0\x01\x04foil\0\x03\x11creative_category\x06\x01\x0Eliquid_clipped\0\x05\x0Cmining_speed\0\0\x80?\x03\ruse_animation\0\x01\rhand_equipped\x01\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Fnetherite_spear\0\0\x03\x0Emax_stack_size\x02\x01\x0Eshould_despawn\x01\x08\x10enchantable_slot\x0Bmelee_spear\x01\x17can_destroy_in_creative\x01\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\x05\rhitbox_margin\0\0\x80>\x02\x05delay\x08\0\n\x11damage_conditions\x05\tmin_speed\0\0\0\0\x05\x12min_relative_speed33\x93@\x02\x0Cmax_duration\xAF\0\0\x05\x0Fdamage_modifier\0\0\0\0\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\x05\x11damage_multiplier\x9A\x99\x99?\n\x13dismount_conditions\x05\tmin_speed\0\0\x10A\x02\x0Cmax_duration2\0\x05\x12min_relative_speed\0\0\0\0\0\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\n\x14knockback_conditions\x05\tmin_speed33\xA3@\x02\x0Cmax_durationn\0\x05\x12min_relative_speed\0\0\0\0\0\0\0\n\x10minecraft:damage\x02\x05value\x05\0\0\n\x14minecraft:durability\x03\x0Emax_durability\xDC\x1F\n\rdamage_chance\x03\x03max\xC8\x01\x03\x03min\0\0\0\n\x12minecraft:cooldown\x08\x04type\x06attack\x05\x08duration33\x93?\x08\x08category\x05spear\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x18minecraft:netherite_tier\x12minecraft:is_spear\0\n\x16minecraft:swing_sounds\x08\x0Battack_miss item.netherite_spear.attack_miss\x08\nattack_hit\x1Fitem.netherite_spear.attack_hit\0\0" } ;
pub const NETHERITE_SPEAR : Self = Self { id : 261 , registry_key : "minecraft:netherite_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x17minecraft:use_modifiers\x05\x0Cuse_duration\0\xA0\x8CG\x05\x11movement_modifier\0\0\x80?\x08\x0Bstart_using\x06always\x01\x0Femit_vibrations\0\x08\x0Bstart_sound\x18item.netherite_spear.use\0\n\x0Fitem_properties\x03\x11creative_category\x06\x03\ruse_animation\0\x03\x0Emax_stack_size\x02\x03\x0Bframe_count\x02\x01\x0Fstacked_by_data\0\x03\x06damage\n\x01\x17can_destroy_in_creative\x01\x03\x11enchantable_value\x1E\x01\x0Eshould_despawn\x01\x01\x0Eallow_off_hand\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Fnetherite_spear\0\0\x08\x0Ecreative_group\0\x01\x12hidden_in_commands\x02\x03\x0Cuse_duration\x80\xE4\xAF\x01\x01\x04foil\0\x01\rhand_equipped\x01\x08\x10enchantable_slot\x0Bmelee_spear\x05\x0Cmining_speed\0\0\x80?\x01\x0Eliquid_clipped\0\0\n\x18minecraft:swing_duration\x05\x05value33\x93?\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\t\x05items\n\x02\x08\x04name\x19minecraft:netherite_spear\0\n\rrepair_amount\x02\x07version\r\0\x08\nexpression)context.other->query.remaining_durability\0\0\t\x05items\n\x02\x08\x04name\x19minecraft:netherite_ingot\0\n\rrepair_amount\x02\x07version\r\0\x08\nexpression\x1Bquery.max_durability * 0.25\0\0\0\n\x14minecraft:durability\x03\x0Emax_durability\xDC\x1F\n\rdamage_chance\x03\x03min\0\x03\x03max\xC8\x01\0\0\n\x19minecraft:piercing_weapon\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\x05\rhitbox_margin\0\0\x80>\0\n\x15minecraft:enchantable\x01\x05value\x0F\x08\x04slot\x0Bmelee_spear\0\n\x10minecraft:damage\x02\x05value\x05\0\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x18minecraft:fire_resistant\x01\x05value\x01\0\n\x16minecraft:swing_sounds\x08\nattack_hit\x1Fitem.netherite_spear.attack_hit\x08\x0Battack_miss item.netherite_spear.attack_miss\0\n\x16minecraft:display_name\x08\x05value\x19item.netherite_spear.name\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x18minecraft:netherite_tier\x12minecraft:is_spear\0\t\titem_tags\x08\x04\x18minecraft:netherite_tier\x12minecraft:is_spear\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\n\x14knockback_conditions\x02\x0Cmax_durationn\0\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed33\xA3@\0\n\x13dismount_conditions\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed\0\0\x10A\x02\x0Cmax_duration2\0\0\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\x02\x05delay\x08\0\n\x11damage_conditions\x05\x12min_relative_speed33\x93@\x05\tmin_speed\0\0\0\0\x02\x0Cmax_duration\xAF\0\0\x05\x11damage_multiplier\x9A\x99\x99?\x05\x0Fdamage_modifier\0\0\0\0\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\x05\rhitbox_margin\0\0\x80>\0\0\n\x12minecraft:cooldown\x05\x08duration33\x93?\x08\x08category\x05spear\x08\x04type\x06attack\0\0" } ;
pub const NETHERITE_SWORD: Self = Self {
id: 646,
registry_key: "minecraft:netherite_sword",
@ -45975,7 +45975,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const OMINOUS_TRIAL_KEY : Self = Self { id : 282 , registry_key : "minecraft:ominous_trial_key" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x16minecraft:display_name\x08\x05value\x1Bitem.ominous_trial_key.name\0\n\x0Fitem_properties\x01\x0Eshould_despawn\x01\x03\x06damage\0\x03\ruse_animation\0\x01\rhand_equipped\0\x03\x11enchantable_value\0\x01\x0Eallow_off_hand\0\x01\x0Eliquid_clipped\0\x03\x0Cuse_duration\0\x03\x11creative_category\x08\x01\x17can_destroy_in_creative\x01\x08\x10enchantable_slot\x04none\x03\x0Emax_stack_size\x80\x01\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\x01\x04foil\0\x03\x0Bframe_count\x02\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x11ominous_trial_key\0\0\x01\x12hidden_in_commands\x02\x08\x0Ecreative_group\0\0\t\titem_tags\0\0\0" } ;
pub const OMINOUS_TRIAL_KEY : Self = Self { id : 282 , registry_key : "minecraft:ominous_trial_key" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Fitem_properties\x03\x11creative_category\x08\x01\x0Fstacked_by_data\0\x03\ruse_animation\0\x03\x0Emax_stack_size\x80\x01\x01\x04foil\0\x01\x0Eliquid_clipped\0\x01\x0Eshould_despawn\x01\x03\x06damage\0\x01\x12hidden_in_commands\x02\x08\x0Ecreative_group\0\x03\x0Bframe_count\x02\x03\x11enchantable_value\0\x01\rhand_equipped\0\x01\x0Eallow_off_hand\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x11ominous_trial_key\0\0\x03\x0Cuse_duration\0\x01\x17can_destroy_in_creative\x01\x08\x10enchantable_slot\x04none\x05\x0Cmining_speed\0\0\x80?\0\t\titem_tags\0\0\n\x16minecraft:display_name\x08\x05value\x1Bitem.ominous_trial_key.name\0\0" } ;
pub const OPEN_EYEBLOSSOM: Self = Self {
id: -1018,
registry_key: "minecraft:open_eyeblossom",
@ -45983,7 +45983,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const ORANGE_BUNDLE : Self = Self { id : 275 , registry_key : "minecraft:orange_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\t\titem_tags\0\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x0Fitem_properties\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\x03\x11creative_category\x06\x03\ruse_animation\0\x01\x12hidden_in_commands\x02\x01\rhand_equipped\0\x01\x0Eshould_despawn\x01\x03\x06damage\0\x03\x0Bframe_count\x02\x01\x0Eallow_off_hand\0\x03\x0Emax_stack_size\x02\x03\x11enchantable_value\0\x01\x17can_destroy_in_creative\x01\x08\x0Ecreative_group\0\x01\x0Eliquid_clipped\0\x03\x0Cuse_duration\0\x08\x10enchantable_slot\x04none\x01\x04foil\0\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x17bundle_orange_open_back\x08\x11bundle_open_front\x18bundle_orange_open_front\x08\x07default\rbundle_orange\0\0\0\0" } ;
pub const ORANGE_BUNDLE : Self = Self { id : 275 , registry_key : "minecraft:orange_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\t\titem_tags\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x0Fitem_properties\x01\x0Eallow_off_hand\0\x01\x12hidden_in_commands\x02\x03\x0Emax_stack_size\x02\x03\x11creative_category\x06\x08\x10enchantable_slot\x04none\x03\ruse_animation\0\x01\x17can_destroy_in_creative\x01\x01\x0Eliquid_clipped\0\x01\x04foil\0\x03\x0Bframe_count\x02\x08\x0Ecreative_group\0\x03\x11enchantable_value\0\x01\rhand_equipped\0\x03\x06damage\0\x01\x0Fstacked_by_data\0\x03\x0Cuse_duration\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\rbundle_orange\x08\x10bundle_open_back\x17bundle_orange_open_back\x08\x11bundle_open_front\x18bundle_orange_open_front\0\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Eshould_despawn\x01\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\0\0" } ;
pub const ORANGE_CANDLE: Self = Self {
id: -414,
registry_key: "minecraft:orange_candle",
@ -46502,7 +46502,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const PINK_BUNDLE : Self = Self { id : 276 , registry_key : "minecraft:pink_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\t\titem_tags\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x0Fitem_properties\x03\x0Emax_stack_size\x02\x03\x06damage\0\x01\x0Eshould_despawn\x01\x01\x04foil\0\x01\x0Eallow_off_hand\0\x03\x0Bframe_count\x02\x08\x0Ecreative_group\0\x03\x11enchantable_value\0\x01\x17can_destroy_in_creative\x01\x08\x10enchantable_slot\x04none\x01\rhand_equipped\0\x01\x12hidden_in_commands\x02\x01\x0Eliquid_clipped\0\x03\ruse_animation\0\x01\x0Fstacked_by_data\0\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x15bundle_pink_open_back\x08\x07default\x0Bbundle_pink\x08\x11bundle_open_front\x16bundle_pink_open_front\0\0\x05\x0Cmining_speed\0\0\x80?\x03\x11creative_category\x06\x03\x0Cuse_duration\0\0\n\x16minecraft:storage_item\x03\tmax_slots\x80\x01\x01\x1Aallow_nested_storage_items\x01\t\rallowed_items\0\0\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\0" } ;
pub const PINK_BUNDLE : Self = Self { id : 276 , registry_key : "minecraft:pink_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x0Fitem_properties\x08\x10enchantable_slot\x04none\x01\x04foil\0\x05\x0Cmining_speed\0\0\x80?\x03\ruse_animation\0\x01\x0Fstacked_by_data\0\x01\x17can_destroy_in_creative\x01\x03\x0Bframe_count\x02\x03\x11enchantable_value\0\x03\x0Emax_stack_size\x02\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x16bundle_pink_open_front\x08\x07default\x0Bbundle_pink\x08\x10bundle_open_back\x15bundle_pink_open_back\0\0\x01\x0Eshould_despawn\x01\x01\x0Eallow_off_hand\0\x01\rhand_equipped\0\x01\x12hidden_in_commands\x02\x03\x0Cuse_duration\0\x03\x11creative_category\x06\x01\x0Eliquid_clipped\0\x08\x0Ecreative_group\0\x03\x06damage\0\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\x01\x1Aallow_nested_storage_items\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\t\titem_tags\0\0\0" } ;
pub const PINK_CANDLE: Self = Self {
id: -419,
registry_key: "minecraft:pink_candle",
@ -46636,7 +46636,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const PITCHER_POD : Self = Self { id : 326 , registry_key : "minecraft:pitcher_pod" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\t\x08plant_at\x08\x02\x12minecraft:farmland\x08\x0Bcrop_result\x16minecraft:pitcher_crop\x01\x1Aplant_at_any_solid_surface\0\x08\rplant_at_face\x02up\0\0" } ;
pub const PITCHER_POD : Self = Self { id : 326 , registry_key : "minecraft:pitcher_pod" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\t\x08plant_at\x08\x02\x12minecraft:farmland\x08\rplant_at_face\x02up\x08\x0Bcrop_result\x16minecraft:pitcher_crop\x01\x1Aplant_at_any_solid_surface\0\0\0" } ;
pub const PLANKS: Self = Self {
id: 817,
registry_key: "minecraft:planks",
@ -46672,7 +46672,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const POISONOUS_POTATO : Self = Self { id : 311 , registry_key : "minecraft:poisonous_potato" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x05\x13saturation_modifier\x9A\x99\x99>\t\x07effects\n\x02\x05\x06chance\x9A\x99\x19?\x03\x08duration\n\x08\x04name\x06poison\x03\x02id&\x03\tamplifier\0\x08\rdescriptionId\rpotion.poison\0\x08\x11using_converts_to\0\x03\rcooldown_time\0\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\tnutrition\x04\x08\rcooldown_type\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const POISONOUS_POTATO : Self = Self { id : 311 , registry_key : "minecraft:poisonous_potato" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\t\x07effects\n\x02\x05\x06chance\x9A\x99\x19?\x03\x08duration\n\x03\x02id&\x08\x04name\x06poison\x03\tamplifier\0\x08\rdescriptionId\rpotion.poison\0\x01\x0Ecan_always_eat\0\x08\x11using_converts_to\0\x08\rcooldown_type\0\x05\x13saturation_modifier\x9A\x99\x99>\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\rcooldown_time\0\x03\ron_use_action\x01\x03\tnutrition\x04\0\0" } ;
pub const POLAR_BEAR_SPAWN_EGG: Self = Self {
id: 506,
registry_key: "minecraft:polar_bear_spawn_egg",
@ -47009,7 +47009,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const PORKCHOP : Self = Self { id : 291 , registry_key : "minecraft:porkchop" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x08\rcooldown_type\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\tnutrition\x06\x05\x13saturation_modifier\x9A\x99\x99>\x03\ron_use_action\x01\x01\x0Ecan_always_eat\0\x08\x11using_converts_to\0\x03\rcooldown_time\0\0\0" } ;
pub const PORKCHOP : Self = Self { id : 291 , registry_key : "minecraft:porkchop" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\ron_use_action\x01\x03\rcooldown_time\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\x9A\x99\x99>\x03\tnutrition\x06\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\x08\x11using_converts_to\0\0\0" } ;
pub const PORTAL: Self = Self {
id: 90,
registry_key: "minecraft:portal",
@ -47017,7 +47017,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const POTATO : Self = Self { id : 309 , registry_key : "minecraft:potato" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\tnutrition\x02\x03\rcooldown_time\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\x05\x13saturation_modifier\x9A\x99\x99>\x01\x0Ecan_always_eat\0\x03\ron_use_action\x01\x08\rcooldown_type\0\0\n\x0Eminecraft:seed\x01\x1Aplant_at_any_solid_surface\0\t\x08plant_at\x08\x02\x12minecraft:farmland\x08\x0Bcrop_result\x12minecraft:potatoes\x08\rplant_at_face\x02up\0\x03\x16minecraft:use_duration@\0" } ;
pub const POTATO : Self = Self { id : 309 , registry_key : "minecraft:potato" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\ron_use_action\x01\x05\x13saturation_modifier\x9A\x99\x99>\x03\tnutrition\x02\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x08\x11using_converts_to\0\x08\rcooldown_type\0\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:seed\x01\x1Aplant_at_any_solid_surface\0\x08\x0Bcrop_result\x12minecraft:potatoes\x08\rplant_at_face\x02up\t\x08plant_at\x08\x02\x12minecraft:farmland\0\0" } ;
pub const POTATOES: Self = Self {
id: 142,
registry_key: "minecraft:potatoes",
@ -47151,7 +47151,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const PUFFERFISH : Self = Self { id : 296 , registry_key : "minecraft:pufferfish" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\x11using_converts_to\0\x05\x13saturation_modifier\xCD\xCC\xCC=\t\x07effects\n\x06\x05\x06chance\0\0\x80?\x03\tamplifier\x02\x03\x08durationx\x03\x02id&\x08\rdescriptionId\rpotion.poison\x08\x04name\x06poison\0\x03\x08duration\x1E\x03\x02id\x12\x08\rdescriptionId\x10potion.confusion\x03\tamplifier\0\x05\x06chance\0\0\x80?\x08\x04name\x06nausea\0\x08\x04name\x06hunger\x03\tamplifier\x04\x03\x02id\"\x05\x06chance\0\0\x80?\x08\rdescriptionId\rpotion.hunger\x03\x08duration\x1E\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\x03\ron_use_action\x01\x03\rcooldown_time\0\x03\tnutrition\x02\0\x01\x19minecraft:stacked_by_data\x01\x03\x16minecraft:use_duration@\0" } ;
pub const PUFFERFISH : Self = Self { id : 296 , registry_key : "minecraft:pufferfish" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x08\rcooldown_type\0\x03\ron_use_action\x01\x05\x13saturation_modifier\xCD\xCC\xCC=\x03\tnutrition\x02\x08\x11using_converts_to\0\x03\rcooldown_time\0\x01\x0Ecan_always_eat\0\t\x07effects\n\x06\x08\rdescriptionId\rpotion.poison\x03\x08durationx\x03\x02id&\x08\x04name\x06poison\x03\tamplifier\x02\x05\x06chance\0\0\x80?\0\x03\x08duration\x1E\x03\tamplifier\0\x05\x06chance\0\0\x80?\x03\x02id\x12\x08\x04name\x06nausea\x08\rdescriptionId\x10potion.confusion\0\x08\x04name\x06hunger\x05\x06chance\0\0\x80?\x03\tamplifier\x04\x03\x02id\"\x03\x08duration\x1E\x08\rdescriptionId\rpotion.hunger\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\x01\x19minecraft:stacked_by_data\x01\0" } ;
pub const PUFFERFISH_BUCKET: Self = Self {
id: 399,
registry_key: "minecraft:pufferfish_bucket",
@ -47173,8 +47173,8 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const PUMPKIN_PIE : Self = Self { id : 313 , registry_key : "minecraft:pumpkin_pie" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\tnutrition\x10\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\x05\x13saturation_modifier\x9A\x99\x99>\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x08\rcooldown_type\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const PUMPKIN_SEEDS : Self = Self { id : 321 , registry_key : "minecraft:pumpkin_seeds" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\x08\rplant_at_face\x02up\x08\x0Bcrop_result\x16minecraft:pumpkin_stem\t\x08plant_at\x08\x02\x12minecraft:farmland\x01\x1Aplant_at_any_solid_surface\0\0\0" } ;
pub const PUMPKIN_PIE : Self = Self { id : 313 , registry_key : "minecraft:pumpkin_pie" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x03\ron_use_action\x01\x08\rcooldown_type\0\x03\rcooldown_time\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\x9A\x99\x99>\x08\x11using_converts_to\0\x03\tnutrition\x10\x01\x0Ecan_always_eat\0\0\0" } ;
pub const PUMPKIN_SEEDS : Self = Self { id : 321 , registry_key : "minecraft:pumpkin_seeds" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\x01\x1Aplant_at_any_solid_surface\0\x08\x0Bcrop_result\x16minecraft:pumpkin_stem\x08\rplant_at_face\x02up\t\x08plant_at\x08\x02\x12minecraft:farmland\0\0" } ;
pub const PUMPKIN_STEM: Self = Self {
id: 104,
registry_key: "minecraft:pumpkin_stem",
@ -47182,7 +47182,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const PURPLE_BUNDLE : Self = Self { id : 277 , registry_key : "minecraft:purple_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\t\titem_tags\0\0\n\x0Fitem_properties\x03\x06damage\0\x01\x17can_destroy_in_creative\x01\x01\x12hidden_in_commands\x02\x08\x10enchantable_slot\x04none\x01\x0Eliquid_clipped\0\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x17bundle_purple_open_back\x08\x11bundle_open_front\x18bundle_purple_open_front\x08\x07default\rbundle_purple\0\0\x03\x11creative_category\x06\x01\x0Eshould_despawn\x01\x03\x11enchantable_value\0\x03\x0Emax_stack_size\x02\x01\rhand_equipped\0\x03\ruse_animation\0\x01\x0Fstacked_by_data\0\x03\x0Cuse_duration\0\x08\x0Ecreative_group\0\x03\x0Bframe_count\x02\x01\x04foil\0\x01\x0Eallow_off_hand\0\x05\x0Cmining_speed\0\0\x80?\0\n\x16minecraft:storage_item\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\x01\x1Aallow_nested_storage_items\x01\t\rallowed_items\0\0\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\0" } ;
pub const PURPLE_BUNDLE : Self = Self { id : 277 , registry_key : "minecraft:purple_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x16minecraft:storage_item\x03\tmax_slots\x80\x01\x01\x1Aallow_nested_storage_items\x01\t\rallowed_items\0\0\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x0Fitem_properties\x03\x11creative_category\x06\x01\x04foil\0\x01\x12hidden_in_commands\x02\x03\x0Cuse_duration\0\x03\x11enchantable_value\0\x03\x0Emax_stack_size\x02\x08\x10enchantable_slot\x04none\x01\x0Eliquid_clipped\0\x01\rhand_equipped\0\x01\x0Eallow_off_hand\0\x03\x0Bframe_count\x02\x01\x0Fstacked_by_data\0\x08\x0Ecreative_group\0\x01\x17can_destroy_in_creative\x01\x05\x0Cmining_speed\0\0\x80?\x01\x0Eshould_despawn\x01\n\x0Eminecraft:icon\n\x08textures\x08\x07default\rbundle_purple\x08\x10bundle_open_back\x17bundle_purple_open_back\x08\x11bundle_open_front\x18bundle_purple_open_front\0\0\x03\x06damage\0\x03\ruse_animation\0\0\t\titem_tags\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\0" } ;
pub const PURPLE_CANDLE: Self = Self {
id: -423,
registry_key: "minecraft:purple_candle",
@ -47365,7 +47365,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const RABBIT : Self = Self { id : 317 , registry_key : "minecraft:rabbit" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x05\x13saturation_modifier\x9A\x99\x99>\x03\rcooldown_time\0\x08\x11using_converts_to\0\x03\tnutrition\x06\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\ron_use_action\x01\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\0\0" } ;
pub const RABBIT : Self = Self { id : 317 , registry_key : "minecraft:rabbit" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x05\x13saturation_modifier\x9A\x99\x99>\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\x08\rcooldown_type\0\x03\rcooldown_time\0\x03\tnutrition\x06\x03\ron_use_action\x01\0\x03\x16minecraft:use_duration@\0" } ;
pub const RABBIT_FOOT: Self = Self {
id: 567,
registry_key: "minecraft:rabbit_foot",
@ -47387,7 +47387,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const RABBIT_STEW : Self = Self { id : 319 , registry_key : "minecraft:rabbit_stew" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\x11using_converts_to\x04bowl\x03\rcooldown_time\0\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\x9A\x99\x19?\x08\rcooldown_type\0\x03\tnutrition\x14\x03\ron_use_action\x01\0\x03\x18minecraft:max_stack_size\x02\x03\x16minecraft:use_duration@\0" } ;
pub const RABBIT_STEW : Self = Self { id : 319 , registry_key : "minecraft:rabbit_stew" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x03\tnutrition\x14\x03\rcooldown_time\0\x08\x11using_converts_to\x04bowl\x05\x13saturation_modifier\x9A\x99\x19?\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\rcooldown_type\0\0\x03\x18minecraft:max_stack_size\x02\x03\x16minecraft:use_duration@\0" } ;
pub const RAIL: Self = Self {
id: 66,
registry_key: "minecraft:rail",
@ -47465,7 +47465,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const RED_BUNDLE : Self = Self { id : 278 , registry_key : "minecraft:red_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x16minecraft:storage_item\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\0\n\x0Fitem_properties\x01\x0Eallow_off_hand\0\x01\x12hidden_in_commands\x02\x01\x04foil\0\x01\x17can_destroy_in_creative\x01\x03\ruse_animation\0\x01\x0Fstacked_by_data\0\x03\x11creative_category\x06\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x14bundle_red_open_back\x08\x07default\nbundle_red\x08\x11bundle_open_front\x15bundle_red_open_front\0\0\x03\x11enchantable_value\0\x01\rhand_equipped\0\x01\x0Eliquid_clipped\0\x01\x0Eshould_despawn\x01\x03\x06damage\0\x03\x0Cuse_duration\0\x08\x0Ecreative_group\0\x03\x0Bframe_count\x02\x03\x0Emax_stack_size\x02\x08\x10enchantable_slot\x04none\x05\x0Cmining_speed\0\0\x80?\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\t\titem_tags\0\0\0" } ;
pub const RED_BUNDLE : Self = Self { id : 278 , registry_key : "minecraft:red_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\t\titem_tags\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x16minecraft:storage_item\x03\tmax_slots\x80\x01\x01\x1Aallow_nested_storage_items\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\t\rallowed_items\0\0\0\n\x0Fitem_properties\x01\x0Fstacked_by_data\0\x01\x0Eshould_despawn\x01\x01\x04foil\0\x01\x0Eallow_off_hand\0\x01\x12hidden_in_commands\x02\x03\x06damage\0\x05\x0Cmining_speed\0\0\x80?\x01\rhand_equipped\0\x03\x11enchantable_value\0\x08\x0Ecreative_group\0\x03\x0Cuse_duration\0\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x14bundle_red_open_back\x08\x07default\nbundle_red\x08\x11bundle_open_front\x15bundle_red_open_front\0\0\x03\x0Bframe_count\x02\x03\x0Emax_stack_size\x02\x08\x10enchantable_slot\x04none\x01\x0Eliquid_clipped\0\x01\x17can_destroy_in_creative\x01\x03\ruse_animation\0\x03\x11creative_category\x06\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\0" } ;
pub const RED_CANDLE: Self = Self {
id: -427,
registry_key: "minecraft:red_candle",
@ -47809,7 +47809,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const ROTTEN_FLESH : Self = Self { id : 306 , registry_key : "minecraft:rotten_flesh" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\x05\x13saturation_modifier\xCD\xCC\xCC=\x03\rcooldown_time\0\x03\ron_use_action\x01\x03\tnutrition\x08\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\x11using_converts_to\0\t\x07effects\n\x02\x08\x04name\x06hunger\x08\rdescriptionId\rpotion.hunger\x05\x06chance\xCD\xCCL?\x03\tamplifier\0\x03\x08duration<\x03\x02id\"\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const ROTTEN_FLESH : Self = Self { id : 306 , registry_key : "minecraft:rotten_flesh" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x08\rcooldown_type\0\x08\x11using_converts_to\0\x03\tnutrition\x08\t\x07effects\n\x02\x03\tamplifier\0\x05\x06chance\xCD\xCCL?\x08\rdescriptionId\rpotion.hunger\x03\x02id\"\x03\x08duration<\x08\x04name\x06hunger\0\x03\ron_use_action\x01\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\xCD\xCC\xCC=\x03\rcooldown_time\0\0\0" } ;
pub const SADDLE: Self = Self {
id: 403,
registry_key: "minecraft:saddle",
@ -47817,7 +47817,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const SALMON : Self = Self { id : 294 , registry_key : "minecraft:salmon" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\x11using_converts_to\0\x05\x13saturation_modifier\xCD\xCC\xCC=\x03\tnutrition\x04\x03\rcooldown_time\0\x01\x0Ecan_always_eat\0\x08\rcooldown_type\0\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\0\x03\x16minecraft:use_duration@\x01\x19minecraft:stacked_by_data\x01\0" } ;
pub const SALMON : Self = Self { id : 294 , registry_key : "minecraft:salmon" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x08\rcooldown_type\0\x03\ron_use_action\x01\x08\x11using_converts_to\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\xCD\xCC\xCC=\x03\tnutrition\x04\0\x03\x16minecraft:use_duration@\x01\x19minecraft:stacked_by_data\x01\0" } ;
pub const SALMON_BUCKET: Self = Self {
id: 397,
registry_key: "minecraft:salmon_bucket",
@ -48378,7 +48378,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const SPIDER_EYE : Self = Self { id : 307 , registry_key : "minecraft:spider_eye" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\rcooldown_time\0\x01\x0Ecan_always_eat\0\x08\x11using_converts_to\0\t\x07effects\n\x02\x03\tamplifier\0\x05\x06chance\0\0\x80?\x03\x02id&\x08\x04name\x06poison\x08\rdescriptionId\rpotion.poison\x03\x08duration\n\0\x03\tnutrition\x04\x05\x13saturation_modifier\xCD\xCCL?\x03\ron_use_action\x01\x08\rcooldown_type\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const SPIDER_EYE : Self = Self { id : 307 , registry_key : "minecraft:spider_eye" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x05\x13saturation_modifier\xCD\xCCL?\x08\x11using_converts_to\0\x03\tnutrition\x04\t\x07effects\n\x02\x03\tamplifier\0\x08\rdescriptionId\rpotion.poison\x03\x08duration\n\x03\x02id&\x08\x04name\x06poison\x05\x06chance\0\0\x80?\0\x03\ron_use_action\x01\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\rcooldown_type\0\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\0\x03\x16minecraft:use_duration@\0" } ;
pub const SPIDER_SPAWN_EGG: Self = Self {
id: 479,
registry_key: "minecraft:spider_spawn_egg",
@ -48743,7 +48743,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const STONE_SPEAR : Self = Self { id : 262 , registry_key : "minecraft:stone_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x12minecraft:cooldown\x05\x08duration\0\0@?\x08\x08category\x05spear\x08\x04type\x06attack\0\n\x17minecraft:use_modifiers\x08\x0Bstart_sound\x14item.stone_spear.use\x05\x11movement_modifier\0\0\x80?\x01\x0Femit_vibrations\0\x05\x0Cuse_duration\0\xA0\x8CG\x08\x0Bstart_using\x06always\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x14minecraft:stone_tier\x12minecraft:is_spear\0\n\x14minecraft:durability\n\rdamage_chance\x03\x03min\0\x03\x03max\xC8\x01\0\x03\x0Emax_durability\x84\x02\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\n\x11damage_conditions\x02\x0Cmax_duration\x13\x01\x05\x12min_relative_speed33\x93@\x05\tmin_speed\0\0\0\0\0\n\x13dismount_conditions\x05\tmin_speed\0\0PA\x05\x12min_relative_speed\0\0\0\0\x02\x0Cmax_durationZ\0\0\x05\x0Fdamage_modifier\0\0\0\0\x02\x05delay\x0E\0\n\x14knockback_conditions\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed33\xA3@\x02\x0Cmax_duration\xB4\0\0\x05\x11damage_multiplier\x85\xEBQ?\x05\rhitbox_margin\0\0\x80>\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\0\0\n\x19minecraft:piercing_weapon\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\x05\rhitbox_margin\0\0\x80>\0\n\x10minecraft:damage\x02\x05value\x02\0\0\n\x16minecraft:display_name\x08\x05value\x15item.stone_spear.name\0\n\x15minecraft:enchantable\x08\x04slot\x0Bmelee_spear\x01\x05value\x05\0\n\x18minecraft:swing_duration\x05\x05value\0\0@?\0\n\x16minecraft:swing_sounds\x08\x0Battack_miss\x1Citem.stone_spear.attack_miss\x08\nattack_hit\x1Bitem.stone_spear.attack_hit\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\t\x05items\n\x02\x08\x04name\x15minecraft:stone_spear\0\n\rrepair_amount\x08\nexpression)context.other->query.remaining_durability\x02\x07version\r\0\0\0\n\rrepair_amount\x08\nexpression\x1Bquery.max_durability * 0.25\x02\x07version\r\0\0\t\x05items\n\x02\x08\x04tags,q.all_tags('minecraft:stone_tool_materials')\0\0\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x0Fitem_properties\x01\x04foil\0\x01\x0Fstacked_by_data\0\x01\x0Eshould_despawn\x01\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Bstone_spear\0\0\x01\x0Eliquid_clipped\0\x03\x0Cuse_duration\x80\xE4\xAF\x01\x08\x10enchantable_slot\x0Bmelee_spear\x08\x0Ecreative_group\0\x03\x11enchantable_value\n\x01\x12hidden_in_commands\x02\x03\ruse_animation\0\x01\rhand_equipped\x01\x03\x06damage\x04\x03\x11creative_category\x06\x01\x17can_destroy_in_creative\x01\x03\x0Emax_stack_size\x02\x01\x0Eallow_off_hand\0\x05\x0Cmining_speed\0\0\x80?\x03\x0Bframe_count\x02\0\t\titem_tags\x08\x04\x14minecraft:stone_tier\x12minecraft:is_spear\0" } ;
pub const STONE_SPEAR : Self = Self { id : 262 , registry_key : "minecraft:stone_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x19minecraft:piercing_weapon\x05\rhitbox_margin\0\0\x80>\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\0\n\x17minecraft:use_modifiers\x08\x0Bstart_using\x06always\x08\x0Bstart_sound\x14item.stone_spear.use\x01\x0Femit_vibrations\0\x05\x0Cuse_duration\0\xA0\x8CG\x05\x11movement_modifier\0\0\x80?\0\n\x12minecraft:cooldown\x05\x08duration\0\0@?\x08\x04type\x06attack\x08\x08category\x05spear\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x14minecraft:stone_tier\x12minecraft:is_spear\0\n\x18minecraft:swing_duration\x05\x05value\0\0@?\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\x05\rhitbox_margin\0\0\x80>\n\x14knockback_conditions\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed33\xA3@\x02\x0Cmax_duration\xB4\0\0\n\x13dismount_conditions\x05\tmin_speed\0\0PA\x05\x12min_relative_speed\0\0\0\0\x02\x0Cmax_durationZ\0\0\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\n\x11damage_conditions\x02\x0Cmax_duration\x13\x01\x05\x12min_relative_speed33\x93@\x05\tmin_speed\0\0\0\0\0\x05\x0Fdamage_modifier\0\0\0\0\x02\x05delay\x0E\0\x05\x11damage_multiplier\x85\xEBQ?\0\0\n\x14minecraft:durability\n\rdamage_chance\x03\x03min\0\x03\x03max\xC8\x01\0\x03\x0Emax_durability\x84\x02\0\t\titem_tags\x08\x04\x14minecraft:stone_tier\x12minecraft:is_spear\n\x16minecraft:display_name\x08\x05value\x15item.stone_spear.name\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\n\rrepair_amount\x02\x07version\r\0\x08\nexpression)context.other->query.remaining_durability\0\t\x05items\n\x02\x08\x04name\x15minecraft:stone_spear\0\0\t\x05items\n\x02\x08\x04tags,q.all_tags('minecraft:stone_tool_materials')\0\n\rrepair_amount\x02\x07version\r\0\x08\nexpression\x1Bquery.max_durability * 0.25\0\0\0\n\x10minecraft:damage\x02\x05value\x02\0\0\n\x16minecraft:swing_sounds\x08\nattack_hit\x1Bitem.stone_spear.attack_hit\x08\x0Battack_miss\x1Citem.stone_spear.attack_miss\0\n\x0Fitem_properties\x08\x0Ecreative_group\0\x01\x17can_destroy_in_creative\x01\x01\x04foil\0\x01\x0Eliquid_clipped\0\x03\x11enchantable_value\n\x03\x0Emax_stack_size\x02\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\x03\x0Bframe_count\x02\x01\x12hidden_in_commands\x02\x01\x0Eallow_off_hand\0\x01\x0Eshould_despawn\x01\x08\x10enchantable_slot\x0Bmelee_spear\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Bstone_spear\0\0\x03\x11creative_category\x06\x03\ruse_animation\0\x01\rhand_equipped\x01\x03\x06damage\x04\x03\x0Cuse_duration\x80\xE4\xAF\x01\0\n\x15minecraft:enchantable\x01\x05value\x05\x08\x04slot\x0Bmelee_spear\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\0" } ;
pub const STONE_STAIRS: Self = Self {
id: 67,
registry_key: "minecraft:stone_stairs",
@ -49101,8 +49101,8 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const SUSPICIOUS_STEW : Self = Self { id : 631 , registry_key : "minecraft:suspicious_stew" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\rcooldown_type\0\x01\x0Ecan_always_eat\x01\x03\ron_use_action\x02\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\x9A\x99\x19?\x03\rcooldown_time\0\x03\tnutrition\x0C\x08\x11using_converts_to\x04bowl\0\x03\x18minecraft:max_stack_size\x02\x03\x16minecraft:use_duration@\0" } ;
pub const SWEET_BERRIES : Self = Self { id : 316 , registry_key : "minecraft:sweet_berries" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\x11using_converts_to\0\x08\rcooldown_type\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\rcooldown_time\0\x03\tnutrition\x04\x01\x0Ecan_always_eat\0\x05\x13saturation_modifier\x9A\x99\x99>\x03\ron_use_action\x01\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:seed\t\x08plant_at\x08\x14\x08farmland\x05grass\x04dirt\x0Bcoarse_dirt\x06podzol\nmoss_block\x08mycelium\x03mud\x14muddy_mangrove_roots\x0Fdirt_with_roots\x08\x0Bcrop_result\x1Aminecraft:sweet_berry_bush\x08\rplant_at_face\x02up\x01\x1Aplant_at_any_solid_surface\0\0\0" } ;
pub const SUSPICIOUS_STEW : Self = Self { id : 631 , registry_key : "minecraft:suspicious_stew" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x08\rcooldown_type\0\x01\x0Ecan_always_eat\x01\x08\x11using_converts_to\x04bowl\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\rcooldown_time\0\x03\ron_use_action\x02\x05\x13saturation_modifier\x9A\x99\x19?\x03\tnutrition\x0C\0\x03\x18minecraft:max_stack_size\x02\x03\x16minecraft:use_duration@\0" } ;
pub const SWEET_BERRIES : Self = Self { id : 316 , registry_key : "minecraft:sweet_berries" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\ron_use_action\x01\x03\tnutrition\x04\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x08\rcooldown_type\0\x05\x13saturation_modifier\x9A\x99\x99>\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\x08\x11using_converts_to\0\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:seed\x08\x0Bcrop_result\x1Aminecraft:sweet_berry_bush\t\x08plant_at\x08\x14\x08farmland\x05grass\x04dirt\x0Bcoarse_dirt\x06podzol\nmoss_block\x08mycelium\x03mud\x14muddy_mangrove_roots\x0Fdirt_with_roots\x08\rplant_at_face\x02up\x01\x1Aplant_at_any_solid_surface\0\0\0" } ;
pub const SWEET_BERRY_BUSH: Self = Self {
id: -207,
registry_key: "minecraft:sweet_berry_bush",
@ -49201,7 +49201,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const TORCHFLOWER_SEEDS : Self = Self { id : 325 , registry_key : "minecraft:torchflower_seeds" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\x08\x0Bcrop_result\x1Aminecraft:torchflower_crop\x01\x1Aplant_at_any_solid_surface\0\x08\rplant_at_face\x02up\t\x08plant_at\x08\x02\x12minecraft:farmland\0\0" } ;
pub const TORCHFLOWER_SEEDS : Self = Self { id : 325 , registry_key : "minecraft:torchflower_seeds" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\x01\x1Aplant_at_any_solid_surface\0\t\x08plant_at\x08\x02\x12minecraft:farmland\x08\x0Bcrop_result\x1Aminecraft:torchflower_crop\x08\rplant_at_face\x02up\0\0" } ;
pub const TOTEM_OF_UNDYING: Self = Self {
id: 607,
registry_key: "minecraft:totem_of_undying",
@ -49230,7 +49230,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const TRIAL_KEY : Self = Self { id : 283 , registry_key : "minecraft:trial_key" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x16minecraft:display_name\x08\x05value\x13item.trial_key.name\0\t\titem_tags\0\0\n\x0Fitem_properties\x01\x17can_destroy_in_creative\x01\x01\rhand_equipped\0\x03\x11creative_category\x08\x01\x0Eshould_despawn\x01\x03\x0Cuse_duration\0\x03\ruse_animation\0\x08\x0Ecreative_group\0\x03\x06damage\0\x03\x0Bframe_count\x02\x03\x0Emax_stack_size\x80\x01\x01\x0Fstacked_by_data\0\x01\x04foil\0\x01\x0Eliquid_clipped\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\ttrial_key\0\0\x01\x0Eallow_off_hand\0\x03\x11enchantable_value\0\x08\x10enchantable_slot\x04none\x05\x0Cmining_speed\0\0\x80?\x01\x12hidden_in_commands\x02\0\0" } ;
pub const TRIAL_KEY : Self = Self { id : 283 , registry_key : "minecraft:trial_key" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x16minecraft:display_name\x08\x05value\x13item.trial_key.name\0\t\titem_tags\0\0\n\x0Fitem_properties\x01\x17can_destroy_in_creative\x01\x03\x06damage\0\x03\x11creative_category\x08\x03\x11enchantable_value\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Eshould_despawn\x01\x01\x0Eallow_off_hand\0\x01\x0Fstacked_by_data\0\x08\x0Ecreative_group\0\x03\x0Emax_stack_size\x80\x01\x03\x0Cuse_duration\0\x01\x12hidden_in_commands\x02\x01\rhand_equipped\0\x08\x10enchantable_slot\x04none\x03\x0Bframe_count\x02\x03\ruse_animation\0\x01\x04foil\0\x01\x0Eliquid_clipped\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\ttrial_key\0\0\0\0" } ;
pub const TRIAL_SPAWNER: Self = Self {
id: -315,
registry_key: "minecraft:trial_spawner",
@ -49259,7 +49259,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const TROPICAL_FISH : Self = Self { id : 295 , registry_key : "minecraft:tropical_fish" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:food\x03\ron_use_action\x01\x08\rcooldown_type\0\x03\tnutrition\x02\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x05\x13saturation_modifier\xCD\xCC\xCC=\x08\x11using_converts_to\0\x01\x0Ecan_always_eat\0\x03\rcooldown_time\0\0\x03\x16minecraft:use_duration@\x01\x19minecraft:stacked_by_data\x01\0" } ;
pub const TROPICAL_FISH : Self = Self { id : 295 , registry_key : "minecraft:tropical_fish" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\x03\x16minecraft:use_duration@\n\x0Eminecraft:food\x08\rcooldown_type\0\x03\rcooldown_time\0\x08\x11using_converts_to\0\x05\x13saturation_modifier\xCD\xCC\xCC=\x03\ron_use_action\x01\x01\x0Ecan_always_eat\0\t\x0Con_use_range\x05\x06\0\0\0A\0\0\0A\0\0\0A\x03\tnutrition\x02\0\x01\x19minecraft:stacked_by_data\x01\0" } ;
pub const TROPICAL_FISH_BUCKET: Self = Self {
id: 398,
registry_key: "minecraft:tropical_fish_bucket",
@ -50310,8 +50310,8 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const WHEAT_SEEDS : Self = Self { id : 320 , registry_key : "minecraft:wheat_seeds" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\x08\rplant_at_face\x02up\t\x08plant_at\x08\x02\x12minecraft:farmland\x08\x0Bcrop_result\x0Fminecraft:wheat\x01\x1Aplant_at_any_solid_surface\0\0\0" } ;
pub const WHITE_BUNDLE : Self = Self { id : 279 , registry_key : "minecraft:white_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x0Fitem_properties\x03\x11enchantable_value\0\x01\x12hidden_in_commands\x02\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x17bundle_white_open_front\x08\x10bundle_open_back\x16bundle_white_open_back\x08\x07default\x0Cbundle_white\0\0\x01\rhand_equipped\0\x01\x0Eallow_off_hand\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Eliquid_clipped\0\x03\x0Bframe_count\x02\x03\x11creative_category\x06\x01\x0Eshould_despawn\x01\x03\ruse_animation\0\x01\x04foil\0\x03\x0Cuse_duration\0\x03\x06damage\0\x01\x0Fstacked_by_data\0\x03\x0Emax_stack_size\x02\x08\x10enchantable_slot\x04none\x08\x0Ecreative_group\0\x01\x17can_destroy_in_creative\x01\0\t\titem_tags\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x16minecraft:storage_item\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\x01\x1Aallow_nested_storage_items\x01\t\rallowed_items\0\0\0\0" } ;
pub const WHEAT_SEEDS : Self = Self { id : 320 , registry_key : "minecraft:wheat_seeds" , version : BedrockItemVersion :: Legacy , component_based : false , definition_components : b"\n\0\n\x0Eminecraft:seed\x01\x1Aplant_at_any_solid_surface\0\t\x08plant_at\x08\x02\x12minecraft:farmland\x08\rplant_at_face\x02up\x08\x0Bcrop_result\x0Fminecraft:wheat\0\0" } ;
pub const WHITE_BUNDLE : Self = Self { id : 279 , registry_key : "minecraft:white_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\n\x0Fitem_properties\x03\ruse_animation\0\x03\x11enchantable_value\0\x08\x10enchantable_slot\x04none\x03\x11creative_category\x06\x01\x0Eshould_despawn\x01\x01\x0Eallow_off_hand\0\x01\x0Eliquid_clipped\0\x03\x0Bframe_count\x02\x01\x04foil\0\x05\x0Cmining_speed\0\0\x80?\x01\x17can_destroy_in_creative\x01\x01\x12hidden_in_commands\x02\n\x0Eminecraft:icon\n\x08textures\x08\x10bundle_open_back\x16bundle_white_open_back\x08\x07default\x0Cbundle_white\x08\x11bundle_open_front\x17bundle_white_open_front\0\0\x01\x0Fstacked_by_data\0\x01\rhand_equipped\0\x08\x0Ecreative_group\0\x03\x0Emax_stack_size\x02\x03\x06damage\0\x03\x0Cuse_duration\0\0\n\x16minecraft:storage_item\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\0\t\titem_tags\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\0" } ;
pub const WHITE_CANDLE: Self = Self {
id: -413,
registry_key: "minecraft:white_candle",
@ -50424,7 +50424,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const WIND_CHARGE : Self = Self { id : 284 , registry_key : "minecraft:wind_charge" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x13minecraft:throwable\x01\x12do_swing_animation\x01\x05\x11max_draw_duration\0\0\0\0\x05\x10max_launch_power\0\0\xC0?\x05\x11min_draw_duration\0\0\0\0\x05\x12launch_power_scale\0\0\xC0?\x01\x1Cscale_power_by_draw_duration\0\0\n\x16minecraft:display_name\x08\x05value\x15item.wind_charge.name\0\t\titem_tags\0\0\n\x12minecraft:cooldown\x05\x08duration\0\0\0?\x08\x08category\x0Bwind_charge\x08\x04type\x03use\0\n\x0Fitem_properties\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Bwind_charge\0\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Eallow_off_hand\0\x08\x0Ecreative_group\0\x01\x12hidden_in_commands\x02\x03\x0Cuse_duration\0\x01\x0Eshould_despawn\x01\x03\x06damage\0\x08\x10enchantable_slot\x04none\x03\x11enchantable_value\0\x01\rhand_equipped\0\x01\x0Fstacked_by_data\0\x01\x17can_destroy_in_creative\x01\x03\x0Emax_stack_size\x80\x01\x01\x0Eliquid_clipped\0\x03\x0Bframe_count\x02\x03\ruse_animation\0\x01\x04foil\0\x03\x11creative_category\x06\0\n\x14minecraft:projectile\x05\x16minimum_critical_power\0\0\0\0\x08\x11projectile_entity\"minecraft:wind_charge_projectile<>\0\0" } ;
pub const WIND_CHARGE : Self = Self { id : 284 , registry_key : "minecraft:wind_charge" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\t\titem_tags\0\0\n\x0Fitem_properties\x05\x0Cmining_speed\0\0\x80?\x03\x06damage\0\x01\x0Eshould_despawn\x01\x01\x17can_destroy_in_creative\x01\x03\x11enchantable_value\0\x01\x0Eallow_off_hand\0\x08\x10enchantable_slot\x04none\x03\x0Bframe_count\x02\x01\rhand_equipped\0\x01\x12hidden_in_commands\x02\x01\x0Eliquid_clipped\0\x03\x0Emax_stack_size\x80\x01\x01\x0Fstacked_by_data\0\x08\x0Ecreative_group\0\x01\x04foil\0\x03\x11creative_category\x06\n\x0Eminecraft:icon\n\x08textures\x08\x07default\x0Bwind_charge\0\0\x03\ruse_animation\0\x03\x0Cuse_duration\0\0\n\x12minecraft:cooldown\x08\x08category\x0Bwind_charge\x08\x04type\x03use\x05\x08duration\0\0\0?\0\n\x16minecraft:display_name\x08\x05value\x15item.wind_charge.name\0\n\x14minecraft:projectile\x05\x16minimum_critical_power\0\0\0\0\x08\x11projectile_entity\"minecraft:wind_charge_projectile<>\0\n\x13minecraft:throwable\x05\x11max_draw_duration\0\0\0\0\x01\x12do_swing_animation\x01\x05\x12launch_power_scale\0\0\xC0?\x05\x10max_launch_power\0\0\xC0?\x01\x1Cscale_power_by_draw_duration\0\x05\x11min_draw_duration\0\0\0\0\0\0" } ;
pub const WITCH_SPAWN_EGG: Self = Self {
id: 485,
registry_key: "minecraft:witch_spawn_egg",
@ -50537,7 +50537,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const WOODEN_SPEAR : Self = Self { id : 263 , registry_key : "minecraft:wooden_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x16minecraft:display_name\x08\x05value\x16item.wooden_spear.name\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x14minecraft:durability\n\rdamage_chance\x03\x03min\0\x03\x03max\xC8\x01\0\x03\x0Emax_durabilityx\0\n\x0Eminecraft:fuel\x05\x08duration\0\0 A\0\n\x10minecraft:damage\x02\x05value\x01\0\0\n\x18minecraft:swing_duration\x05\x05valueff&?\0\n\x15minecraft:enchantable\x08\x04slot\x0Bmelee_spear\x01\x05value\x0F\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\n\x11damage_conditions\x02\x0Cmax_duration,\x01\x05\tmin_speed\0\0\0\0\x05\x12min_relative_speed33\x93@\0\n\x13dismount_conditions\x05\x12min_relative_speed\0\0\0\0\x05\tmin_speed\0\0`A\x02\x0Cmax_durationd\0\0\n\x14knockback_conditions\x02\x0Cmax_duration\xC8\0\x05\tmin_speed33\xA3@\x05\x12min_relative_speed\0\0\0\0\0\x05\rhitbox_margin\0\0\x80>\x05\x11damage_multiplier333?\x02\x05delay\x0F\0\x05\x0Fdamage_modifier\0\0\0\0\n\x0Ecreative_reach\x05\x03min\0\0\0@\x05\x03max\0\0\xF0@\0\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\0\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x15minecraft:wooden_tier\x12minecraft:is_spear\0\n\x17minecraft:use_modifiers\x08\x0Bstart_using\x06always\x05\x0Cuse_duration\0\xA0\x8CG\x08\x0Bstart_sound\x15item.wooden_spear.use\x05\x11movement_modifier\0\0\x80?\x01\x0Femit_vibrations\0\0\n\x19minecraft:piercing_weapon\x05\rhitbox_margin\0\0\x80>\n\x05reach\x05\x03max\0\0\x90@\x05\x03min\0\0\0@\0\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\0\n\x12minecraft:cooldown\x05\x08durationff&?\x08\x04type\x06attack\x08\x08category\x05spear\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x16minecraft:swing_sounds\x08\x0Battack_miss\x1Ditem.wooden_spear.attack_miss\x08\nattack_hit\x1Citem.wooden_spear.attack_hit\0\t\titem_tags\x08\x04\x15minecraft:wooden_tier\x12minecraft:is_spear\n\x0Fitem_properties\x01\x17can_destroy_in_creative\x01\x08\x10enchantable_slot\x0Bmelee_spear\x01\x0Eshould_despawn\x01\x03\x0Cuse_duration\x80\xE4\xAF\x01\n\x0Eminecraft:icon\n\x08textures\x08\x07default\nwood_spear\0\0\x03\x06damage\x02\x01\rhand_equipped\x01\x03\x0Bframe_count\x02\x08\x0Ecreative_group\0\x01\x0Eliquid_clipped\0\x03\x0Emax_stack_size\x02\x01\x04foil\0\x01\x12hidden_in_commands\x02\x01\x0Eallow_off_hand\0\x01\x0Fstacked_by_data\0\x03\ruse_animation\0\x03\x11creative_category\x06\x05\x0Cmining_speed\0\0\x80?\x03\x11enchantable_value\x1E\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\n\rrepair_amount\x08\nexpression)context.other->query.remaining_durability\x02\x07version\r\0\0\t\x05items\n\x02\x08\x04name\x16minecraft:wooden_spear\0\0\t\x05items\n\x02\x08\x04tags\x1Eq.all_tags('minecraft:planks')\0\n\rrepair_amount\x08\nexpression\x1Bquery.max_durability * 0.25\x02\x07version\r\0\0\0\0\0" } ;
pub const WOODEN_SPEAR : Self = Self { id : 263 , registry_key : "minecraft:wooden_spear" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x18minecraft:swing_duration\x05\x05valueff&?\0\n\x16minecraft:swing_sounds\x08\nattack_hit\x1Citem.wooden_spear.attack_hit\x08\x0Battack_miss\x1Ditem.wooden_spear.attack_miss\0\n\x17minecraft:hand_equipped\x01\x05value\x01\0\n\x18minecraft:kinetic_weapon\n\x18minecraft:kinetic_weapon\x05\rhitbox_margin\0\0\x80>\n\x13dismount_conditions\x05\tmin_speed\0\0`A\x02\x0Cmax_durationd\0\x05\x12min_relative_speed\0\0\0\0\0\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\n\x11damage_conditions\x02\x0Cmax_duration,\x01\x05\tmin_speed\0\0\0\0\x05\x12min_relative_speed33\x93@\0\n\x14knockback_conditions\x02\x0Cmax_duration\xC8\0\x05\tmin_speed33\xA3@\x05\x12min_relative_speed\0\0\0\0\0\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\x02\x05delay\x0F\0\x05\x0Fdamage_modifier\0\0\0\0\x05\x11damage_multiplier333?\0\0\t\titem_tags\x08\x04\x15minecraft:wooden_tier\x12minecraft:is_spear\n\x15minecraft:enchantable\x08\x04slot\x0Bmelee_spear\x01\x05value\x0F\0\n\x0Eminecraft:tags\t\x04tags\x08\x04\x15minecraft:wooden_tier\x12minecraft:is_spear\0\n\x12minecraft:cooldown\x05\x08durationff&?\x08\x04type\x06attack\x08\x08category\x05spear\0\n\x0Eminecraft:fuel\x05\x08duration\0\0 A\0\n\x10minecraft:damage\x02\x05value\x01\0\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x19minecraft:piercing_weapon\x05\rhitbox_margin\0\0\x80>\n\x05reach\x05\x03min\0\0\0@\x05\x03max\0\0\x90@\0\n\x0Ecreative_reach\x05\x03max\0\0\xF0@\x05\x03min\0\0\0@\0\0\n\x0Fitem_properties\x01\x12hidden_in_commands\x02\x08\x0Ecreative_group\0\x03\x11creative_category\x06\x01\x0Eallow_off_hand\0\x01\x04foil\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Eshould_despawn\x01\x03\x0Emax_stack_size\x02\n\x0Eminecraft:icon\n\x08textures\x08\x07default\nwood_spear\0\0\x03\ruse_animation\0\x01\x0Eliquid_clipped\0\x01\x17can_destroy_in_creative\x01\x03\x11enchantable_value\x1E\x03\x06damage\x02\x03\x0Bframe_count\x02\x08\x10enchantable_slot\x0Bmelee_spear\x01\x0Fstacked_by_data\0\x01\rhand_equipped\x01\x03\x0Cuse_duration\x80\xE4\xAF\x01\0\n\x14minecraft:durability\n\rdamage_chance\x03\x03max\xC8\x01\x03\x03min\0\0\x03\x0Emax_durabilityx\0\n\x16minecraft:display_name\x08\x05value\x16item.wooden_spear.name\0\n\x14minecraft:repairable\t\x0Crepair_items\n\x04\t\x05items\n\x02\x08\x04name\x16minecraft:wooden_spear\0\n\rrepair_amount\x08\nexpression)context.other->query.remaining_durability\x02\x07version\r\0\0\0\n\rrepair_amount\x02\x07version\r\0\x08\nexpression\x1Bquery.max_durability * 0.25\0\t\x05items\n\x02\x08\x04tags\x1Eq.all_tags('minecraft:planks')\0\0\0\n\x17minecraft:use_modifiers\x05\x11movement_modifier\0\0\x80?\x08\x0Bstart_using\x06always\x08\x0Bstart_sound\x15item.wooden_spear.use\x05\x0Cuse_duration\0\xA0\x8CG\x01\x0Femit_vibrations\0\0\0" } ;
pub const WOODEN_SWORD: Self = Self {
id: 339,
registry_key: "minecraft:wooden_sword",
@ -50566,7 +50566,7 @@ impl BedrockItem {
component_based: false,
definition_components: b"\n\0\0",
};
pub const YELLOW_BUNDLE : Self = Self { id : 280 , registry_key : "minecraft:yellow_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n\x0Fitem_properties\x03\x11creative_category\x06\x01\x17can_destroy_in_creative\x01\x08\x0Ecreative_group\0\x08\x10enchantable_slot\x04none\x01\x0Eshould_despawn\x01\x03\x0Cuse_duration\0\x01\x0Eallow_off_hand\0\x01\x0Fstacked_by_data\0\x01\x12hidden_in_commands\x02\x01\rhand_equipped\0\x03\ruse_animation\0\x03\x0Bframe_count\x02\x03\x06damage\0\x03\x11enchantable_value\0\x01\x0Eliquid_clipped\0\x03\x0Emax_stack_size\x02\x01\x04foil\0\n\x0Eminecraft:icon\n\x08textures\x08\x07default\rbundle_yellow\x08\x11bundle_open_front\x18bundle_yellow_open_front\x08\x10bundle_open_back\x17bundle_yellow_open_back\0\0\x05\x0Cmining_speed\0\0\x80?\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\t\titem_tags\0\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x16minecraft:storage_item\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\x03\tmax_slots\x80\x01\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\0\0" } ;
pub const YELLOW_BUNDLE : Self = Self { id : 280 , registry_key : "minecraft:yellow_bundle" , version : BedrockItemVersion :: DataDriven , component_based : true , definition_components : b"\n\0\n!minecraft:storage_weight_modifier\x03\x16weight_in_storage_item\x08\0\t\titem_tags\0\0\n\x1Eminecraft:storage_weight_limit\x03\x10max_weight_limit\x80\x01\0\n\x0Fitem_properties\x08\x10enchantable_slot\x04none\x03\ruse_animation\0\x03\x11creative_category\x06\x01\x0Eshould_despawn\x01\x03\x0Bframe_count\x02\x03\x0Cuse_duration\0\x01\x0Eallow_off_hand\0\n\x0Eminecraft:icon\n\x08textures\x08\x11bundle_open_front\x18bundle_yellow_open_front\x08\x10bundle_open_back\x17bundle_yellow_open_back\x08\x07default\rbundle_yellow\0\0\x03\x11enchantable_value\0\x01\rhand_equipped\0\x01\x04foil\0\x05\x0Cmining_speed\0\0\x80?\x01\x0Fstacked_by_data\0\x01\x0Eliquid_clipped\0\x03\x06damage\0\x01\x17can_destroy_in_creative\x01\x08\x0Ecreative_group\0\x03\x0Emax_stack_size\x02\x01\x12hidden_in_commands\x02\0\n\x18minecraft:max_stack_size\x01\x05value\x01\0\n\x1Cminecraft:bundle_interaction\x03\x12num_viewable_slots\x18\0\n\x16minecraft:storage_item\t\rallowed_items\0\0\x01\x1Aallow_nested_storage_items\x01\x03\tmax_slots\x80\x01\t\x0Cbanned_items\n\x04\x08\x04name\x15minecraft:shulker_box\0\x08\x04name\x1Cminecraft:undyed_shulker_box\0\0\0" } ;
pub const YELLOW_CANDLE: Self = Self {
id: -417,
registry_key: "minecraft:yellow_candle",

View File

@ -1,5 +1,5 @@
/* This file is generated. Do not edit manually. */
#[allow(clippy::all, unused_imports, dead_code)]
#[allow(clippy::all, unused_imports, dead_code, clippy::too_many_lines)]
fn build_placed_features()
-> std::collections::HashMap<pumpkin_data::placed_feature::PlacedFeature, PlacedFeature> {
use crate::block::BlockStateCodec;
@ -93,9 +93,9 @@ fn build_placed_features()
),
placement: vec![
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
noise_to_count_ratio: 160i32,
noise_factor: 80f64,
noise_offset: 0.3f64,
to_count_ratio: 160i32,
factor: 80f64,
offset: 0.3f64,
}),
PlacementModifier::InSquare(SquarePlacementModifier),
PlacementModifier::Heightmap(HeightmapPlacementModifier {
@ -1943,9 +1943,9 @@ fn build_placed_features()
feature: Feature::Named(pumpkin_data::configured_feature::ConfiguredFeature::Kelp),
placement: vec![
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
noise_to_count_ratio: 120i32,
noise_factor: 80f64,
noise_offset: 0f64,
to_count_ratio: 120i32,
factor: 80f64,
offset: 0f64,
}),
PlacementModifier::InSquare(SquarePlacementModifier),
PlacementModifier::Heightmap(HeightmapPlacementModifier {
@ -1961,9 +1961,9 @@ fn build_placed_features()
feature: Feature::Named(pumpkin_data::configured_feature::ConfiguredFeature::Kelp),
placement: vec![
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
noise_to_count_ratio: 80i32,
noise_factor: 80f64,
noise_offset: 0f64,
to_count_ratio: 80i32,
factor: 80f64,
offset: 0f64,
}),
PlacementModifier::InSquare(SquarePlacementModifier),
PlacementModifier::Heightmap(HeightmapPlacementModifier {
@ -7587,9 +7587,9 @@ fn build_placed_features()
),
placement: vec![
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
noise_to_count_ratio: 20i32,
noise_factor: 400f64,
noise_offset: 0f64,
to_count_ratio: 20i32,
factor: 400f64,
offset: 0f64,
}),
PlacementModifier::InSquare(SquarePlacementModifier),
PlacementModifier::Heightmap(HeightmapPlacementModifier {

View File

@ -85,8 +85,8 @@ name = "noise_router"
harness = false
# [lints]
# workspace = true
[lints]
workspace = true
[package.metadata.cargo-machete]
ignored = ["serde_json"]

View File

@ -54,8 +54,8 @@ impl WorldPortalExt for BlockRegistry {
}
}
/// Benchmarks the full pipeline for a GRID_SIZE^2 chunks grid running in parallel
/// across THREAD_COUNT rayon threads.
/// Benchmarks the full pipeline for a `GRID_SIZE^2` chunks grid running in parallel
/// across `THREAD_COUNT` rayon threads.
fn bench_concurrent_chunk_generation(c: &mut Criterion) {
let pool = rayon::ThreadPoolBuilder::new()
.num_threads(THREAD_COUNT)

View File

@ -1,4 +1,5 @@
use std::env;
use std::fmt::Write;
use std::fs;
use std::path::Path;
@ -7,16 +8,32 @@ fn main() {
let dest_path = Path::new(&out_dir).join("template_embeddings.rs");
let mut code = String::from(
"pub fn get_template_bytes(path: &str) -> Option<&'static [u8]> {\n match path {\n",
"
#[allow(clippy::too_many_lines)]
#[allow(clippy::match_same_arms)]
#[must_use]
pub fn get_template_bytes(path: &str) -> Option<&'static [u8]> {\n match path {\n",
);
let mut pool_code = String::from(
"pub fn get_pool_elements(pool_id: &str) -> Option<&'static [&'static str]> {\n match pool_id {\n",
"
#[allow(clippy::too_many_lines)]
#[allow(clippy::match_same_arms)]
#[must_use]
pub fn get_pool_elements(pool_id: &str) -> Option<&'static [&'static str]> {\n match pool_id {\n",
);
let mut template_pool_json_code = String::from(
"pub fn get_template_pool_json(path: &str) -> Option<&'static str> {\n match path {\n",
"
#[allow(clippy::too_many_lines)]
#[allow(clippy::match_same_arms)]
#[must_use]
pub fn get_template_pool_json(path: &str) -> Option<&'static str> {\n match path {\n",
);
let mut processor_list_json_code = String::from(
"pub fn get_processor_list_json(path: &str) -> Option<&'static str> {\n match path {\n",
"
#[allow(clippy::too_many_lines)]
#[allow(clippy::match_same_arms)]
#[must_use]
pub fn get_processor_list_json(path: &str) -> Option<&'static str> {\n match path {\n",
);
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
@ -26,11 +43,12 @@ fn main() {
process_dir(&assets_dir, "", &mut code, &mut pools);
for (pool_id, elements) in pools {
pool_code.push_str(&format!(
" \"minecraft:{pool_id}\" | \"{pool_id}\" => Some(&[\n"
));
let _ = writeln!(
pool_code,
" \"minecraft:{pool_id}\" | \"{pool_id}\" => Some(&["
);
for element in elements {
pool_code.push_str(&format!(" \"{element}\",\n"));
let _ = writeln!(pool_code, " \"{element}\",");
}
pool_code.push_str(" ]),\n");
}
@ -85,14 +103,24 @@ fn process_dir(
format!("{prefix}/{name}")
};
process_dir(&path, &new_prefix, code, pools);
} else if name.ends_with(".nbt") {
let template_name = format!("{}/{}", prefix, name.strip_suffix(".nbt").unwrap());
} else if path
.extension()
.and_then(|s| s.to_str())
.is_some_and(|ext| ext.eq_ignore_ascii_case("nbt"))
{
let stem = path.file_stem().unwrap().to_string_lossy();
let template_name = if prefix.is_empty() {
stem.to_string()
} else {
format!("{prefix}/{stem}")
};
let abs_path = path.canonicalize().unwrap();
code.push_str(&format!(
" \"{}\" => Some(include_bytes!(r#\"{}\"#)),\n",
template_name,
abs_path.display()
));
let _ = writeln!(
code,
" \"{template_name}\" => Some(include_bytes!(r#\"{abs}\"#)),",
template_name = template_name,
abs = abs_path.display()
);
if !prefix.is_empty() {
pools
@ -132,10 +160,12 @@ fn process_json_dir(dir: &Path, prefix: &str, code: &mut String) {
format!("{prefix}/{stem}")
};
let abs_path = path.canonicalize().unwrap();
code.push_str(&format!(
" \"minecraft:{id}\" | \"{id}\" => Some(include_str!(r#\"{}\"#)),\n",
abs_path.display()
));
let _ = writeln!(
code,
" \"minecraft:{id}\" | \"{id}\" => Some(include_str!(r#\"{abs}\"#)),",
id = id,
abs = abs_path.display()
);
}
}
}

View File

@ -79,10 +79,12 @@ mod test {
#[test]
fn wide_area_surface() {
use crate::generation::generator::{GeneratorInit, VanillaGenerator};
use crate::generation::noise::router::multi_noise_sampler::{
MultiNoiseSampler, MultiNoiseSamplerBuilderOptions,
};
use crate::generation::{biome_coords, positions::chunk_pos};
use pumpkin_util::world_seed::Seed;
#[derive(Deserialize)]
struct BiomeData {
x: i32,
@ -94,8 +96,6 @@ mod test {
read_data_from_file!("../../assets/biome_no_blend_no_beard_0.json");
let seed = 0;
use crate::generation::generator::{GeneratorInit, VanillaGenerator};
use pumpkin_util::world_seed::Seed;
let generator = VanillaGenerator::new(Seed(seed as u64), Dimension::OVERWORLD);
for data in expected_data {

View File

@ -50,9 +50,8 @@ impl BlockStateCodec {
pub fn get_state_id(&self) -> BlockStateId {
let block = self.name;
let properties_map = match &self.properties {
Some(map) => map,
None => return block.default_state.id,
let Some(properties_map) = &self.properties else {
return block.default_state.id;
};
let props_iter = properties_map

View File

@ -124,7 +124,7 @@ impl Compression {
const LZ4_ID: u8 = 4;
const CUSTOM_ID: u8 = 127;
fn decompress_data(&self, compressed_data: &[u8]) -> Result<Box<[u8]>, CompressionError> {
fn decompress_data(self, compressed_data: &[u8]) -> Result<Box<[u8]>, CompressionError> {
fn decode<R: std::io::Read>(mut reader: R, capacity: usize) -> std::io::Result<Box<[u8]>> {
let mut buf = Vec::with_capacity(capacity);
reader.read_to_end(&mut buf)?;
@ -149,7 +149,7 @@ impl Compression {
const LZ4_COMPRESSION_LEVEL_BASE: u32 = 10;
fn compress_data(
&self,
self,
uncompressed_data: &[u8],
compression_level: u32,
) -> Result<Vec<u8>, CompressionError> {
@ -491,6 +491,7 @@ impl<S: SingleChunkDataSerializer> AnvilChunkFile<S> {
}
}
#[expect(clippy::large_stack_arrays)]
impl<S: SingleChunkDataSerializer> Default for AnvilChunkFile<S> {
fn default() -> Self {
Self {
@ -498,7 +499,7 @@ impl<S: SingleChunkDataSerializer> Default for AnvilChunkFile<S> {
write_action: Mutex::new(WriteAction::Pass),
// Two sectors for offset + timestamp
end_sector: 2,
_dummy: Default::default(),
_dummy: PhantomData,
}
}
}
@ -606,6 +607,7 @@ impl<S: SingleChunkDataSerializer> ChunkSerializer for AnvilChunkFile<S> {
Ok(chunk_file)
}
#[expect(clippy::too_many_lines)]
async fn update_chunk(
&mut self,
chunk: &Self::Data,

View File

@ -309,6 +309,7 @@ pub struct LinearV2File<S: SingleChunkDataSerializer> {
_dummy: PhantomData<S>,
}
#[expect(clippy::large_stack_arrays)]
impl<S: SingleChunkDataSerializer> Default for LinearV2File<S> {
fn default() -> Self {
Self {
@ -448,6 +449,7 @@ impl<S: SingleChunkDataSerializer> ChunkSerializer for LinearV2File<S> {
Ok(())
}
#[expect(clippy::large_stack_arrays)]
fn read(raw_file: Bytes) -> Result<Self, ChunkReadingError> {
let mut buf = raw_file;
@ -471,7 +473,7 @@ impl<S: SingleChunkDataSerializer> ChunkSerializer for LinearV2File<S> {
// the per-chunk size field inside each bucket.
let mut bitmap_raw = [0u8; ChunkBitmap::SIZE];
bitmap_raw.copy_from_slice(&buf.split_to(ChunkBitmap::SIZE));
let _bitmap = ChunkBitmap(bitmap_raw);
//let _bitmap = ChunkBitmap(bitmap_raw);
let _features = NbtFeatures::from_bytes(&mut buf)?;
@ -581,13 +583,13 @@ impl<S: SingleChunkDataSerializer> ChunkSerializer for LinearV2File<S> {
for chunk in chunks {
let index = Self::get_chunk_index(chunk.x, chunk.y);
let result = match &self.chunks_data[index] {
Some(data) => match S::from_bytes(data, chunk) {
let result = self.chunks_data[index].as_ref().map_or_else(
|| LoadedData::Missing(chunk),
|data| match S::from_bytes(data, chunk) {
Ok(c) => LoadedData::Loaded(c),
Err(err) => LoadedData::Error((chunk, err)),
},
None => LoadedData::Missing(chunk),
};
);
if stream.send(result).await.is_err() {
// Receiver dropped — stop early to avoid unnecessary work.

View File

@ -45,7 +45,7 @@ impl SingleChunkDataSerializer for ChunkData {
fn to_bytes(
&self,
) -> Pin<Box<dyn Future<Output = Result<Bytes, ChunkSerializingError>> + Send + '_>> {
Box::pin(async move { self.internal_to_bytes().await })
Box::pin(async move { self.internal_to_bytes() })
}
#[inline]
@ -173,7 +173,14 @@ impl ChunkData {
})
}
async fn internal_to_bytes(&self) -> Result<Bytes, ChunkSerializingError> {
fn internal_to_bytes(&self) -> Result<Bytes, ChunkSerializingError> {
fn extract_light_ref(light: Option<&LightContainer>) -> Option<&[u8]> {
match light {
Some(LightContainer::Full(data)) => Some(data.as_ref()),
_ => None,
}
}
let is_light_correct = self
.light_populated
.load(std::sync::atomic::Ordering::Relaxed);
@ -183,13 +190,6 @@ impl ChunkData {
entities_guard.values().cloned().collect::<Vec<_>>()
};
fn extract_light_ref(light: Option<&LightContainer>) -> Option<&[u8]> {
match light {
Some(LightContainer::Full(data)) => Some(data.as_ref()),
_ => None,
}
}
let light_lock = self.light_engine.lock().unwrap();
let heightmap_lock = self.heightmap.lock().unwrap();
let block_lock = self.section.block_sections.read().unwrap();

View File

@ -183,7 +183,7 @@ mod tests {
Box::pin(async move { Ok(bytes) })
}
fn from_bytes(bytes: &Bytes, pos: Vector2<i32>) -> Result<Self, ChunkReadingError> {
let mut mock: MockChunk = pumpkin_nbt::from_bytes_unnamed(std::io::Cursor::new(bytes))
let mut mock: Self = pumpkin_nbt::from_bytes_unnamed(std::io::Cursor::new(bytes))
.map_err(|e| {
ChunkReadingError::ParsingError(
crate::chunk::ChunkParsingError::ErrorDeserializingChunk(e.to_string()),
@ -199,7 +199,7 @@ mod tests {
}
#[tokio::test]
async fn test_pump_file_roundtrip() {
async fn pump_file_roundtrip() {
let temp_dir = TempDir::new().unwrap();
let file_path = temp_dir.child("r.0.0.pump");

View File

@ -79,12 +79,10 @@ impl<S: ChunkSerializer<WriteBackend = PathBuf>> ChunkSerializerLazyLoader<S> {
if Arc::strong_count(loader) > 1 {
return false;
}
match loader.internal.get() {
// The loader holds 1 strong count; anything above that means
// a read/write guard is still live somewhere.
Some(arc) => Arc::strong_count(arc) == 1,
None => true,
}
loader
.internal
.get()
.is_none_or(|arc| Arc::strong_count(arc) == 1)
}
/// Returns the serializer, initialising it from disk on the first call.

View File

@ -129,7 +129,7 @@ impl ChunkSections {
.read()
.unwrap()
.iter()
.flat_map(|section| section.iter().copied())
.flat_map(|section| section.iter())
.collect()
}
@ -140,7 +140,7 @@ impl ChunkSections {
.read()
.unwrap()
.iter()
.flat_map(|section| section.iter().copied())
.flat_map(|section| section.iter())
.collect()
}
}
@ -815,7 +815,7 @@ mod tests {
assert_eq!(cache[0].random_ticking_block_count, 1);
assert_eq!(cache[0].random_ticking_fluid_count, 0);
assert!(cache[0].is_randomly_ticking());
}
};
sections.set_block_absolute_y(0, min_y, 0, Block::STONE.default_state.id);
{
@ -824,7 +824,7 @@ mod tests {
assert_eq!(cache[0].random_ticking_block_count, 0);
assert_eq!(cache[0].random_ticking_fluid_count, 0);
assert!(!cache[0].is_randomly_ticking());
}
};
sections.set_block_absolute_y(0, min_y, 0, Block::LAVA.default_state.id);
{
@ -836,7 +836,7 @@ mod tests {
}
#[test]
fn test_heightmap_is_opaque() {
fn heightmap_is_opaque() {
use crate::chunk::ChunkHeightmapType;
let air = Block::AIR.default_state;

View File

@ -1,4 +1,4 @@
use std::{collections::HashMap, hash::Hash, iter::repeat_n};
use std::{collections::HashMap, hash::Hash};
use pumpkin_data::{
BlockState, BlockStateId,
@ -380,17 +380,21 @@ impl<V: Hash + Eq + Copy + Default, const DIM: usize> PalettedContainer<V, DIM>
}
}
pub fn iter(&self) -> Box<dyn Iterator<Item = &V> + '_> {
pub fn iter(&self) -> Box<dyn Iterator<Item = V> + '_> {
match self {
Self::Homogeneous(registry_id) => Box::new(repeat_n(registry_id, Self::VOLUME)),
Self::Homogeneous(registry_id) => {
Box::new(std::iter::repeat_n(*registry_id, Self::VOLUME))
}
Self::Heterogeneous(data) => match &data.storage {
PaletteStorage::Dense(cube) => Box::new(cube.as_flattened().as_flattened().iter()),
PaletteStorage::Dense(cube) => {
Box::new(cube.as_flattened().as_flattened().iter().copied())
}
PaletteStorage::Indexed(indices) => Box::new(
indices
.as_flattened()
.as_flattened()
.iter()
.map(|&idx| &data.palette[idx as usize]),
.map(|&idx| data.palette[idx as usize]),
),
},
}
@ -404,6 +408,34 @@ impl<V: Hash + Eq + Copy + Default, const DIM: usize> PalettedContainer<V, DIM>
}
}
impl<'a, V: Hash + Eq + Copy + Default, const DIM: usize> IntoIterator
for &'a PalettedContainer<V, DIM>
{
type Item = V;
type IntoIter = Box<dyn Iterator<Item = Self::Item> + 'a>;
fn into_iter(self) -> Self::IntoIter {
match self {
PalettedContainer::Homogeneous(registry_id) => Box::new(std::iter::repeat_n(
*registry_id,
PalettedContainer::<V, DIM>::VOLUME,
)),
PalettedContainer::Heterogeneous(data) => match &data.storage {
PaletteStorage::Dense(cube) => {
Box::new(cube.as_flattened().as_flattened().iter().copied())
}
PaletteStorage::Indexed(indices) => Box::new(
indices
.as_flattened()
.as_flattened()
.iter()
.map(|&idx| data.palette[idx as usize]),
),
},
}
}
}
impl<V: Default + Hash + Eq + Copy, const DIM: usize> Default for PalettedContainer<V, DIM> {
fn default() -> Self {
Self::Homogeneous(V::default())

View File

@ -4,6 +4,7 @@ use itertools::Itertools;
use std::cmp::{Ordering, PartialEq, min};
use std::collections::BinaryHeap;
use std::collections::hash_map::Entry;
use std::fmt::Write;
use std::mem::swap;
use std::sync::Arc;
use tracing::debug;
@ -38,6 +39,7 @@ impl From<HeapNode> for (ChunkPos, i8) {
struct LevelCache(i32, i32, usize, [(i8, i8); 256 * 256]);
#[expect(clippy::large_stack_arrays)]
impl LevelCache {
const fn new() -> Self {
Self(0, 0, 0, [(0, 0); 256 * 256])
@ -176,22 +178,21 @@ impl ChunkLoading {
let mut header = "X/Y".to_string();
for y in sy..=ty {
header.push_str(&format!("{y:4}"));
let _ = write!(header, "{y:4}");
}
let grid: String = (sx..=tx)
.map(|x| {
let mut row = format!("{x:3}");
row.push_str(
&(sy..=ty)
.map(|y| {
format!(
let mut cols = String::new();
for y in sy..=ty {
let _ = write!(
cols,
"{:4}",
map.get(&ChunkPos::new(x, y)).unwrap_or(&Self::MAX_LEVEL)
)
})
.collect::<String>(),
);
}
row.push_str(&cols);
row
})
.collect::<Vec<_>>()
@ -393,6 +394,7 @@ impl ChunkLoading {
}
#[test]
#[expect(clippy::print_stdout)]
fn test() {
let mut a = ChunkLoading::new(Arc::new(LevelChannel::new()));
@ -426,24 +428,20 @@ fn test() {
{
let mut header = "X/Y".to_string();
for y in sy..=ty {
header.push_str(&format!("{y:4}"));
let _ = write!(header, "{y:4}");
}
let grid: String = (sx..=tx)
.map(|x| {
let mut row = format!("{x:3}");
row.push_str(
&(sy..=ty)
.map(|y| {
format!(
"{:4}",
a.pos_level
for y in sy..=ty {
let level = a
.pos_level
.get(&ChunkPos::new(x, y))
.unwrap_or(&ChunkLoading::MAX_LEVEL)
)
})
.collect::<String>(),
);
.unwrap_or(&ChunkLoading::MAX_LEVEL);
let _ = write!(row, "{level:4}");
}
row
})
.collect::<Vec<_>>()

View File

@ -1,5 +1,6 @@
use crate::chunk::{ChunkData, ChunkLight, ChunkSections};
use crate::generation::biome_coords;
use crate::tick::scheduler::ChunkTickScheduler;
use pumpkin_config::lighting::LightingEngineConfig;
use pumpkin_data::dimension::Dimension;
use rustc_hash::FxHashMap;
@ -38,6 +39,7 @@ pub enum StagedChunkEnum {
Full,
}
#[expect(clippy::fallible_impl_from)]
impl From<u8> for StagedChunkEnum {
fn from(v: u8) -> Self {
match v {
@ -68,14 +70,14 @@ impl From<ChunkStatus> for StagedChunkEnum {
ChunkStatus::Surface => Self::Surface,
ChunkStatus::Carvers => Self::Carvers,
ChunkStatus::Features => Self::Features,
ChunkStatus::InitializeLight => Self::Lighting,
ChunkStatus::Light => Self::Lighting,
ChunkStatus::InitializeLight | ChunkStatus::Light => Self::Lighting,
ChunkStatus::Spawn => Self::Spawn,
ChunkStatus::Full => Self::Full,
}
}
}
#[expect(clippy::fallible_impl_from)]
impl From<StagedChunkEnum> for ChunkStatus {
fn from(status: StagedChunkEnum) -> Self {
match status {
@ -90,7 +92,7 @@ impl From<StagedChunkEnum> for ChunkStatus {
StagedChunkEnum::Lighting => Self::Light,
StagedChunkEnum::Spawn => Self::Spawn,
StagedChunkEnum::Full => Self::Full,
_ => panic!(),
StagedChunkEnum::None => panic!(),
}
}
}
@ -130,36 +132,16 @@ impl StagedChunkEnum {
pub const fn get_direct_radius(self) -> i32 {
// self exclude
match self {
Self::Empty => 0,
Self::StructureStart => 0,
Self::StructureReferences => 0,
Self::Biomes => 0,
Self::Noise => 0,
Self::Surface => 0,
Self::Carvers => 0,
Self::Features => 1,
Self::Lighting => 1,
Self::Spawn => 1,
Self::Full => 1,
_ => panic!(),
Self::Features | Self::Lighting | Self::Spawn | Self::Full => 1,
_ => 0,
}
}
#[must_use]
pub const fn get_write_radius(self) -> i32 {
// self exclude
match self {
Self::Empty => 0,
Self::StructureStart => 0,
Self::StructureReferences => 0,
Self::Biomes => 0,
Self::Noise => 0,
Self::Surface => 0,
Self::Carvers => 0,
Self::Features => 1,
Self::Lighting => 1,
Self::Spawn => 1,
Self::Full => 0,
_ => panic!(),
Self::Features | Self::Lighting | Self::Spawn => 1,
_ => 0,
}
}
#[must_use]
@ -229,12 +211,12 @@ impl Chunk {
self,
Self::Level(Arc::new(ChunkData {
section: ChunkSections::new(0, 0),
heightmap: Default::default(),
heightmap: Mutex::default(),
x: 0,
z: 0,
block_ticks: Default::default(),
fluid_ticks: Default::default(),
pending_block_entities: Default::default(),
block_ticks: ChunkTickScheduler::default(),
fluid_ticks: ChunkTickScheduler::default(),
pending_block_entities: Mutex::default(),
light_engine: Mutex::new(ChunkLight::default()),
light_populated: AtomicBool::new(false),
status: ChunkStatus::Empty,
@ -322,12 +304,12 @@ impl Chunk {
light_engine: Mutex::new(light_data),
light_populated: AtomicBool::new(is_lit),
section: sections,
heightmap: Default::default(),
heightmap: Mutex::default(),
x: proto_chunk.x,
z: proto_chunk.z,
dirty: AtomicBool::new(true),
block_ticks: Default::default(),
fluid_ticks: Default::default(),
block_ticks: ChunkTickScheduler::default(),
fluid_ticks: ChunkTickScheduler::default(),
pending_block_entities: Mutex::new(pending_block_entities),
status: proto_chunk.stage.into(),
blending_data: proto_chunk.blending_data,

View File

@ -28,7 +28,7 @@ impl HeightLimitView for Cache {
let mid = ((self.size * self.size) >> 1) as usize;
match &self.chunks[mid] {
Chunk::Proto(chunk) => chunk.height(),
_ => panic!(),
Chunk::Level(_) => panic!(),
}
}
@ -36,7 +36,7 @@ impl HeightLimitView for Cache {
let mid = ((self.size * self.size) >> 1) as usize;
match &self.chunks[mid] {
Chunk::Proto(chunk) => chunk.bottom_y(),
_ => panic!(),
Chunk::Level(_) => panic!(),
}
}
}
@ -211,10 +211,12 @@ impl GenerationCache for Cache {
fn get_top_y(&self, heightmap: &HeightMap, x: i32, z: i32) -> i32 {
match heightmap {
HeightMap::WorldSurfaceWg => self.top_block_height_exclusive(x, z),
HeightMap::WorldSurface => self.top_block_height_exclusive(x, z),
HeightMap::OceanFloorWg => self.ocean_floor_height_exclusive(x, z),
HeightMap::OceanFloor => self.ocean_floor_height_exclusive(x, z),
HeightMap::WorldSurfaceWg | HeightMap::WorldSurface => {
self.top_block_height_exclusive(x, z)
}
HeightMap::OceanFloorWg | HeightMap::OceanFloor => {
self.ocean_floor_height_exclusive(x, z)
}
HeightMap::MotionBlocking => self.top_motion_blocking_block_height_exclusive(x, z),
HeightMap::MotionBlockingNoLeaves => {
self.top_motion_blocking_block_no_leaves_height_exclusive(x, z)

View File

@ -32,7 +32,7 @@ impl PartialEq for TaskHeapNode {
}
impl TaskHeapNode {
#[cfg(test)]
pub(crate) fn node_key(&self) -> NodeKey {
pub(crate) const fn node_key(&self) -> NodeKey {
self.1
}
}
@ -129,7 +129,7 @@ impl GenerationSchedule {
let handle = thread::Builder::new()
.name(format!("Gen-{i}"))
.spawn(move || {
generation_work(recv_gen, send_chunk, level_clone);
generation_work(&recv_gen, &send_chunk, &level_clone);
})
.expect("Failed to spawn Generation Thread");
@ -168,11 +168,11 @@ impl GenerationSchedule {
send_chunk,
gen_pool,
listener,
chunk_map: Default::default(),
chunk_map: HashMap::default(),
lighting_config,
last_unload: std::time::Instant::now(),
};
scheduler.work(level_sched);
scheduler.work(&level_sched);
})
.expect("Failed to spawn Scheduler Thread");
@ -201,7 +201,7 @@ impl GenerationSchedule {
}
chunk.dirty.store(true, Relaxed);
}
_ => {}
LightingEngineConfig::Default => {}
}
}
@ -412,6 +412,7 @@ impl GenerationSchedule {
}
}
#[expect(clippy::too_many_lines)]
fn resort_work(&mut self, new_data: (Option<LevelChange>, Option<Vec<ChunkPos>>)) -> bool {
if new_data.0.is_none() && new_data.1.is_none() {
return false;
@ -719,6 +720,7 @@ impl GenerationSchedule {
}
}
#[expect(clippy::too_many_lines)]
fn receive_chunk(&mut self, pos: ChunkPos, data: RecvChunk) {
match data {
RecvChunk::IO(chunk) => {
@ -800,10 +802,9 @@ impl GenerationSchedule {
holder.current_stage = StagedChunkEnum::Full;
let was_public = holder.public;
if was_public {
self.apply_lighting_override(&chunk);
let public_chunk = chunk.clone();
if was_public {
self.public_chunk_map.insert(new_pos, public_chunk);
info!(
"Notifying players: regenerated chunk at {:?} (was already public)",
@ -812,8 +813,6 @@ impl GenerationSchedule {
self.listener.process_new_chunk(new_pos, &chunk);
holder.chunk = Some(Chunk::Level(chunk));
} else {
self.apply_lighting_override(&chunk);
let public_chunk = chunk.clone();
holder.chunk = Some(Chunk::Level(chunk));
let result =
self.public_chunk_map.insert(new_pos, public_chunk);
@ -985,7 +984,8 @@ impl GenerationSchedule {
self.running_task_count -= 1;
}
fn work(mut self, level: Arc<Level>) {
#[expect(clippy::too_many_lines)]
fn work(mut self, level: &Arc<Level>) {
debug!(
"schedule thread start id: {:?} name: {}",
thread::current().id(),
@ -1175,12 +1175,11 @@ impl GenerationSchedule {
let holder = self.chunk_map.get_mut(&new_pos).unwrap();
let mut tmp = None;
swap(&mut tmp, &mut holder.chunk);
let tmp = match tmp {
Some(v) => v,
None => panic!(
let Some(tmp) = tmp else {
panic!(
"Missing chunk for position {:?} while processing generation task for {:?} stage {:?}",
new_pos, node.pos, node.stage
),
)
};
match tmp {
Chunk::Level(chunk) => {
@ -1268,22 +1267,18 @@ impl GenerationSchedule {
}
Err(crossfire::compat::RecvTimeoutError::Disconnected) => break,
}
if self.queue_dirty {
self.sort_queue();
self.queue_dirty = false;
}
} else {
// No tasks in flight, wait indefinitely for LevelChannel changes
debug_assert!(self.debug_check());
debug_assert_eq!(self.running_task_count, 0);
self.resort_work(self.send_level.wait_and_get(&level));
self.resort_work(self.send_level.wait_and_get(level));
}
if self.queue_dirty {
self.sort_queue();
self.queue_dirty = false;
}
}
}
}
info!(
"schedule: waiting for {} generation tasks to finish",
self.running_task_count

View File

@ -42,7 +42,7 @@ fn ensure_dependency_chain_builds_multistage_chain() {
// Ensure tasks were created, present in the DAG, and correctly chained
for idx in start..=end {
let key = holder.tasks[idx];
assert!(!key.is_null(), "task {} was not created", idx);
assert!(!key.is_null(), "task {idx} was not created");
let node = graph.nodes.get(key).expect("graph missing node");
@ -51,8 +51,7 @@ fn ensure_dependency_chain_builds_multistage_chain() {
} else {
assert_eq!(
node.in_degree, 1,
"Intermediate task {} should have in_degree of 1",
idx
"Intermediate task {idx} should have in_degree of 1"
);
}
}
@ -141,7 +140,7 @@ fn ensure_dependency_chain_does_nothing_if_already_met() {
);
// Ensure the function returned early without creating any tasks or queueing anything
for task in holder.tasks.iter() {
for task in &holder.tasks {
assert!(
task.is_null(),
"No tasks should be created if the stage requirement is already met"
@ -292,7 +291,7 @@ fn completed_proto_stage_drops_all_satisfied_tasks() {
}
#[test]
fn test_cancellation_path_decrements_in_degree() {
fn cancellation_path_decrements_in_degree() {
let mut graph = DAG::default();
// Create a task that is waiting (in_degree = 1)

View File

@ -28,8 +28,8 @@ pub enum RecvChunk {
/// Checks if a chunk needs relighting based on the current lighting configuration
/// Returns true if the chunk has uniform lighting (from full/dark mode) but the server
/// is now running in default mode (which needs proper lighting calculation)
fn needs_relighting(chunk: &crate::chunk::ChunkData, config: &LightingEngineConfig) -> bool {
if *config != LightingEngineConfig::Default {
fn needs_relighting(chunk: &crate::chunk::ChunkData, config: LightingEngineConfig) -> bool {
if config != LightingEngineConfig::Default {
return false;
}
@ -87,9 +87,8 @@ pub async fn io_read_work(
});
for _ in 0..batch_len {
let data = match t_recv.recv().await {
Some(res) => res,
None => break,
let Some(data) = t_recv.recv().await else {
break;
};
match data {
@ -97,7 +96,7 @@ pub async fn io_read_work(
let pos = ChunkPos::new(chunk.x, chunk.z);
if chunk.status == ChunkStatus::Full {
// Relighting check
let needs_relight = needs_relighting(&chunk, &level.lighting_config);
let needs_relight = needs_relighting(&chunk, level.lighting_config);
if needs_relight {
debug!(
@ -169,10 +168,7 @@ pub async fn io_read_work(
pub async fn io_write_work(recv: AsyncRx<Vec<(ChunkPos, Chunk)>>, level: Arc<Level>, lock: IOLock) {
loop {
// Don't check cancel_token here (keep saving chunks)
let data = match recv.recv().await {
Ok(d) => d,
Err(_) => break,
};
let Ok(data) = recv.recv().await else { break };
// debug!("io write thread receive chunks size {}", data.len());
let mut vec = Vec::with_capacity(data.len());
let mut positions = Vec::with_capacity(data.len());
@ -262,21 +258,19 @@ pub fn run_generation(
}
pub fn generation_work(
recv: crossfire::compat::MRx<(ChunkPos, Cache, StagedChunkEnum)>,
send: crossfire::compat::MTx<(ChunkPos, RecvChunk)>,
level: Arc<Level>,
recv: &crossfire::compat::MRx<(ChunkPos, Cache, StagedChunkEnum)>,
send: &crossfire::compat::MTx<(ChunkPos, RecvChunk)>,
level: &Arc<Level>,
) {
let settings = GenerationSettings::from_dimension(&level.world_gen.dimension);
loop {
let (pos, cache, stage) = if let Ok(data) = recv.recv() {
data
} else {
let Ok((pos, cache, stage)) = recv.recv() else {
debug!("generation channel closed, exiting");
break;
};
let result = run_generation(pos, cache, stage, &level, settings);
let result = run_generation(pos, cache, stage, level, settings);
if send.send((pos, result)).is_err() {
break;
}

View File

@ -220,8 +220,8 @@ impl Blender {
{
let chunk_x = biome_coords::to_chunk(cell_x);
let chunk_z = biome_coords::to_chunk(cell_z);
let min_x = (cell_x & 3) == 0;
let min_z = (cell_z & 3) == 0;
let min_x = cell_x.trailing_zeros() >= 2;
let min_z = cell_z.trailing_zeros() >= 2;
let mut value = self.get_data_value(&getter, chunk_x, chunk_z, cell_x, cell_y, cell_z);
if value == f64::MAX {
@ -259,16 +259,16 @@ impl Blender {
F: Fn(&BlendingData, i32, i32, i32) -> f64,
{
let packed = (chunk_x as u32 as u64) | ((chunk_z as u32 as u64) << 32);
if let Some(data) = self.height_and_biome_blending_data.get(&packed) {
self.height_and_biome_blending_data
.get(&packed)
.map_or(f64::MAX, |data| {
getter(
data,
cell_x - biome_coords::from_chunk(chunk_x),
cell_y,
cell_z - biome_coords::from_chunk(chunk_z),
)
} else {
f64::MAX
}
})
}
#[must_use]
@ -323,11 +323,9 @@ pub struct BlenderBiomeSupplier<'a> {
impl BiomeSupplier for BlenderBiomeSupplier<'_> {
fn biome(&self, x: i32, y: i32, z: i32, sampler: &mut MultiNoiseSampler<'_>) -> &'static Biome {
if let Some(blended) = self.blender.blend_biome(x, y, z, &self.shift_noise) {
blended
} else {
self.base.biome(x, y, z, sampler)
}
self.blender
.blend_biome(x, y, z, &self.shift_noise)
.map_or_else(|| self.base.biome(x, y, z, sampler), |blended| blended)
}
}

View File

@ -27,7 +27,13 @@ pub enum BlockStateProvider {
}
impl BlockStateProvider {
pub fn get(&self, random: &mut RandomGenerator, pos: BlockPos) -> &'static BlockState {
pub fn get<T: GenerationCache>(
&self,
random: &mut RandomGenerator,
pos: BlockPos,
chunk: &T,
block_registry: &dyn WorldPortalExt,
) -> &'static BlockState {
match self {
Self::NoiseThreshold(provider) => provider.get(random, pos),
Self::NoiseProvider(provider) => provider.get(pos),
@ -35,9 +41,8 @@ impl BlockStateProvider {
Self::Weighted(provider) => provider.get(random),
Self::DualNoise(provider) => provider.get(pos),
Self::Pillar(provider) => provider.get(pos),
Self::RandomizedInt(provider) => provider.get(random, pos),
// Without chunk context, fall through to fallback (rules cannot be evaluated)
Self::Rule(_provider) => todo!(), //provider.get(random, pos),
Self::RandomizedInt(provider) => provider.get(random, pos, chunk, block_registry),
Self::Rule(provider) => provider.get(block_registry, chunk, random, pos),
}
}
@ -50,7 +55,7 @@ impl BlockStateProvider {
) -> &'static BlockState {
match self {
Self::Rule(provider) => provider.get(block_registry, chunk, random, pos),
_ => self.get(random, pos),
_ => self.get(random, pos, chunk, block_registry),
}
}
@ -63,7 +68,7 @@ impl BlockStateProvider {
) -> Option<&'static BlockState> {
match self {
Self::Rule(provider) => provider.get_optional(block_registry, chunk, random, pos),
_ => Some(self.get(random, pos)),
_ => Some(self.get(random, pos, chunk, block_registry)),
}
}
}
@ -101,7 +106,9 @@ impl RuleBasedBlockStateProvider {
);
}
}
self.fallback.as_ref().map(|f| f.get(random, pos))
self.fallback
.as_ref()
.map(|f| f.get(random, pos, chunk, block_registry))
}
}
@ -117,9 +124,15 @@ pub struct RandomizedIntBlockStateProvider {
}
impl RandomizedIntBlockStateProvider {
pub fn get(&self, random: &mut RandomGenerator, pos: BlockPos) -> &'static BlockState {
pub fn get<T: GenerationCache>(
&self,
random: &mut RandomGenerator,
pos: BlockPos,
chunk: &T,
block_registry: &dyn WorldPortalExt,
) -> &'static BlockState {
// TODO
self.source.get(random, pos)
self.source.get(random, pos, chunk, block_registry)
}
}
@ -162,10 +175,13 @@ impl DualNoiseBlockStateProvider {
let mut list = Vec::with_capacity(mapped as usize);
for i in 0..mapped {
let value = self.get_slow_noise(i as f64 * 54545.0, 0.0, i as f64 * 34234.0, &sampler);
list.push(self.base.get_state_by_value(&self.base.states, value));
list.push(NoiseBlockStateProvider::get_state_by_value(
&self.base.states,
value,
));
}
let value = self.base.base.get_noise(pos);
self.base.get_state_by_value(&list, value)
NoiseBlockStateProvider::get_state_by_value(&list, value)
}
fn get_slow_noise(&self, x: f64, y: f64, z: f64, sampler: &DoublePerlinNoiseSampler) -> f64 {
@ -228,14 +244,10 @@ pub struct NoiseBlockStateProvider {
impl NoiseBlockStateProvider {
pub fn get(&self, pos: BlockPos) -> &'static BlockState {
let value = self.base.get_noise(pos);
self.get_state_by_value(&self.states, value)
Self::get_state_by_value(&self.states, value)
}
fn get_state_by_value(
&self,
states: &[&'static BlockState],
value: f64,
) -> &'static BlockState {
fn get_state_by_value(states: &[&'static BlockState], value: f64) -> &'static BlockState {
let val = f64::midpoint(1.0, value).clamp(0.0, 0.9999);
states[(val * states.len() as f64) as usize]
}

View File

@ -40,7 +40,7 @@ impl Carver for CanyonCarver {
let distance =
(max_distance as f32 * canyon_config.shape.distance_factor.get(random)) as i32;
self.do_carve(
Self::do_carve(
config,
chunk,
random.next_i64(),
@ -61,7 +61,6 @@ impl Carver for CanyonCarver {
impl CanyonCarver {
#[allow(clippy::too_many_arguments)]
fn do_carve(
&self,
config: &CarverConfig,
chunk: &mut ProtoChunk,
tunnel_seed: i64,
@ -86,7 +85,7 @@ impl CanyonCarver {
))
};
let width_factor_per_height =
self.init_width_factors(chunk.height() as usize, config, &mut random);
Self::init_width_factors(chunk.height() as usize, config, &mut random);
let mut y_rota = 0.0f32;
let mut x_rota = 0.0f32;
@ -102,7 +101,7 @@ impl CanyonCarver {
.shape
.horizontal_radius_factor
.get(&mut random) as f64;
vertical_radius = self.update_vertical_radius(
vertical_radius = Self::update_vertical_radius(
config,
&mut random,
vertical_radius,
@ -125,11 +124,11 @@ impl CanyonCarver {
y_rota += (random.next_f32() - random.next_f32()) * random.next_f32() * 4.0;
if random.next_bounded_i32(4) != 0 {
if !self.can_reach(chunk.x, chunk.z, x, z, current_step, distance, thickness) {
if !Self::can_reach(chunk.x, chunk.z, x, z, current_step, distance, thickness) {
return;
}
self.carve_ellipsoid(
Self::carve_ellipsoid(
chunk,
config,
x,
@ -144,7 +143,6 @@ impl CanyonCarver {
}
fn init_width_factors(
&self,
depth: usize,
config: &CarverConfig,
random: &mut RandomGenerator,
@ -165,7 +163,6 @@ impl CanyonCarver {
}
fn update_vertical_radius(
&self,
config: &CarverConfig,
random: &mut RandomGenerator,
vertical_radius: f64,
@ -183,7 +180,6 @@ impl CanyonCarver {
#[allow(clippy::too_many_arguments)]
fn can_reach(
&self,
chunk_x: i32,
chunk_z: i32,
x: f64,
@ -203,7 +199,6 @@ impl CanyonCarver {
#[allow(clippy::too_many_arguments)]
fn carve_ellipsoid(
&self,
chunk: &mut ProtoChunk,
config: &CarverConfig,
x: f64,
@ -224,22 +219,22 @@ impl CanyonCarver {
let chunk_min_x = chunk.x << 4;
let chunk_min_z = chunk.z << 4;
let min_x_index = ((x - horizontal_radius).floor() as i32 - chunk_min_x - 1).max(0);
let max_x_index = ((x + horizontal_radius).floor() as i32 - chunk_min_x).min(15);
let x_index_min = ((x - horizontal_radius).floor() as i32 - chunk_min_x - 1).max(0);
let x_index_max = ((x + horizontal_radius).floor() as i32 - chunk_min_x).min(15);
let min_y = ((y - vertical_radius).floor() as i32 - 1).max(chunk.bottom_y() as i32 + 1);
let protected_blocks_on_top = 7;
let max_y = ((y + vertical_radius).floor() as i32 + 1)
.min(chunk.bottom_y() as i32 + chunk.height() as i32 - 1 - protected_blocks_on_top);
let min_z_index = ((z - horizontal_radius).floor() as i32 - chunk_min_z - 1).max(0);
let max_z_index = ((z + horizontal_radius).floor() as i32 - chunk_min_z).min(15);
let z_index_min = ((z - horizontal_radius).floor() as i32 - chunk_min_z - 1).max(0);
let z_index_max = ((z + horizontal_radius).floor() as i32 - chunk_min_z).min(15);
for x_index in min_x_index..=max_x_index {
for x_index in x_index_min..=x_index_max {
let world_x = chunk_min_x + x_index;
let xd = (world_x as f64 + 0.5 - x) / horizontal_radius;
for z_index in min_z_index..=max_z_index {
for z_index in z_index_min..=z_index_max {
let world_z = chunk_min_z + z_index;
let zd = (world_z as f64 + 0.5 - z) / horizontal_radius;
@ -247,7 +242,7 @@ impl CanyonCarver {
for world_y in (min_y + 1..=max_y).rev() {
let yd = (world_y as f64 - 0.5 - y) / vertical_radius;
if !self.should_skip(
if !Self::should_skip(
width_factor_per_height,
xd,
yd,
@ -266,7 +261,6 @@ impl CanyonCarver {
}
fn should_skip(
&self,
width_factor_per_height: &[f32],
xd: f64,
yd: f64,

View File

@ -289,22 +289,22 @@ impl CaveCarver {
let chunk_min_x = chunk.x << 4;
let chunk_min_z = chunk.z << 4;
let min_x_idx = ((x - horizontal_radius).floor() as i32 - chunk_min_x - 1).max(0);
let max_x_idx = ((x + horizontal_radius).floor() as i32 - chunk_min_x).min(15);
let x_index_min = ((x - horizontal_radius).floor() as i32 - chunk_min_x - 1).max(0);
let x_index_max = ((x + horizontal_radius).floor() as i32 - chunk_min_x).min(15);
let min_y = ((y - vertical_radius).floor() as i32 - 1).max(chunk.bottom_y() as i32 + 1);
let protected_blocks_on_top = 7;
let max_y = ((y + vertical_radius).floor() as i32 + 1)
.min(chunk.bottom_y() as i32 + chunk.height() as i32 - 1 - protected_blocks_on_top);
let min_z_idx = ((z - horizontal_radius).floor() as i32 - chunk_min_z - 1).max(0);
let max_z_idx = ((z + horizontal_radius).floor() as i32 - chunk_min_z).min(15);
let z_index_min = ((z - horizontal_radius).floor() as i32 - chunk_min_z - 1).max(0);
let z_index_max = ((z + horizontal_radius).floor() as i32 - chunk_min_z).min(15);
for x_index in min_x_idx..=max_x_idx {
for x_index in x_index_min..=x_index_max {
let world_x = chunk_min_x + x_index;
let xd = (world_x as f64 + 0.5 - x) / horizontal_radius;
for z_index in min_z_idx..=max_z_idx {
for z_index in z_index_min..=z_index_max {
let world_z = chunk_min_z + z_index;
let zd = (world_z as f64 + 0.5 - z) / horizontal_radius;

View File

@ -39,7 +39,7 @@ pub fn carve(chunk: &mut ProtoChunk, generator: &VanillaGenerator) {
&[]
};
let _cave_carver = cave::CaveCarver;
//let _cave_carver = cave::CaveCarver;
let canyon_carver = canyon::CanyonCarver;
for dx in -radius..=radius {

View File

@ -145,6 +145,7 @@ pub enum ConfiguredFeature {
impl ConfiguredFeature {
#[expect(clippy::too_many_arguments)]
#[expect(clippy::too_many_lines)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
@ -193,7 +194,7 @@ impl ConfiguredFeature {
pos,
),
Self::PointedDripstone(feature) => feature.generate(chunk, random, pos),
Self::CoralMushroom(feature) => feature.generate(
Self::CoralMushroom(_feature) => CoralMushroomFeature::generate(
chunk,
block_registry,
min_y,
@ -202,7 +203,7 @@ impl ConfiguredFeature {
random,
pos,
),
Self::CoralTree(feature) => feature.generate(
Self::CoralTree(_feature) => CoralTreeFeature::generate(
chunk,
block_registry,
min_y,
@ -211,7 +212,7 @@ impl ConfiguredFeature {
random,
pos,
),
Self::CoralClaw(feature) => feature.generate(
Self::CoralClaw(_feature) => CoralClawFeature::generate(
chunk,
block_registry,
min_y,
@ -220,7 +221,7 @@ impl ConfiguredFeature {
random,
pos,
),
Self::EndPlatform(feature) => feature.generate(
Self::EndPlatform(_feature) => EndPlatformFeature::generate(
chunk,
block_registry,
min_y,
@ -240,7 +241,9 @@ impl ConfiguredFeature {
),
Self::SpringFeature(feature) => feature.generate(block_registry, chunk, random, pos),
Self::SimpleBlock(feature) => feature.generate(block_registry, chunk, random, pos),
Self::Flower(feature) => feature.generate(
Self::RandomPatch(feature)
| Self::Flower(feature)
| Self::NoBonemealFlower(feature) => feature.generate(
chunk,
block_registry,
min_y,
@ -249,17 +252,8 @@ impl ConfiguredFeature {
random,
pos,
),
Self::NoBonemealFlower(feature) => feature.generate(
chunk,
block_registry,
min_y,
height,
feature_name,
random,
pos,
),
Self::DesertWell(feature) => {
feature.generate(chunk, min_y, height, feature_name, random, pos)
Self::DesertWell(_feature) => {
DesertWellFeature::generate(chunk, min_y, height, feature_name, random, pos)
}
Self::Fossil(feature) => feature.generate(chunk, min_y, height, random, pos),
Self::Bamboo(feature) => feature.generate(
@ -280,15 +274,6 @@ impl ConfiguredFeature {
random,
pos,
),
Self::RandomPatch(feature) => feature.generate(
chunk,
block_registry,
min_y,
height,
feature_name,
random,
pos,
),
Self::RandomBooleanSelector(feature) => feature.generate(
chunk,
block_registry,
@ -325,7 +310,7 @@ impl ConfiguredFeature {
random,
pos,
),
Self::Vines(feature) => feature.generate(
Self::Vines(_feature) => VinesFeature::generate(
chunk,
block_registry,
min_y,
@ -355,8 +340,8 @@ impl ConfiguredFeature {
random,
pos,
),
Self::Kelp(feature) => {
feature.generate(chunk, min_y, height, feature_name, random, pos)
Self::Kelp(_feature) => {
KelpFeature::generate(chunk, min_y, height, feature_name, random, pos)
}
Self::Ore(feature) => feature.generate(
chunk,
@ -376,12 +361,12 @@ impl ConfiguredFeature {
random,
pos,
),
Self::MonsterRoom(feature) => {
feature.generate(chunk, min_y, height, feature_name, random, pos)
Self::MonsterRoom(_feature) => {
DungeonFeature::generate(chunk, min_y, height, feature_name, random, pos)
}
Self::BlueIce(feature) => feature.generate(chunk, random, pos),
Self::GlowstoneBlob(feature) => {
feature.generate(chunk, min_y, height, feature_name, random, pos)
Self::BlueIce(_feature) => BlueIceFeature::generate(chunk, random, pos),
Self::GlowstoneBlob(_feature) => {
GlowstoneBlobFeature::generate(chunk, min_y, height, feature_name, random, pos)
}
Self::Disk(feature) => feature.generate(
chunk,
@ -402,22 +387,22 @@ impl ConfiguredFeature {
random,
pos,
),
Self::BasaltPillar(feature) => feature.generate(chunk, random, pos),
Self::BasaltPillar(_feature) => BasaltPillarFeature::generate(chunk, random, pos),
Self::ForestRock(feature) => feature.generate(chunk, random, pos),
Self::FreezeTopLayer(feature) => {
feature.generate(chunk, min_y, height, feature_name, random, pos)
Self::FreezeTopLayer(_feature) => {
FreezeTopLayerFeature::generate(chunk, min_y, height, feature_name, random, pos)
}
Self::IceSpike(feature) => {
feature.generate(chunk, min_y, height, feature_name, random, pos)
Self::IceSpike(_feature) => {
IceSpikeFeature::generate(chunk, min_y, height, feature_name, random, pos)
}
Self::Iceberg(feature) => {
feature.generate(chunk, min_y, height, feature_name, random, pos)
}
Self::ChorusPlant(feature) => {
feature.generate(chunk, min_y, height, feature_name, random, pos)
Self::ChorusPlant(_feature) => {
ChorusPlantFeature::generate(chunk, min_y, height, feature_name, random, pos)
}
Self::EndIsland(feature) => {
feature.generate(chunk, min_y, height, feature_name, random, pos)
Self::EndIsland(_feature) => {
EndIslandFeature::generate(chunk, min_y, height, feature_name, random, pos)
}
Self::SculkPatch(feature) => feature.generate(block_registry, chunk, random, pos),
Self::RootSystem(feature) => feature.generate(

View File

@ -146,7 +146,7 @@ fn is_air_or_lava_ocean<T: GenerationCache>(chunk: &T, pos: BlockPos) -> bool {
is_air(state) || (state.to_block_id() == Block::LAVA.id && pos.0.y <= LAVA_SEA_LEVEL)
}
fn is_cannot_place_on(id: BlockId) -> bool {
const fn is_cannot_place_on(id: BlockId) -> bool {
matches!(
id,
BlockId::LAVA

View File

@ -6,11 +6,10 @@ use pumpkin_util::{
use crate::generation::proto_chunk::GenerationCache;
pub struct BasaltPillarFeature {}
pub struct BasaltPillarFeature;
impl BasaltPillarFeature {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
random: &mut RandomGenerator,
pos: BlockPos,

View File

@ -69,7 +69,7 @@ impl BlockColumnFeature {
}
let layer = &self.layers[l];
for _n in 0..*m {
let state = layer.provider.get(random, mutable);
let state = layer.provider.get(random, mutable, chunk, block_registry);
chunk.set_block_state(&mutable.0, state);
mutable = mutable.offset(self.direction.to_offset());
}

View File

@ -1,3 +1 @@
pub struct BlockPileFeature {
// TODO
}
pub struct BlockPileFeature;

View File

@ -8,11 +8,10 @@ use crate::generation::proto_chunk::GenerationCache;
const SEA_LEVEL: i32 = 63; // TODO: use getSeaLevel() instead of hardcoding
pub struct BlueIceFeature {}
pub struct BlueIceFeature;
impl BlueIceFeature {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
random: &mut RandomGenerator,
pos: BlockPos,

View File

@ -1,3 +1 @@
pub struct BonusChestFeature {
// TODO
}
pub struct BonusChestFeature; // TODO

View File

@ -13,11 +13,10 @@ use pumpkin_util::{
use crate::generation::proto_chunk::GenerationCache;
pub struct ChorusPlantFeature {}
pub struct ChorusPlantFeature;
impl ChorusPlantFeature {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_min_y: i8,
_height: u16,

View File

@ -12,7 +12,6 @@ pub struct CoralClawFeature;
impl CoralClawFeature {
#[allow(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
block_registry: &dyn WorldPortalExt,
_min_y: i8,
@ -36,27 +35,26 @@ impl CoralClawFeature {
let j = random.next_bounded_i32(2) + 1;
pos = pos.offset(direction2.to_offset());
let direction3;
let k;
let branch_direction;
if direction2 == direction {
direction3 = direction;
k = random.next_bounded_i32(3) + 2;
let k = if direction2 == direction {
branch_direction = direction;
random.next_bounded_i32(3) + 2
} else {
pos = pos.up();
//let _directions = [direction2, BlockDirection::Up];
direction3 = direction2; // TODO: make this random
k = random.next_bounded_i32(3) + 5;
}
branch_direction = direction2; // TODO: make this random
random.next_bounded_i32(3) + 5
};
for _ in 0..j {
if !CoralFeature::generate_coral_piece(chunk, block_registry, random, block, pos) {
break;
}
pos = pos.offset(direction3.to_offset());
pos = pos.offset(branch_direction.to_offset());
}
pos = pos.offset(direction3.to_offset());
pos = pos.offset(branch_direction.to_offset());
pos = pos.up();
for _l in 0..k {

View File

@ -12,7 +12,6 @@ pub struct CoralMushroomFeature;
impl CoralMushroomFeature {
#[allow(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
block_registry: &dyn WorldPortalExt,
_min_y: i8,
@ -51,9 +50,7 @@ impl CoralMushroomFeature {
block,
pos,
))
{
continue;
}
{}
}
}
}

View File

@ -12,7 +12,6 @@ pub struct CoralTreeFeature;
impl CoralTreeFeature {
#[allow(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
block_registry: &dyn WorldPortalExt,
_min_y: i8,

View File

@ -1,3 +1 @@
pub struct DeltaFeatureFeature {
// TODO
}
pub struct DeltaFeatureFeature; // TODO

View File

@ -14,8 +14,8 @@ impl DesertWellFeature {
const SLAB: Block = Block::SANDSTONE_SLAB;
const WALL: Block = Block::SANDSTONE;
#[expect(clippy::too_many_lines)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_min_y: i8,
_height: u16,
@ -23,12 +23,13 @@ impl DesertWellFeature {
_random: &mut RandomGenerator,
pos: BlockPos,
) -> bool {
const CAN_GENERATE: Block = Block::SAND;
let mut block_pos = pos.up();
while chunk.is_air(&block_pos.0) && block_pos.0.y > chunk.bottom_y() as i32 + 2 {
block_pos = block_pos.down();
}
let block = GenerationCache::get_block_state(chunk, &pos.0).to_block_id();
const CAN_GENERATE: Block = Block::SAND;
if CAN_GENERATE.id != block {
return false;
}

View File

@ -1,3 +1 @@
pub struct DripstoneClusterFeature {
// TODO
}
pub struct DripstoneClusterFeature; // TODO

View File

@ -1,3 +1 @@
pub struct LargeDripstoneFeature {
// TODO
}
pub struct LargeDripstoneFeature; // TODO

View File

@ -6,10 +6,10 @@ use pumpkin_util::{
};
pub struct SmallDripstoneFeature {
pub chance_of_taller_dripstone: f32,
pub chance_of_directional_spread: f32,
pub chance_of_spread_radius2: f32,
pub chance_of_spread_radius3: f32,
pub taller_dripstone: f32,
pub directional_spread: f32,
pub spread_radius2: f32,
pub spread_radius3: f32,
}
impl SmallDripstoneFeature {
@ -62,17 +62,17 @@ impl SmallDripstoneFeature {
) {
super::gen_dripstone(chunk, pos);
for dir in BlockDirection::horizontal() {
if random.next_f32() > self.chance_of_directional_spread {
if random.next_f32() > self.directional_spread {
continue;
}
let pos = pos.offset(dir.to_offset());
super::gen_dripstone(chunk, pos);
if random.next_f32() > self.chance_of_spread_radius2 {
if random.next_f32() > self.spread_radius2 {
continue;
}
let pos = pos.offset(BlockDirection::random(random).to_offset());
super::gen_dripstone(chunk, pos);
if random.next_f32() > self.chance_of_spread_radius3 {
if random.next_f32() > self.spread_radius3 {
continue;
}
let pos = pos.offset(BlockDirection::random(random).to_offset());

View File

@ -1,3 +1 @@
pub struct EndGatewayFeature {
// TODO
}
pub struct EndGatewayFeature; // TODO

View File

@ -6,11 +6,10 @@ use pumpkin_util::{
use crate::generation::proto_chunk::GenerationCache;
pub struct EndIslandFeature {}
pub struct EndIslandFeature;
impl EndIslandFeature {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_min_y: i8,
_height: u16,

View File

@ -10,9 +10,7 @@ use crate::world::WorldPortalExt;
pub struct EndPlatformFeature;
impl EndPlatformFeature {
#[expect(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_block_registry: &dyn WorldPortalExt,
_min_y: i8,

View File

@ -133,16 +133,16 @@ impl EndSpikeFeature {
for dx in -2i32..=2 {
for dz in -2i32..=2 {
// Only place on perimeter walls and the top frame
let on_x_wall = dx.abs() == 2;
let on_z_wall = dz.abs() == 2;
let x_wall_present = dx.abs() == 2;
let z_wall_present = dz.abs() == 2;
let on_top = dy == 3;
if !on_x_wall && !on_z_wall && !on_top {
if !x_wall_present && !z_wall_present && !on_top {
continue;
}
// Connectivity rules
let x_edge = on_x_wall || on_top;
let z_edge = on_z_wall || on_top;
let x_edge = x_wall_present || on_top;
let z_edge = z_wall_present || on_top;
let mut props = OakFenceLikeProperties::default(&Block::IRON_BARS);
props.north = x_edge && dz != 2;

View File

@ -8,7 +8,6 @@ pub struct FallenTreeFeature {
impl FallenTreeFeature {
pub const fn generate(
&self,
_chunk: &mut ProtoChunk,
_min_y: i8,
_height: u16,
@ -19,12 +18,12 @@ impl FallenTreeFeature {
false
}
fn gen_stump(&self, chunk: &mut ProtoChunk, random: &mut RandomGenerator, pos: BlockPos) {
chunk.set_block_state(
pos.0.x,
pos.0.y,
pos.0.z,
self.trunk_provider.get(random, pos),
);
}
// fn gen_stump(&self, chunk: &mut ProtoChunk, random: &mut RandomGenerator, pos: BlockPos) {
// // chunk.set_block_state(
// // pos.0.x,
// // pos.0.y,
// // pos.0.z,
// // self.trunk_provider.get(random, pos, chunk),
// // );
// }
}

View File

@ -1,3 +1 @@
pub struct FillLayerFeature {
// TODO
}
pub struct FillLayerFeature; // TODO

View File

@ -1,4 +1,4 @@
use pumpkin_data::{Block, BlockState, Rotation, tag};
use pumpkin_data::{Block, BlockState, Mirror, Rotation, tag};
use pumpkin_util::{
HeightMap,
math::{block_box::BlockBox, position::BlockPos, vector3::Vector3},
@ -190,8 +190,7 @@ fn place_fossil_template<T: GenerationCache>(
continue;
}
if let Some(state) =
BlockStateResolver::resolve(palette_entry, rotation, Default::default())
if let Some(state) = BlockStateResolver::resolve(palette_entry, rotation, Mirror::default())
{
chunk.set_block_state(&world_pos, processor.process(state));
}

View File

@ -6,11 +6,10 @@ use pumpkin_util::random::RandomGenerator;
const SEA_LEVEL: i32 = 63; // TODO: getSeaLevel() from the worldgen context instead of hardcoding
pub struct FreezeTopLayerFeature {}
pub struct FreezeTopLayerFeature;
impl FreezeTopLayerFeature {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_min_y: i8,
_height: u16,

View File

@ -74,7 +74,6 @@ pub struct GeodeFeature {
impl GeodeFeature {
fn safe_set_block<T: GenerationCache>(
&self,
chunk: &mut T,
pos: BlockPos,
state: &'static BlockState,
@ -90,18 +89,17 @@ impl GeodeFeature {
let state = codec.get_state();
// Obtain the block corresponding to this state id
let block = Block::from_state_id(state.id);
if let Some(props) = block.properties(state.id) {
props.to_props().iter().any(|(k, _)| *k == property)
} else {
false
}
block
.properties(state.id)
.is_some_and(|props| props.to_props().iter().any(|(k, _)| *k == property))
}
#[allow(clippy::too_many_arguments)]
#[allow(clippy::too_many_lines)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_block_registry: &dyn WorldPortalExt,
block_registry: &dyn WorldPortalExt,
_min_y: i8,
_height: u16,
_feature_name: pumpkin_data::placed_feature::PlacedFeature,
@ -263,25 +261,35 @@ impl GeodeFeature {
&& dist_sum_shell < inner_air
{
// Carve crack
self.safe_set_block(
Self::safe_set_block(
chunk,
point_inside,
BlockStateId::AIR.to_state(),
&can_replace_pred,
);
} else if dist_sum_shell >= inner_air {
let state = self.filling_provider.get(random, point_inside);
self.safe_set_block(chunk, point_inside, state, &can_replace_pred);
let state =
self.filling_provider
.get(random, point_inside, chunk, block_registry);
Self::safe_set_block(chunk, point_inside, state, &can_replace_pred);
} else if dist_sum_shell >= innermost_block_layer {
let use_alternate = random.next_f32() < self.use_alternate_layer0_chance as f32;
if use_alternate {
let state = self
.alternate_inner_layer_provider
.get(random, point_inside);
self.safe_set_block(chunk, point_inside, state, &can_replace_pred);
let state = self.alternate_inner_layer_provider.get(
random,
point_inside,
chunk,
block_registry,
);
Self::safe_set_block(chunk, point_inside, state, &can_replace_pred);
} else {
let state = self.inner_layer_provider.get(random, point_inside);
self.safe_set_block(chunk, point_inside, state, &can_replace_pred);
let state = self.inner_layer_provider.get(
random,
point_inside,
chunk,
block_registry,
);
Self::safe_set_block(chunk, point_inside, state, &can_replace_pred);
}
if (!self.placements_require_layer0_alternate || use_alternate)
&& random.next_f32() < self.use_potential_placements_chance as f32
@ -289,11 +297,15 @@ impl GeodeFeature {
potential_crystal_placements.push(point_inside);
}
} else if dist_sum_shell >= inner_crust {
let state = self.middle_layer_provider.get(random, point_inside);
self.safe_set_block(chunk, point_inside, state, &can_replace_pred);
let state =
self.middle_layer_provider
.get(random, point_inside, chunk, block_registry);
Self::safe_set_block(chunk, point_inside, state, &can_replace_pred);
} else if dist_sum_shell >= outer_crust {
let state = self.outer_layer_provider.get(random, point_inside);
self.safe_set_block(chunk, point_inside, state, &can_replace_pred);
let state =
self.outer_layer_provider
.get(random, point_inside, chunk, block_registry);
Self::safe_set_block(chunk, point_inside, state, &can_replace_pred);
}
}
}
@ -344,7 +356,7 @@ impl GeodeFeature {
}
let final_state = final_codec.get_state();
self.safe_set_block(chunk, place_pos, final_state, &can_replace_pred);
Self::safe_set_block(chunk, place_pos, final_state, &can_replace_pred);
// Only place one crystal per budding block per geode gen
break;

View File

@ -6,11 +6,10 @@ use pumpkin_util::{
use crate::generation::proto_chunk::GenerationCache;
pub struct GlowstoneBlobFeature {}
pub struct GlowstoneBlobFeature;
impl GlowstoneBlobFeature {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_min_y: i8,
_height: u16,

View File

@ -1,3 +1 @@
pub struct HugeBrownMushroomFeature {
// TODO
}
pub struct HugeBrownMushroomFeature; // TODO

View File

@ -1,3 +1 @@
pub struct HugeFungusFeature {
// TODO
}
pub struct HugeFungusFeature; // TODO

View File

@ -1,3 +1 @@
pub struct HugeRedMushroomFeature {
// TODO
}
pub struct HugeRedMushroomFeature; // TODO

View File

@ -6,11 +6,10 @@ use pumpkin_util::{
use crate::generation::proto_chunk::GenerationCache;
pub struct IceSpikeFeature {}
pub struct IceSpikeFeature;
impl IceSpikeFeature {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_min_y: i8,
_height: u16,

View File

@ -15,6 +15,7 @@ pub struct IcebergFeature {
}
impl IcebergFeature {
#[expect(clippy::too_many_lines)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
@ -52,12 +53,12 @@ impl IcebergFeature {
for zo in -a..a {
for y_off in 0..over_water_height {
let radius = if is_ellipse {
self.height_dependent_radius_ellipse(y_off, over_water_height, width)
Self::height_dependent_radius_ellipse(y_off, over_water_height, width)
} else {
self.height_dependent_radius_round(random, y_off, over_water_height, width)
Self::height_dependent_radius_round(random, y_off, over_water_height, width)
};
if is_ellipse || xo < radius {
self.generate_iceberg_block(
Self::generate_iceberg_block(
chunk,
random,
&origin,
@ -78,7 +79,7 @@ impl IcebergFeature {
}
}
self.smooth(
Self::smooth(
chunk,
&origin,
width,
@ -99,14 +100,14 @@ impl IcebergFeature {
} else {
a
};
let radius = self.height_dependent_radius_steep(
let radius = Self::height_dependent_radius_steep(
random,
-y_off,
under_water_height,
width,
);
if xo < radius {
self.generate_iceberg_block(
Self::generate_iceberg_block(
chunk,
random,
&origin,
@ -133,7 +134,7 @@ impl IcebergFeature {
random.next_f64() > 0.7
};
if do_cut_out {
self.generate_cut_out(
Self::generate_cut_out(
chunk,
random,
width,
@ -149,9 +150,8 @@ impl IcebergFeature {
true
}
#[expect(clippy::too_many_arguments)]
#[expect(clippy::too_many_arguments, clippy::useless_let_if_seq)]
fn generate_cut_out<T: GenerationCache>(
&self,
chunk: &mut T,
random: &mut RandomGenerator,
width: i32,
@ -165,16 +165,17 @@ impl IcebergFeature {
let random_sign_x: i32 = if random.next_bool() { -1 } else { 1 };
let random_sign_z: i32 = if random.next_bool() { -1 } else { 1 };
let mut x_off = random.next_bounded_i32((width / 2 - 2).max(1));
if random.next_bool() {
x_off = width / 2 + 1 - random.next_bounded_i32((width - width / 2 - 1).max(1));
}
let mut z_off = random.next_bounded_i32((width / 2 - 2).max(1));
if random.next_bool() {
z_off = width / 2 + 1 - random.next_bounded_i32((width - width / 2 - 1).max(1));
}
let mut x_off = if random.next_bool() {
width / 2 + 1 - random.next_bounded_i32((width - width / 2 - 1).max(1))
} else {
random.next_bounded_i32((width / 2 - 2).max(1))
};
let mut z_off = if random.next_bool() {
width / 2 + 1 - random.next_bounded_i32((width - width / 2 - 1).max(1))
} else {
random.next_bounded_i32((width / 2 - 2).max(1))
};
if is_ellipse {
let v = random.next_bounded_i32((shape_ellipse_a - 5).max(1));
x_off = v;
@ -190,8 +191,8 @@ impl IcebergFeature {
// Above-water carve
for y_off in 0..(height - 3) {
let radius = self.height_dependent_radius_round(random, y_off, height, width);
self.carve(
let radius = Self::height_dependent_radius_round(random, y_off, height, width);
Self::carve(
chunk,
radius,
y_off,
@ -207,8 +208,8 @@ impl IcebergFeature {
// Below-water carve
let mut y_off = -1i32;
while y_off > -height + random.next_bounded_i32(5) {
let radius = self.height_dependent_radius_steep(random, -y_off, height, width);
self.carve(
let radius = Self::height_dependent_radius_steep(random, -y_off, height, width);
Self::carve(
chunk,
radius,
y_off,
@ -225,7 +226,6 @@ impl IcebergFeature {
#[expect(clippy::too_many_arguments)]
fn carve<T: GenerationCache>(
&self,
chunk: &mut T,
radius: i32,
y_off: i32,
@ -241,7 +241,7 @@ impl IcebergFeature {
for xo in -a..a {
for zo in -a..a {
let signed_dist = self.signed_distance_ellipse(
let signed_dist = Self::signed_distance_ellipse(
xo,
zo,
local_origin.x,
@ -259,7 +259,7 @@ impl IcebergFeature {
chunk.set_block_state(&pos, Block::WATER.default_state);
} else {
chunk.set_block_state(&pos, Block::AIR.default_state);
self.remove_floating_snow_layer(chunk, &pos);
Self::remove_floating_snow_layer(chunk, &pos);
}
}
}
@ -267,7 +267,7 @@ impl IcebergFeature {
}
}
fn remove_floating_snow_layer<T: GenerationCache>(&self, chunk: &mut T, pos: &Vector3<i32>) {
fn remove_floating_snow_layer<T: GenerationCache>(chunk: &mut T, pos: &Vector3<i32>) {
let above = pos.add(&Vector3::new(0, 1, 0));
let raw = GenerationCache::get_block_state(chunk, &above);
if raw.to_block_id() == Block::SNOW.id {
@ -277,7 +277,6 @@ impl IcebergFeature {
#[expect(clippy::too_many_arguments)]
fn generate_iceberg_block<T: GenerationCache>(
&self,
chunk: &mut T,
random: &mut RandomGenerator,
origin: &Vector3<i32>,
@ -294,17 +293,17 @@ impl IcebergFeature {
main_block: &'static BlockState,
) {
let signed_dist = if is_ellipse {
self.signed_distance_ellipse(
Self::signed_distance_ellipse(
xo,
zo,
0,
0,
a,
self.get_ellipse_c(y_off, height, shape_ellipse_c),
Self::get_ellipse_c(y_off, height, shape_ellipse_c),
shape_angle,
)
} else {
self.signed_distance_circle(xo, zo, 0, 0, radius, random)
Self::signed_distance_circle(xo, zo, 0, 0, radius, random)
};
if signed_dist < 0.0 {
@ -317,7 +316,7 @@ impl IcebergFeature {
if signed_dist > compare_val && random.next_f64() > 0.9 {
return;
}
self.set_iceberg_block(
Self::set_iceberg_block(
chunk,
random,
&pos,
@ -332,7 +331,6 @@ impl IcebergFeature {
#[expect(clippy::too_many_arguments)]
fn set_iceberg_block<T: GenerationCache>(
&self,
chunk: &mut T,
random: &mut RandomGenerator,
pos: &Vector3<i32>,
@ -362,7 +360,6 @@ impl IcebergFeature {
}
fn smooth<T: GenerationCache>(
&self,
chunk: &mut T,
origin: &Vector3<i32>,
width: i32,
@ -413,16 +410,14 @@ impl IcebergFeature {
}
}
const fn get_ellipse_c(&self, y_off: i32, height: i32, shape_ellipse_c: i32) -> i32 {
let mut c = shape_ellipse_c;
const fn get_ellipse_c(y_off: i32, height: i32, shape_ellipse_c: i32) -> i32 {
if y_off > 0 && height - y_off <= 3 {
c = shape_ellipse_c - (4 - (height - y_off));
return shape_ellipse_c - (4 - (height - y_off));
}
c
shape_ellipse_c
}
fn signed_distance_circle(
&self,
xo: i32,
zo: i32,
ox: i32,
@ -435,9 +430,7 @@ impl IcebergFeature {
- (radius as f64).powi(2)
}
#[expect(clippy::too_many_arguments)]
fn signed_distance_ellipse(
&self,
xo: i32,
zo: i32,
ox: i32,
@ -455,7 +448,6 @@ impl IcebergFeature {
}
fn height_dependent_radius_round(
&self,
random: &mut RandomGenerator,
y_off: i32,
height: i32,
@ -463,26 +455,27 @@ impl IcebergFeature {
) -> i32 {
let k = 3.5f32 - random.next_f32();
let y_off_sq = (y_off as f64).powi(2) as f32;
let mut scale = (1.0f32 - y_off_sq / (height as f32 * k)) * width as f32;
if height > 15 + random.next_bounded_i32(5) {
let scale = if height > 15 + random.next_bounded_i32(5) {
let temp_y_off = if y_off < 3 + random.next_bounded_i32(6) {
y_off / 2
} else {
y_off
};
scale = (1.0f32 - temp_y_off as f32 / (height as f32 * k * 0.4f32)) * width as f32;
}
(1.0f32 - temp_y_off as f32 / (height as f32 * k * 0.4f32)) * width as f32
} else {
(1.0f32 - y_off_sq / (height as f32 * k)) * width as f32
};
(scale / 2.0f32).ceil() as i32
}
fn height_dependent_radius_ellipse(&self, y_off: i32, height: i32, width: i32) -> i32 {
fn height_dependent_radius_ellipse(y_off: i32, height: i32, width: i32) -> i32 {
let y_off_sq = (y_off as f64).powi(2) as f32;
let scale = (1.0f32 - y_off_sq / height as f32) * width as f32;
(scale / 2.0f32).ceil() as i32
}
fn height_dependent_radius_steep(
&self,
random: &mut RandomGenerator,
y_off: i32,
height: i32,
@ -493,7 +486,7 @@ impl IcebergFeature {
(scale / 2.0f32).ceil() as i32
}
fn is_iceberg_state(id: BlockId) -> bool {
const fn is_iceberg_state(id: BlockId) -> bool {
matches!(
id,
BlockId::PACKED_ICE | BlockId::SNOW_BLOCK | BlockId::BLUE_ICE

View File

@ -5,14 +5,11 @@ use pumpkin_util::{
random::{RandomGenerator, RandomImpl},
};
pub struct KelpFeature {
// No extra parameters
}
pub struct KelpFeature;
impl KelpFeature {
#[allow(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_min_y: i8,
_height: u16,

View File

@ -13,6 +13,7 @@ pub struct LakeFeature {
}
impl LakeFeature {
#[expect(clippy::too_many_lines)]
pub fn generate<T: GenerationCache>(
&self,
block_registry: &dyn WorldPortalExt,
@ -92,7 +93,7 @@ impl LakeFeature {
let place_pos = origin.add(xx as i32, yyx as i32, zz as i32);
let current_state =
GenerationCache::get_block_state(chunk, &place_pos.0).to_state();
if self.can_replace_block(current_state) {
if Self::can_replace_block(current_state) {
let place_air = yyx >= 4;
chunk.set_block_state(
&place_pos.0,
@ -156,7 +157,7 @@ impl LakeFeature {
{
let current_state =
GenerationCache::get_block_state(chunk, &freeze_pos.0).to_state();
if self.can_replace_block(current_state) {
if Self::can_replace_block(current_state) {
chunk.set_block_state(&freeze_pos.0, Block::ICE.default_state);
}
}
@ -167,7 +168,7 @@ impl LakeFeature {
true
}
fn can_replace_block(&self, state: &BlockState) -> bool {
fn can_replace_block(state: &BlockState) -> bool {
!state
.id
.to_block_id()

View File

@ -17,12 +17,12 @@ const DUNGEON_MOBS: [&str; 4] = [
"minecraft:spider",
];
pub struct DungeonFeature {}
pub struct DungeonFeature;
impl DungeonFeature {
/// Generate a monster room (dungeon) at `pos`.
#[expect(clippy::too_many_lines)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_min_y: i8,
_height: u16,
@ -143,7 +143,7 @@ impl DungeonFeature {
.copied();
// Build the chest state: face away from the wall.
let chest_state = if let Some(dir) = facing_dir {
let chest_state = facing_dir.map_or(Block::CHEST.default_state, |dir| {
use pumpkin_data::block_properties::{
BlockProperties, ChestLikeProperties,
};
@ -151,9 +151,7 @@ impl DungeonFeature {
props.facing = dir.opposite();
let state_id = props.to_state_id(&Block::CHEST);
pumpkin_data::BlockState::from_id(state_id)
} else {
Block::CHEST.default_state
};
});
chunk.set_block_state(&chest_pos, chest_state);

View File

@ -1,3 +1 @@
pub struct MultifaceGrowthFeature {
// TODO
}
pub struct MultifaceGrowthFeature; // TODO

View File

@ -52,7 +52,7 @@ impl NetherForestVegetationFeature {
- random.next_bounded_i32(self.spread_width),
);
let nether_state = self.state_provider.get(random, pos);
let nether_state = self.state_provider.get(random, pos, chunk, block_registry);
let nether_block = Block::from_state_id(nether_state.id);
// Only place if the spot is air, above the bottom, and the block can survive here.

View File

@ -41,7 +41,6 @@ impl OreFeature {
let h = pos.0.z as f64 + f.cos() as f64 * g as f64; // Use f.cos() for Math.cos(f)
let j = pos.0.z as f64 - f.cos() as f64 * g as f64;
let _k = 2; // This variable 'k' from Java seems unused
let l = pos.0.y as f64 + random.next_bounded_i32(3) as f64 - 2.0;
let m = pos.0.y as f64 + random.next_bounded_i32(3) as f64 - 2.0;
@ -63,6 +62,7 @@ impl OreFeature {
}
#[expect(clippy::too_many_arguments)]
#[expect(clippy::too_many_lines)]
fn generate_vein_part<T: GenerationCache>(
&self,
chunk: &mut T,

View File

@ -1,3 +1 @@
pub struct ReplaceSingleBlockFeature {
// TODO
}
pub struct ReplaceSingleBlockFeature; // TODO

View File

@ -32,7 +32,7 @@ impl SculkPatchFeature {
random: &mut RandomGenerator,
pos: BlockPos,
) -> bool {
if !self.can_spread_from(chunk, pos) {
if !Self::can_spread_from(chunk, pos) {
return false;
}
@ -132,7 +132,7 @@ impl SculkPatchFeature {
true
}
fn can_spread_from<T: GenerationCache>(&self, chunk: &T, pos: BlockPos) -> bool {
fn can_spread_from<T: GenerationCache>(chunk: &T, pos: BlockPos) -> bool {
let state = GenerationCache::get_block_state(chunk, &pos.0);
let block_id = state.to_block_id();
if is_sculk_behaviour(block_id) {

View File

@ -20,7 +20,7 @@ impl SimpleBlockFeature {
random: &mut RandomGenerator,
pos: BlockPos,
) -> bool {
let state = self.to_place.get(random, pos);
let state = self.to_place.get(random, pos, chunk, block_registry);
let block = Block::from_state_id(state.id);
let block_accessor: &dyn BlockAccessor = chunk;
if !block_registry.can_place_at(block, state, block_accessor, &pos) {

View File

@ -1 +1 @@
pub struct AlterGroundTreeDecorator {}
pub struct AlterGroundTreeDecorator;

View File

@ -1 +1 @@
pub struct AttachedToLeavesTreeDecorator {}
pub struct AttachedToLeavesTreeDecorator;

View File

@ -4,8 +4,8 @@ use pumpkin_util::{
random::{RandomGenerator, RandomImpl},
};
use crate::generation::block_state_provider::BlockStateProvider;
use crate::generation::proto_chunk::GenerationCache;
use crate::{generation::block_state_provider::BlockStateProvider, world::WorldPortalExt};
pub struct AttachedToLogsTreeDecorator {
pub probability: f32,
@ -17,6 +17,7 @@ impl AttachedToLogsTreeDecorator {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
block_registry: &dyn WorldPortalExt,
random: &mut RandomGenerator,
log_positions: &[BlockPos],
) {
@ -31,7 +32,10 @@ impl AttachedToLogsTreeDecorator {
{
continue;
}
chunk.set_block_state(&pos.0, self.block_provider.get(random, pos));
chunk.set_block_state(
&pos.0,
self.block_provider.get(random, pos, chunk, block_registry),
);
}
}
}

View File

@ -1 +1 @@
pub struct CocoaTreeDecorator {}
pub struct CocoaTreeDecorator;

View File

@ -1 +1 @@
pub struct CreakingHeartTreeDecorator {}
pub struct CreakingHeartTreeDecorator;

View File

@ -1,6 +1,6 @@
use std::borrow::Cow;
use crate::generation::proto_chunk::GenerationCache;
use crate::{generation::proto_chunk::GenerationCache, world::WorldPortalExt};
use alter_ground::AlterGroundTreeDecorator;
use attached_to_leaves::AttachedToLeavesTreeDecorator;
use attached_to_logs::AttachedToLogsTreeDecorator;
@ -42,13 +42,16 @@ impl TreeDecorator {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
block_registry: &dyn WorldPortalExt,
random: &mut RandomGenerator,
root_positions: &[BlockPos],
log_positions: &[BlockPos],
foliage_positions: &[BlockPos],
) {
match self {
Self::TrunkVine(decorator) => decorator.generate(chunk, random, log_positions),
Self::TrunkVine(_decorator) => {
TrunkVineTreeDecorator::generate(chunk, random, log_positions);
}
Self::LeaveVine(decorator) => decorator.generate(chunk, random, foliage_positions),
Self::PaleMoss(_decorator) => {}
Self::CreakingHeart(_decorator) => {}
@ -56,11 +59,11 @@ impl TreeDecorator {
Self::Beehive(_decorator) => {}
Self::AlterGround(_decorator) => {}
Self::PlaceOnGround(decorator) => {
decorator.generate(chunk, random, root_positions, log_positions);
decorator.generate(chunk, block_registry, random, root_positions, log_positions);
}
Self::AttachedToLeaves(_decorator) => {}
Self::AttachedToLogs(decorator) => {
decorator.generate(chunk, random, log_positions);
decorator.generate(chunk, block_registry, random, log_positions);
}
}
}

View File

@ -1 +1 @@
pub struct PaleMossTreeDecorator {}
pub struct PaleMossTreeDecorator;

View File

@ -1,6 +1,6 @@
use super::TreeDecorator;
use crate::generation::block_state_provider::BlockStateProvider;
use crate::generation::proto_chunk::GenerationCache;
use crate::{generation::block_state_provider::BlockStateProvider, world::WorldPortalExt};
use pumpkin_data::{Block, tag::Block::MINECRAFT_LEAVES};
use pumpkin_util::{
math::{block_box::BlockBox, position::BlockPos},
@ -18,6 +18,7 @@ impl PlaceOnGroundTreeDecorator {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
block_registry: &dyn WorldPortalExt,
random: &mut RandomGenerator,
root_positions: &[BlockPos],
log_positions: &[BlockPos],
@ -53,13 +54,14 @@ impl PlaceOnGroundTreeDecorator {
random.next_inbetween_i32(block_box.min.y, block_box.max.y),
random.next_inbetween_i32(block_box.min.z, block_box.max.z),
);
self.generate_decoration(chunk, pos, random);
self.generate_decoration(chunk, block_registry, pos, random);
}
}
fn generate_decoration<T: GenerationCache>(
&self,
chunk: &mut T,
block_registry: &dyn WorldPortalExt,
pos: BlockPos,
random: &mut RandomGenerator,
) {
@ -72,7 +74,11 @@ impl PlaceOnGroundTreeDecorator {
&& !state.to_block_id().has_tag(MINECRAFT_LEAVES)
// TODO: using heightmap seems not to work
{
chunk.set_block_state(&up_pos.0, self.block_state_provider.get(random, up_pos));
chunk.set_block_state(
&up_pos.0,
self.block_state_provider
.get(random, up_pos, chunk, block_registry),
);
}
}
}

View File

@ -12,7 +12,6 @@ pub struct TrunkVineTreeDecorator;
impl TrunkVineTreeDecorator {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
random: &mut RandomGenerator,
log_positions: &[BlockPos],

View File

@ -56,7 +56,7 @@ impl AcaciaFoliagePlacer {
foliage_positions
}
pub const fn get_random_height(&self, _random: &mut RandomGenerator) -> i32 {
pub const fn get_random_height(_random: &mut RandomGenerator) -> i32 {
0
}
}

View File

@ -25,7 +25,6 @@ impl DarkOakFoliagePlacer {
let mut foliage_positions = Vec::new();
let pos = node.center.up_height(offset);
let is_giant = node.giant_trunk;
if is_giant {
FoliagePlacer::generate_square(
&mut foliage_positions,
self,
@ -37,6 +36,7 @@ impl DarkOakFoliagePlacer {
node.giant_trunk,
foliage_provider,
);
if is_giant {
FoliagePlacer::generate_square(
&mut foliage_positions,
self,
@ -73,17 +73,6 @@ impl DarkOakFoliagePlacer {
);
}
} else {
FoliagePlacer::generate_square(
&mut foliage_positions,
self,
chunk,
random,
pos,
radius + 2,
-1,
node.giant_trunk,
foliage_provider,
);
FoliagePlacer::generate_square(
&mut foliage_positions,
self,
@ -99,7 +88,7 @@ impl DarkOakFoliagePlacer {
foliage_positions
}
pub const fn get_random_height(&self, _random: &mut RandomGenerator) -> i32 {
pub const fn get_random_height(_random: &mut RandomGenerator) -> i32 {
4
}
}

View File

@ -264,6 +264,7 @@ pub enum FoliageType {
impl FoliageType {
#[expect(clippy::too_many_arguments)]
#[expect(clippy::too_many_lines)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
@ -382,12 +383,12 @@ impl FoliageType {
Self::Blob(blob) => blob.get_random_height(random),
Self::Spruce(spruce) => spruce.get_random_height(random, trunk_height),
Self::Pine(pine) => pine.get_random_height(random, trunk_height),
Self::Acacia(acacia) => acacia.get_random_height(random),
Self::Acacia(_acacia) => AcaciaFoliagePlacer::get_random_height(random),
Self::Bush(bush) => bush.get_random_height(random),
Self::Fancy(fancy) => fancy.get_random_height(random),
Self::Jungle(jungle) => jungle.get_random_height(random, trunk_height),
Self::MegaPine(mega_pine) => mega_pine.get_random_height(random, trunk_height),
Self::DarkOak(dark_oak) => dark_oak.get_random_height(random),
Self::DarkOak(_dark_oak) => DarkOakFoliagePlacer::get_random_height(random),
Self::RandomSpread(random_spread) => {
random_spread.get_random_height(random, trunk_height)
}

View File

@ -59,6 +59,7 @@ impl TreeFeature {
for decorator in &self.decorators {
decorator.generate(
chunk,
block_registry,
random,
&root_positions,
&log_positions,
@ -105,7 +106,7 @@ impl TreeFeature {
}
let root_positions = if let Some(placer) = &self.root_placer {
match placer.generate(chunk, random, pos, trunk_start) {
match placer.generate(chunk, block_registry, random, pos, trunk_start) {
Some(positions) => positions,
None => return (vec![], vec![], vec![]),
}
@ -113,7 +114,7 @@ impl TreeFeature {
Vec::new()
};
let trunk_state = self.trunk_provider.get(random, pos);
let trunk_state = self.trunk_provider.get(random, pos, chunk, block_registry);
let (nodes, logs) = self.trunk_placer.generate(
block_registry,
@ -131,7 +132,9 @@ impl TreeFeature {
.get_random_height(random, height as i32);
let base_height = height as i32 - foliage_height;
let foliage_radius = self.foliage_placer.get_random_radius(random, base_height);
let foliage_state = self.foliage_provider.get(random, pos);
let foliage_state = self
.foliage_provider
.get(random, pos, chunk, block_registry);
let mut foliage_positions = Vec::new();
for node in nodes {
foliage_positions.extend(self.foliage_placer.generate(

View File

@ -4,9 +4,9 @@ use pumpkin_util::{
random::{RandomGenerator, RandomImpl},
};
use crate::generation::block_state_provider::BlockStateProvider;
use crate::generation::feature::features::tree::TreeFeature;
use crate::generation::proto_chunk::GenerationCache;
use crate::{generation::block_state_provider::BlockStateProvider, world::WorldPortalExt};
pub struct AboveRootPlacement {
pub above_root_provider: BlockStateProvider,
@ -37,6 +37,7 @@ impl MangroveRootPlacer {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
block_registry: &dyn WorldPortalExt,
random: &mut RandomGenerator,
pos: BlockPos,
trunk_pos: BlockPos,
@ -65,7 +66,7 @@ impl MangroveRootPlacer {
let mut placed: Vec<BlockPos> = Vec::new();
for root_pos in roots {
if self.place_roots(chunk, random, root_pos) {
if self.place_roots(chunk, block_registry, random, root_pos) {
placed.push(root_pos);
}
}
@ -147,6 +148,7 @@ impl MangroveRootPlacer {
fn place_roots<T: GenerationCache>(
&self,
chunk: &mut T,
block_registry: &dyn WorldPortalExt,
random: &mut RandomGenerator,
pos: BlockPos,
) -> bool {
@ -156,10 +158,12 @@ impl MangroveRootPlacer {
.muddy_roots_in
.contains(&existing_id.as_u16())
{
let state = self
.mangrove_root_placement
.muddy_roots_provider
.get(random, pos);
let state = self.mangrove_root_placement.muddy_roots_provider.get(
random,
pos,
chunk,
block_registry,
);
let state = Self::apply_waterlogging(chunk, pos, state);
chunk.set_block_state(&pos.0, state);
return true;
@ -167,13 +171,16 @@ impl MangroveRootPlacer {
if !self.can_grow_through(chunk, pos) {
return false;
}
let state = self.root_provider.get(random, pos);
let state = self.root_provider.get(random, pos, chunk, block_registry);
let state = Self::apply_waterlogging(chunk, pos, state);
chunk.set_block_state(&pos.0, state);
if let Some(above) = &self.above_root_placement {
let above_pos = pos.up();
if random.next_f32() < above.above_root_placement_chance && chunk.is_air(&above_pos.0) {
let above_state = above.above_root_provider.get(random, above_pos);
let above_state =
above
.above_root_provider
.get(random, above_pos, chunk, block_registry);
let above_state = Self::apply_waterlogging(chunk, above_pos, above_state);
chunk.set_block_state(&above_pos.0, above_state);
}

View File

@ -1,7 +1,7 @@
use mangrove::MangroveRootPlacer;
use pumpkin_util::{math::position::BlockPos, random::RandomGenerator};
use crate::generation::proto_chunk::GenerationCache;
use crate::{generation::proto_chunk::GenerationCache, world::WorldPortalExt};
pub mod mangrove;
@ -19,12 +19,13 @@ impl RootPlacer {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
block_registry: &dyn WorldPortalExt,
random: &mut RandomGenerator,
pos: BlockPos,
trunk_pos: BlockPos,
) -> Option<Vec<BlockPos>> {
match self {
Self::Mangrove(p) => p.generate(chunk, random, pos, trunk_pos),
Self::Mangrove(p) => p.generate(chunk, block_registry, random, pos, trunk_pos),
}
}
}

View File

@ -23,7 +23,7 @@ impl BendingTrunkPlacer {
pub fn generate<T: GenerationCache>(
&self,
block_registry: &dyn WorldPortalExt,
placer: &TrunkPlacer,
_placer: &TrunkPlacer,
height: u32,
start_pos: BlockPos,
chunk: &mut T,
@ -36,7 +36,7 @@ impl BendingTrunkPlacer {
let log_height = height as i32 - 1;
let mut pos = start_pos;
placer.set_dirt(
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,
@ -52,7 +52,7 @@ impl BendingTrunkPlacer {
pos = pos.offset(direction.to_offset());
}
if placer.place(chunk, &pos, trunk_block) {
if TrunkPlacer::place(chunk, &pos, trunk_block) {
trunk_poses.push(pos);
}
@ -70,7 +70,7 @@ impl BendingTrunkPlacer {
let dir_length = self.bend_length.get(random);
for _ in 0..=dir_length {
if placer.place(chunk, &pos, trunk_block) {
if TrunkPlacer::place(chunk, &pos, trunk_block) {
trunk_poses.push(pos);
}

View File

@ -11,10 +11,10 @@ use crate::world::WorldPortalExt;
use pumpkin_data::block_properties::Axis;
pub struct CherryTrunkPlacer {
pub branch_count: IntProvider,
pub branch_horizontal_length: IntProvider,
pub branch_start_offset_from_top: UniformIntProvider,
pub branch_end_offset_from_top: IntProvider,
pub count: IntProvider,
pub horizontal_length: IntProvider,
pub start_offset_from_top: UniformIntProvider,
pub end_offset_from_top: IntProvider,
}
impl CherryTrunkPlacer {
@ -30,7 +30,7 @@ impl CherryTrunkPlacer {
below_trunk_provider: &BlockStateProvider,
trunk_state: &BlockState,
) -> (Vec<TreeNode>, Vec<BlockPos>) {
placer.set_dirt(
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,
@ -41,10 +41,10 @@ impl CherryTrunkPlacer {
let mut logs = Vec::new();
let first_branch_offset =
(height as i32 - 1 + self.branch_start_offset_from_top.get(random)).max(0);
(height as i32 - 1 + self.start_offset_from_top.get(random)).max(0);
let second_branch_start_offset_from_top = UniformIntProvider::new(
self.branch_start_offset_from_top.min_inclusive,
self.branch_start_offset_from_top.max_inclusive - 1,
self.start_offset_from_top.min_inclusive,
self.start_offset_from_top.max_inclusive - 1,
);
let mut second_branch_offset =
(height as i32 - 1 + second_branch_start_offset_from_top.get(random)).max(0);
@ -53,7 +53,7 @@ impl CherryTrunkPlacer {
second_branch_offset += 1;
}
let branch_count = self.branch_count.get(random);
let branch_count = self.count.get(random);
let has_middle_branch = branch_count == 3;
let has_both_side_branches = branch_count >= 2;
@ -67,7 +67,7 @@ impl CherryTrunkPlacer {
for y in 0..trunk_height {
let pos = start_pos.up_height(y as i32);
if placer.place(chunk, &pos, trunk_state) {
if TrunkPlacer::place(chunk, &pos, trunk_state) {
logs.push(pos);
}
}
@ -126,7 +126,7 @@ impl CherryTrunkPlacer {
#[expect(clippy::too_many_arguments)]
fn generate_branch<T: GenerationCache>(
&self,
placer: &TrunkPlacer,
_placer: &TrunkPlacer,
tree_height: u32,
origin: BlockPos,
chunk: &mut T,
@ -139,12 +139,11 @@ impl CherryTrunkPlacer {
let mut logs = Vec::new();
let mut log_pos = origin.up_height(offset_from_origin);
let branch_end_pos_offset =
tree_height as i32 - 1 + self.branch_end_offset_from_top.get(random);
let branch_end_pos_offset = tree_height as i32 - 1 + self.end_offset_from_top.get(random);
let extend_branch_away_from_trunk =
middle_continues_upwards || branch_end_pos_offset < offset_from_origin;
let distance_to_trunk =
self.branch_horizontal_length.get(random) + i32::from(extend_branch_away_from_trunk);
self.horizontal_length.get(random) + i32::from(extend_branch_away_from_trunk);
let branch_end_pos = origin
.add(
@ -161,11 +160,11 @@ impl CherryTrunkPlacer {
} else {
Axis::Z
};
let sideways_state = self.get_sideways_state(trunk_state, axis);
let sideways_state = Self::get_sideways_state(trunk_state, axis);
for _ in 0..steps_horizontally {
log_pos = log_pos.add(branch_direction.0.x, 0, branch_direction.0.z);
if placer.place(chunk, &log_pos, sideways_state) {
if TrunkPlacer::place(chunk, &log_pos, sideways_state) {
logs.push(log_pos);
}
}
@ -196,19 +195,19 @@ impl CherryTrunkPlacer {
if grow_vertically {
log_pos = log_pos.up_height(vertical_direction);
if placer.place(chunk, &log_pos, trunk_state) {
if TrunkPlacer::place(chunk, &log_pos, trunk_state) {
logs.push(log_pos);
}
} else {
log_pos = log_pos.add(branch_direction.0.x, 0, branch_direction.0.z);
if placer.place(chunk, &log_pos, sideways_state) {
if TrunkPlacer::place(chunk, &log_pos, sideways_state) {
logs.push(log_pos);
}
}
}
}
fn get_sideways_state(&self, trunk_state: &BlockState, axis: Axis) -> &'static BlockState {
fn get_sideways_state(trunk_state: &BlockState, axis: Axis) -> &'static BlockState {
let block = Block::from_state_id(trunk_state.id);
if let Some(props_source) = block.properties(trunk_state.id) {
let mut props = props_source.to_props();

View File

@ -19,7 +19,7 @@ impl DarkOakTrunkPlacer {
#[expect(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
block_registry: &dyn WorldPortalExt,
placer: &TrunkPlacer,
_placer: &TrunkPlacer,
height: u32,
start_pos: BlockPos,
chunk: &mut T,
@ -28,22 +28,22 @@ impl DarkOakTrunkPlacer {
trunk_block: &BlockState,
) -> (Vec<TreeNode>, Vec<BlockPos>) {
let below = start_pos.down();
placer.set_dirt(block_registry, chunk, random, &below, below_trunk_provider);
placer.set_dirt(
TrunkPlacer::set_dirt(block_registry, chunk, random, &below, below_trunk_provider);
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,
&below.east(),
below_trunk_provider,
);
placer.set_dirt(
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,
&below.south(),
below_trunk_provider,
);
placer.set_dirt(
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,
@ -75,16 +75,16 @@ impl DarkOakTrunkPlacer {
// Check if air or leaves at the main 2x2 position
let state = GenerationCache::get_block_state(chunk, &pos.0);
if TreeFeature::is_air_or_leaves(state.to_state(), state.to_block_id()) {
if placer.try_place(chunk, &pos, trunk_block) {
if TrunkPlacer::try_place(chunk, &pos, trunk_block) {
trunk_poses.push(pos);
}
if placer.try_place(chunk, &pos.east(), trunk_block) {
if TrunkPlacer::try_place(chunk, &pos.east(), trunk_block) {
trunk_poses.push(pos.east());
}
if placer.try_place(chunk, &pos.south(), trunk_block) {
if TrunkPlacer::try_place(chunk, &pos.south(), trunk_block) {
trunk_poses.push(pos.south());
}
if placer.try_place(chunk, &pos.east().south(), trunk_block) {
if TrunkPlacer::try_place(chunk, &pos.east().south(), trunk_block) {
trunk_poses.push(pos.east().south());
}
}
@ -110,7 +110,7 @@ impl DarkOakTrunkPlacer {
ey - branch_y - 1,
start_pos.0.z + oz,
);
if placer.try_place(chunk, &pos, trunk_block) {
if TrunkPlacer::try_place(chunk, &pos, trunk_block) {
trunk_poses.push(pos);
}
}

View File

@ -25,7 +25,7 @@ impl FancyTrunkPlacer {
#[expect(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
block_registry: &dyn WorldPortalExt,
placer: &TrunkPlacer,
_placer: &TrunkPlacer,
height: u32,
start_pos: BlockPos,
chunk: &mut T,
@ -36,7 +36,7 @@ impl FancyTrunkPlacer {
let j = height as i32 + 2;
let k = ((j as f64) * 0.618).floor() as i32;
placer.set_dirt(
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,

View File

@ -15,7 +15,7 @@ impl ForkingTrunkPlacer {
#[expect(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
block_registry: &dyn WorldPortalExt,
placer: &TrunkPlacer,
_placer: &TrunkPlacer,
height: u32,
start_pos: BlockPos,
chunk: &mut T,
@ -23,7 +23,7 @@ impl ForkingTrunkPlacer {
below_trunk_provider: &BlockStateProvider,
trunk_state: &BlockState,
) -> (Vec<TreeNode>, Vec<BlockPos>) {
placer.set_dirt(
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,
@ -53,7 +53,7 @@ impl ForkingTrunkPlacer {
}
let pos = BlockPos::new(current_tx, yy, current_tz);
if placer.place(chunk, &pos, trunk_state) {
if TrunkPlacer::place(chunk, &pos, trunk_state) {
logs.push(pos);
last_y = Some(yy + 1);
}
@ -84,7 +84,7 @@ impl ForkingTrunkPlacer {
branch_tx += offset.x;
branch_tz += offset.z;
let pos = BlockPos::new(branch_tx, yyx, branch_tz);
if placer.place(chunk, &pos, trunk_state) {
if TrunkPlacer::place(chunk, &pos, trunk_state) {
logs.push(pos);
branch_last_y = Some(yyx + 1);
}

View File

@ -16,7 +16,7 @@ impl GiantTrunkPlacer {
#[expect(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
block_registry: &dyn WorldPortalExt,
placer: &TrunkPlacer,
_placer: &TrunkPlacer,
height: u32,
start_pos: BlockPos,
chunk: &mut T,
@ -25,22 +25,22 @@ impl GiantTrunkPlacer {
trunk_block: &BlockState,
) -> (Vec<TreeNode>, Vec<BlockPos>) {
let pos = start_pos.down();
placer.set_dirt(block_registry, chunk, random, &pos, below_trunk_provider);
placer.set_dirt(
TrunkPlacer::set_dirt(block_registry, chunk, random, &pos, below_trunk_provider);
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,
&pos.east(),
below_trunk_provider,
);
placer.set_dirt(
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,
&pos.south(),
below_trunk_provider,
);
placer.set_dirt(
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,
@ -50,20 +50,20 @@ impl GiantTrunkPlacer {
let mut trunk_poses = Vec::new();
for y in 0..height {
if placer.try_place(chunk, &pos.up_height(y as i32), trunk_block) {
if TrunkPlacer::try_place(chunk, &pos.up_height(y as i32), trunk_block) {
trunk_poses.push(pos.up_height(y as i32));
}
if y >= height - 1 {
continue;
}
if placer.try_place(chunk, &pos.east().up_height(y as i32), trunk_block) {
if TrunkPlacer::try_place(chunk, &pos.east().up_height(y as i32), trunk_block) {
trunk_poses.push(pos.east().up_height(y as i32));
}
if placer.try_place(chunk, &pos.east().south().up_height(y as i32), trunk_block) {
if TrunkPlacer::try_place(chunk, &pos.east().south().up_height(y as i32), trunk_block) {
trunk_poses.push(pos.east().south().up_height(y as i32));
}
if placer.try_place(chunk, &pos.south().up_height(y as i32), trunk_block) {
if TrunkPlacer::try_place(chunk, &pos.south().up_height(y as i32), trunk_block) {
trunk_poses.push(pos.south().up_height(y as i32));
}
}

View File

@ -56,7 +56,7 @@ impl MegaJungleTrunkPlacer {
let block_pos = start_pos.add(j_val, i - 3 + l / 2, k_val);
if placer.try_place(chunk, &block_pos, trunk_block) {
if TrunkPlacer::try_place(chunk, &block_pos, trunk_block) {
trunk_poses.push(block_pos);
}
}

View File

@ -42,7 +42,6 @@ impl TrunkPlacer {
}
pub fn set_dirt<T: GenerationCache>(
&self,
block_registry: &dyn WorldPortalExt,
chunk: &mut T,
random: &mut RandomGenerator,
@ -56,7 +55,6 @@ impl TrunkPlacer {
}
pub fn place<T: GenerationCache>(
&self,
chunk: &mut T,
pos: &BlockPos,
trunk_block: &BlockState,
@ -70,14 +68,13 @@ impl TrunkPlacer {
}
pub fn try_place<T: GenerationCache>(
&self,
chunk: &mut T,
pos: &BlockPos,
trunk_block: &BlockState,
) -> bool {
let block = GenerationCache::get_block_state(chunk, &pos.0);
if TreeFeature::can_replace_or_log(block.to_state(), block.to_block_id()) {
return self.place(chunk, pos, trunk_block);
return Self::place(chunk, pos, trunk_block);
}
false
}

View File

@ -14,7 +14,7 @@ impl StraightTrunkPlacer {
#[expect(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
block_registry: &dyn WorldPortalExt,
placer: &TrunkPlacer,
_placer: &TrunkPlacer,
height: u32,
start_pos: BlockPos,
chunk: &mut T,
@ -22,7 +22,7 @@ impl StraightTrunkPlacer {
below_trunk_provider: &BlockStateProvider,
trunk_state: &BlockState,
) -> (Vec<TreeNode>, Vec<BlockPos>) {
placer.set_dirt(
TrunkPlacer::set_dirt(
block_registry,
chunk,
random,
@ -32,7 +32,7 @@ impl StraightTrunkPlacer {
let mut logs = Vec::new();
for i in 0..height {
let pos = start_pos.up_height(i as i32);
if placer.place(chunk, &pos, trunk_state) {
if TrunkPlacer::place(chunk, &pos, trunk_state) {
logs.push(pos);
}
}

View File

@ -22,7 +22,7 @@ impl TwistingVinesFeature {
random: &mut RandomGenerator,
pos: BlockPos,
) -> bool {
if self.is_invalid_location(chunk, &pos) {
if Self::is_invalid_location(chunk, &pos) {
return false;
}
@ -39,7 +39,7 @@ impl TwistingVinesFeature {
let mut mutable_pos = pos.add(offset_x, offset_y, offset_z);
if self.find_target_y(chunk, &mut mutable_pos)
&& !self.is_invalid_location(chunk, &mutable_pos)
&& !Self::is_invalid_location(chunk, &mutable_pos)
{
let mut height = random.next_bounded_i32(self.max_height) + 1;
if random.next_bounded_i32(6) == 0 {
@ -49,7 +49,7 @@ impl TwistingVinesFeature {
height = 1;
}
self.generate_column(chunk, random, &mutable_pos, height);
Self::generate_column(chunk, random, &mutable_pos, height);
placed = true;
}
}
@ -58,7 +58,6 @@ impl TwistingVinesFeature {
}
fn generate_column<T: GenerationCache>(
&self,
chunk: &mut T,
random: &mut RandomGenerator,
pos: &BlockPos,
@ -91,7 +90,7 @@ impl TwistingVinesFeature {
}
}
fn is_invalid_location<T: GenerationCache>(&self, chunk: &T, pos: &BlockPos) -> bool {
fn is_invalid_location<T: GenerationCache>(chunk: &T, pos: &BlockPos) -> bool {
if !GenerationCache::get_block_state(chunk, &pos.0)
.to_state()
.is_air()

View File

@ -47,7 +47,7 @@ impl UnderwaterMagmaFeature {
}
/// Check if a block can host magma
fn is_valid_placement<T: GenerationCache>(&self, chunk: &T, target: &BlockPos) -> bool {
fn is_valid_placement<T: GenerationCache>(chunk: &T, target: &BlockPos) -> bool {
// Reject water/air or unsupported blocks
let target_id = GenerationCache::get_block_state(chunk, &target.0).to_block_id();
if target_id == Block::WATER || target_id == Block::AIR {
@ -84,9 +84,8 @@ impl UnderwaterMagmaFeature {
pos: BlockPos,
) -> bool {
// Locate floor; abort if none
let floor_y = match self.get_floor_y(chunk, pos) {
Some(y) => y,
None => return false,
let Some(floor_y) = self.get_floor_y(chunk, pos) else {
return false;
};
let floor_pos = BlockPos::new(pos.0.x, floor_y, pos.0.z);
@ -105,7 +104,7 @@ impl UnderwaterMagmaFeature {
let target_pos =
BlockPos::new(floor_pos.0.x + dx, floor_pos.0.y + dy, floor_pos.0.z + dz);
if !self.is_valid_placement(chunk, &target_pos) {
if !Self::is_valid_placement(chunk, &target_pos) {
continue;
}

View File

@ -173,7 +173,9 @@ impl VegetationPatchFeature {
depth: i32,
) -> bool {
for i in 0..depth {
let state_to_place = self.ground_state.get(random, below_pos);
let state_to_place = self
.ground_state
.get(random, below_pos, chunk, block_registry);
let below_state_raw = GenerationCache::get_block_state(chunk, &below_pos.0);
let state_block_id = pumpkin_data::Block::from_state_id(state_to_place.id).id;

View File

@ -7,9 +7,7 @@ use crate::world::WorldPortalExt;
pub struct VinesFeature;
impl VinesFeature {
#[expect(clippy::too_many_arguments)]
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_block_registry: &dyn WorldPortalExt,
_min_y: i8,

View File

@ -1,3 +1 @@
pub struct VoidStartPlatformFeature {
// TODO
}
pub struct VoidStartPlatformFeature; // TODO

View File

@ -1,3 +1 @@
pub struct WeepingVinesFeature {
// TODO
}
pub struct WeepingVinesFeature; // TODO

Some files were not shown because too many files have changed in this diff Show More