chore: enforce clippy lints in pumpkin-world
This commit is contained in:
parent
920fc3ec50
commit
a9f69fea01
208
Cargo.lock
generated
208
Cargo.lock
generated
@ -81,9 +81,9 @@ checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.102"
|
version = "1.0.103"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
|
checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "arbitrary"
|
name = "arbitrary"
|
||||||
@ -93,9 +93,9 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "arc-swap"
|
name = "arc-swap"
|
||||||
version = "1.9.1"
|
version = "1.9.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207"
|
checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rustversion",
|
"rustversion",
|
||||||
]
|
]
|
||||||
@ -631,27 +631,27 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-assembler-x64"
|
name = "cranelift-assembler-x64"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "715783c05f20985a5dfe6bfdccbfcb146cb44bfd8f6ff1d09526c3bf442fdac5"
|
checksum = "e06aeba2c965fc446d13c56a6ccb2631b78445d7544543dd9a25289977630914"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cranelift-assembler-x64-meta",
|
"cranelift-assembler-x64-meta",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-assembler-x64-meta"
|
name = "cranelift-assembler-x64-meta"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4c3da5a783f2b72af39ab98c1bf3157e081511e1febeafe550d71a4d0ba75f66"
|
checksum = "ee2d2dde4ec1352715595b5cfa6fe2e5b8ebb9da3457b3ee8db0aa2808c069aa"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cranelift-srcgen",
|
"cranelift-srcgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-bforest"
|
name = "cranelift-bforest"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8e2e9b7adf77fa02204d4d523ae4f171b6591c2632b030865336335c7d7b420e"
|
checksum = "03b4982ef9fa54ec9eee841e891e7ddc5434be1250e88de31572e000c888f30b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cranelift-entity",
|
"cranelift-entity",
|
||||||
"wasmtime-internal-core",
|
"wasmtime-internal-core",
|
||||||
@ -659,9 +659,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-bitset"
|
name = "cranelift-bitset"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "90f09d9f397eae612ac15becf0e0b2165d2232003f4f2a1549572a724d1c48c5"
|
checksum = "529143118c4eeb58c39ecb02319557d512be6c61348486422974ab8e3906b8a8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
@ -670,9 +670,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-codegen"
|
name = "cranelift-codegen"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5e004cf1270abc82f7b9fb32d1a9d73a1cc0d5a0215b97db8c32658748e78b01"
|
checksum = "b7780677247ad3577e3a6a3ebf43f39b325a11d6393db72b2c9968a910d4d13d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"cranelift-assembler-x64",
|
"cranelift-assembler-x64",
|
||||||
@ -701,9 +701,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-codegen-meta"
|
name = "cranelift-codegen-meta"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "04f32034641f96b123e4fdb5666e726d9f252e222638fc8fdd905b4ff18c3c4e"
|
checksum = "ac9645250416cbf92454fe61160e17e026e0ce405906a54500b114f923ddffc9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cranelift-assembler-x64-meta",
|
"cranelift-assembler-x64-meta",
|
||||||
"cranelift-codegen-shared",
|
"cranelift-codegen-shared",
|
||||||
@ -714,24 +714,24 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-codegen-shared"
|
name = "cranelift-codegen-shared"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "746566ae868b0e87a89206b3856350886a4fc2e078ce6485bec2ea6727c31685"
|
checksum = "20ee8d222ff0fd3681791979afbf88586ac9f49010d3db96b3cbe4c96759aee3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-control"
|
name = "cranelift-control"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "def01ab5cd08a1be551d4bc96adc6af91f89138c4f81d0a60fdf3b9f82272703"
|
checksum = "591abe6f5312bd2c4220f1b3bead56c2ad00257c52668015ba013b85dcf2a17a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arbitrary",
|
"arbitrary",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-entity"
|
name = "cranelift-entity"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "341d5e1e071320505ebbc8194a8eb61fa94394b1ed93ba3cbec3be5fa1c3c1ce"
|
checksum = "a5300c49cf940526fe771517b3b3eabd5d0ff164ee61698579cf403fe8d3af3c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cranelift-bitset",
|
"cranelift-bitset",
|
||||||
"serde",
|
"serde",
|
||||||
@ -741,9 +741,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-frontend"
|
name = "cranelift-frontend"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "97c6f3e2419ecb54a5503994d35421554c5e487d0493bc86ea96907bab51fd29"
|
checksum = "da4adbf760207fdbbe130f1191cce01cdef66831a9f648b1f39ff2800d126d45"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cranelift-codegen",
|
"cranelift-codegen",
|
||||||
"hashbrown 0.17.1",
|
"hashbrown 0.17.1",
|
||||||
@ -754,15 +754,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-isle"
|
name = "cranelift-isle"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "21aa47a5e0b1e9fb2c9348459088d5dbb872ebe17781ada1270d8364c7e73257"
|
checksum = "8315b21ff018226a42a60a4702c2dd75f6447cac26e9bca622e14c22088c2ff5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-native"
|
name = "cranelift-native"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c3054a03ac285b170662ec9530602b01cd394a7428cd753b48d9cae51f05249a"
|
checksum = "d506ef23a60715bde451b06620b14402166ded3b648454fccbf04f3e46a4aa70"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cranelift-codegen",
|
"cranelift-codegen",
|
||||||
"libc",
|
"libc",
|
||||||
@ -771,9 +771,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cranelift-srcgen"
|
name = "cranelift-srcgen"
|
||||||
version = "0.133.0"
|
version = "0.133.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fd2498406acfcfd39c69078af187154ac8dcd31d3082888b258deb2a4fd0ecf4"
|
checksum = "48ed47e602652e3410f9387fc0db70fefadcee4d78a78881421aabcab4e26b89"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crc-fast"
|
name = "crc-fast"
|
||||||
@ -892,9 +892,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossfire"
|
name = "crossfire"
|
||||||
version = "3.1.16"
|
version = "3.1.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4d8c4de3db833e7ef74050bae09d5f3fa8f9d1507d3c2689c6e8c50b71208b18"
|
checksum = "df981decccf9b846c396ae513b3d2c6a1770d9593c8e47853d8fdb336c7bcb46"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
"embed-collections",
|
"embed-collections",
|
||||||
@ -1578,15 +1578,15 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "humantime"
|
name = "humantime"
|
||||||
version = "2.3.0"
|
version = "2.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424"
|
checksum = "15cdd26707701c53297e2fa6afb323d55fbc1d0810c3aec078ae3ef0424c3c15"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hybrid-array"
|
name = "hybrid-array"
|
||||||
version = "0.4.12"
|
version = "0.4.13"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da"
|
checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"typenum",
|
"typenum",
|
||||||
]
|
]
|
||||||
@ -1817,9 +1817,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "inotify-sys"
|
name = "inotify-sys"
|
||||||
version = "0.1.5"
|
version = "0.1.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
|
checksum = "9ea94e891b3606826e9c998be69ddca42247dad8ad50b1649a5cb7e1c9ae06fd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
@ -1900,9 +1900,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "js-sys"
|
name = "js-sys"
|
||||||
version = "0.3.102"
|
version = "0.3.103"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31"
|
checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@ -1965,9 +1965,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libredox"
|
name = "libredox"
|
||||||
version = "0.1.17"
|
version = "0.1.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3"
|
checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
@ -2192,9 +2192,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-bigint"
|
name = "num-bigint"
|
||||||
version = "0.4.6"
|
version = "0.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
|
checksum = "7032fbb7ef662c18e806aa75b311f68ddf5c94e8fc62832c0039d79095ab6abf"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-integer",
|
"num-integer",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
@ -2627,9 +2627,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pulley-interpreter"
|
name = "pulley-interpreter"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "047bda68096e5f290619ce037b7c3fa352d11f08edf0fce3030c351adc0f8ec0"
|
checksum = "38b92604caae1a1899b6a5b54967289dd538177c626004c91accf9d0ec7e4a12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cranelift-bitset",
|
"cranelift-bitset",
|
||||||
"log",
|
"log",
|
||||||
@ -2639,9 +2639,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pulley-macros"
|
name = "pulley-macros"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "83258a9bcc97d3fb15bf4e1c43bc2cc85c718e3563a697f145f245e651f2828f"
|
checksum = "5a7ac85c0bb3fb351f10d531230aaa5e366b46d7c4e5328e5f02801d6dac1165"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -2919,9 +2919,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rand"
|
name = "rand"
|
||||||
version = "0.10.1"
|
version = "0.10.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207"
|
checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chacha20",
|
"chacha20",
|
||||||
"getrandom 0.4.3",
|
"getrandom 0.4.3",
|
||||||
@ -3077,9 +3077,9 @@ checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc-hash"
|
name = "rustc-hash"
|
||||||
version = "2.1.2"
|
version = "2.1.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
|
checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc_version"
|
name = "rustc_version"
|
||||||
@ -3140,9 +3140,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustls-pki-types"
|
name = "rustls-pki-types"
|
||||||
version = "1.14.1"
|
version = "1.15.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9"
|
checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
@ -3166,9 +3166,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustyline"
|
name = "rustyline"
|
||||||
version = "18.0.0"
|
version = "18.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4a990b25f351b25139ddc7f21ee3f6f56f86d6846b74ac8fad3a719a287cd4a0"
|
checksum = "53f6a737db68eb1a8ccff86b584b2fc13eca6a7bb6f78ebc7c529547e3ab9684"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
@ -3615,9 +3615,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.3.51"
|
version = "0.3.53"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327"
|
checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"deranged",
|
"deranged",
|
||||||
"libc",
|
"libc",
|
||||||
@ -3637,9 +3637,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time-macros"
|
name = "time-macros"
|
||||||
version = "0.2.30"
|
version = "0.2.31"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935"
|
checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-conv",
|
"num-conv",
|
||||||
"time-core",
|
"time-core",
|
||||||
@ -4043,9 +4043,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uuid"
|
name = "uuid"
|
||||||
version = "1.23.3"
|
version = "1.23.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
|
checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom 0.4.3",
|
"getrandom 0.4.3",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
@ -4102,9 +4102,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "wasm-bindgen"
|
||||||
version = "0.2.125"
|
version = "0.2.126"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a"
|
checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
@ -4115,9 +4115,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro"
|
name = "wasm-bindgen-macro"
|
||||||
version = "0.2.125"
|
version = "0.2.126"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d"
|
checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote",
|
"quote",
|
||||||
"wasm-bindgen-macro-support",
|
"wasm-bindgen-macro-support",
|
||||||
@ -4125,9 +4125,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro-support"
|
name = "wasm-bindgen-macro-support"
|
||||||
version = "0.2.125"
|
version = "0.2.126"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd"
|
checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@ -4138,9 +4138,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-shared"
|
name = "wasm-bindgen-shared"
|
||||||
version = "0.2.125"
|
version = "0.2.126"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f"
|
checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
@ -4193,9 +4193,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime"
|
name = "wasmtime"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "08dd5caf09eda1d523261a0dd421a54e3bb165cf6f5b02c82327e712d49e3cf4"
|
checksum = "c4213d2f019a5e44aa8a61d8826dd33a505bff79f749b14a8bafd67321cb9351"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"addr2line",
|
"addr2line",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@ -4236,9 +4236,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-environ"
|
name = "wasmtime-environ"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a1f3aa689689cf295568aa4d24ab636579fb3b36dfa7cea35020d87064fc88ec"
|
checksum = "d45863de41977ec6453e859cf843d456fa3fcb45a659b66d16e794f90ec4f5b7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"cpp_demangle",
|
"cpp_demangle",
|
||||||
@ -4267,9 +4267,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-cache"
|
name = "wasmtime-internal-cache"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fd6c27fbabb7df6c88a592a28773a92aa8cfba5ee656963d7ad9b32a8f57a3d8"
|
checksum = "438bc7dc45fb75297d75f79a9a0ce852345d13ebc6a6863f6f688f013836a9dd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"directories-next",
|
"directories-next",
|
||||||
@ -4287,9 +4287,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-component-macro"
|
name = "wasmtime-internal-component-macro"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "de4451ab437d7b2d41e637a4379e87ff76aeeb051236064dcc75c1855714ee58"
|
checksum = "f1e48f8d4966d62a10b6d70722bc432c1e163890be2801d3b5784589ad36ffc3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@ -4302,15 +4302,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-component-util"
|
name = "wasmtime-internal-component-util"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "53b5e357002645964342b99a6fe8405cda7dd031f498927992c9d99d5012daa7"
|
checksum = "819ad5abd5822a22dbf4014475cdfd1fe790707761cd732d74aaa3ba4d5ba489"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-core"
|
name = "wasmtime-internal-core"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4f6ce74d60a8ed870548e7efa9710c54f982bbfcf80e5ee5eee8498318616483"
|
checksum = "3fc28372e36eaf8cf70faa83b5779137f7e99c8d18569a125d1580e735cc9e4d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hashbrown 0.17.1",
|
"hashbrown 0.17.1",
|
||||||
"libm",
|
"libm",
|
||||||
@ -4319,9 +4319,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-cranelift"
|
name = "wasmtime-internal-cranelift"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e24204583d847b7ce3d770f7a3456739d5d43f65c884cb47111dbe27b26ebbe6"
|
checksum = "a433efc6e35112a5457e1dc8bc4d8d39820ac7722267e89bc04e5df641f32124"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"cranelift-codegen",
|
"cranelift-codegen",
|
||||||
@ -4346,9 +4346,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-fiber"
|
name = "wasmtime-internal-fiber"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ecaeb13bf3eb94a02e32ea3842c8fda3ea6897c299745100c1230b65769d2d91"
|
checksum = "18a1d3a39d0d210f6b8574ee96a4315e0a14c67f3a1fc3cd5372cb10d2fb4422"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
@ -4361,9 +4361,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-jit-debug"
|
name = "wasmtime-internal-jit-debug"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5090e9a302bb5729a84766e4af07b6b10efe733e437bc266dd954a957114df63"
|
checksum = "9f667288cb4dfa68a4639ffac4d5628535dda64ebdc2b990526efb12b30ba803"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"wasmtime-internal-versioned-export-macros",
|
"wasmtime-internal-versioned-export-macros",
|
||||||
@ -4371,9 +4371,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-jit-icache-coherence"
|
name = "wasmtime-internal-jit-icache-coherence"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0bba33d9d951a9a974a866e80c864a9a46b28086e369582e0caa78e14a9f29e4"
|
checksum = "eba651d44ab0faad4c58106b3adb45068189fb65ef50f0c404b6d9e3bf81a357"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
@ -4383,9 +4383,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-unwinder"
|
name = "wasmtime-internal-unwinder"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "695063a19bac17895f95c0c0f2f9544e85a277763cd77b5778f0cce6a971073e"
|
checksum = "2ecc52563b0558af2a7487eb710de07cc4532564b55528876129238e83118cb1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"cranelift-codegen",
|
"cranelift-codegen",
|
||||||
@ -4396,9 +4396,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-versioned-export-macros"
|
name = "wasmtime-internal-versioned-export-macros"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cc77f7513209b76e8f4772af640819f47fca3a5425b4417ef9c20b888334063c"
|
checksum = "e747f4a074699ba1b4e4d841fb263f9b7df5bd1555181c4752bf5990d21ba676"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -4407,9 +4407,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-internal-wit-bindgen"
|
name = "wasmtime-internal-wit-bindgen"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e859103d8336304b8beebbf89a620c2f53a118fd5fbce41bc572cf4bacc8111d"
|
checksum = "80009f46991622814196d96fac6fc0a938f46b5cba737a8f4e21e24e5a03856f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bitflags",
|
"bitflags",
|
||||||
@ -4420,9 +4420,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-wasi"
|
name = "wasmtime-wasi"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "093c67243785465fdab0cb8bfada4a1171a543dfc22b392201c77d8086367b58"
|
checksum = "e9f65ef30a2c5478873cdb619085a7a649d3ce41cc3eaf298a7ce3dee96a8e11"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"bitflags",
|
"bitflags",
|
||||||
@ -4448,9 +4448,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-wasi-http"
|
name = "wasmtime-wasi-http"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "357b734a727b95c9117d78b3ad17abea5e6208e2af545160dfc462b0c342fa94"
|
checksum = "cb65eeb8116615c2a22f51b19672c0d5b652ca7b051086da5c7c0a9eb39f4af7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -4471,9 +4471,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmtime-wasi-io"
|
name = "wasmtime-wasi-io"
|
||||||
version = "46.0.0"
|
version = "46.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "95db6ca70bd5b7aab6b0297419ccbdb88682e12cc37764c757f58e917da650b9"
|
checksum = "cee57d5fef4976b1ab542615f4cef2c43278eb549d8078939668ea0f13d5c696"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -4931,9 +4931,9 @@ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "xxhash-rust"
|
name = "xxhash-rust"
|
||||||
version = "0.8.15"
|
version = "0.8.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3"
|
checksum = "4d93c89cdc2d3a63c3ec48ffe926931bdc069eafa8e4402fe6d8f790c9d1e576"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "yoke"
|
name = "yoke"
|
||||||
|
|||||||
11
Cargo.toml
11
Cargo.toml
@ -56,6 +56,7 @@ cargo_common_metadata = "allow"
|
|||||||
cast_precision_loss = "allow"
|
cast_precision_loss = "allow"
|
||||||
multiple_crate_versions = "allow"
|
multiple_crate_versions = "allow"
|
||||||
single_call_fn = "allow"
|
single_call_fn = "allow"
|
||||||
|
similar_names = "allow"
|
||||||
unreadable_literal = "allow"
|
unreadable_literal = "allow"
|
||||||
many_single_char_names = "allow"
|
many_single_char_names = "allow"
|
||||||
suboptimal_flops = "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"] }
|
crc-fast = { version = "1.10.0", default-features = false, features = ["std"] }
|
||||||
criterion = { version = "0.8", default-features = false }
|
criterion = { version = "0.8", default-features = false }
|
||||||
crossbeam-utils = { version = "0.8.21", default-features = false, features = ["std"] }
|
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 }
|
crypto-bigint = { version = "0.7.5", default-features = false }
|
||||||
dashmap = { version = "6.2", default-features = false }
|
dashmap = { version = "6.2", default-features = false }
|
||||||
ecdsa = { version = "0.16.9", default-features = false, features = ["std"] }
|
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 }
|
lru = { version = "0.18.0", default-features = false }
|
||||||
lz4-java-wrc = { version = "0.2.0", default-features = false, features = ["lz4_flex"] }
|
lz4-java-wrc = { version = "0.2.0", default-features = false, features = ["lz4_flex"] }
|
||||||
md5 = { version = "0.8", default-features = false }
|
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-derive = { version = "0.4", default-features = false }
|
||||||
num-traits = { version = "0.2", default-features = false, features = ["std"] }
|
num-traits = { version = "0.2", default-features = false, features = ["std"] }
|
||||||
p384 = { version = "0.13.1", default-features = false, features = ["std", "arithmetic", "pkcs8"] }
|
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-util = { path = "pumpkin-util", default-features = false }
|
||||||
pumpkin-world = { path = "pumpkin-world", default-features = false }
|
pumpkin-world = { path = "pumpkin-world", default-features = false }
|
||||||
quote = { version = "1.0", default-features = false, features = ["proc-macro"] }
|
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"] }
|
rsa = { version = "=0.10.0-rc.18", default-features = false, features = ["std", "encoding"] }
|
||||||
cipher = { version = "0.5.2", default-features = false }
|
cipher = { version = "0.5.2", default-features = false }
|
||||||
rustc-hash = { version = "2.1.2", default-features = false, features = ["std"] }
|
rustc-hash = { version = "2.1.3", default-features = false, features = ["std"] }
|
||||||
rustyline = { version = "18.0.0", default-features = false, features = ["with-file-history"] }
|
rustyline = { version = "18.0.1", default-features = false, features = ["with-file-history"] }
|
||||||
ruzstd = { version = "0.8.3", default-features = false, features = ["std"] }
|
ruzstd = { version = "0.8.3", default-features = false, features = ["std"] }
|
||||||
sha1 = { version = "=0.11.0", default-features = false, features = ["oid"] }
|
sha1 = { version = "=0.11.0", default-features = false, features = ["oid"] }
|
||||||
sha2 = { version = "=0.11.0", default-features = false, features = ["oid"] }
|
sha2 = { version = "=0.11.0", default-features = false, features = ["oid"] }
|
||||||
|
|||||||
@ -82,7 +82,7 @@ pub fn build() -> TokenStream {
|
|||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
quote! {
|
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> {
|
fn build_configured_features() -> std::collections::HashMap<pumpkin_data::configured_feature::ConfiguredFeature, ConfiguredFeature> {
|
||||||
use crate::generation::block_predicate::{
|
use crate::generation::block_predicate::{
|
||||||
AllOfBlockPredicate, AnyOfBlockPredicate, BlockPredicate,
|
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;
|
let r3 = config["chance_of_spread_radius3"].as_f64().unwrap_or(0.5) as f32;
|
||||||
quote! {
|
quote! {
|
||||||
ConfiguredFeature::PointedDripstone(SmallDripstoneFeature {
|
ConfiguredFeature::PointedDripstone(SmallDripstoneFeature {
|
||||||
chance_of_taller_dripstone: #taller,
|
taller_dripstone: #taller,
|
||||||
chance_of_directional_spread: #dir_spread,
|
directional_spread: #dir_spread,
|
||||||
chance_of_spread_radius2: #r2,
|
spread_radius2: #r2,
|
||||||
chance_of_spread_radius3: #r3,
|
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"]);
|
value_to_int_provider(&v["branch_end_offset_from_top"]);
|
||||||
quote! {
|
quote! {
|
||||||
TrunkType::Cherry(CherryTrunkPlacer {
|
TrunkType::Cherry(CherryTrunkPlacer {
|
||||||
branch_count: #branch_count,
|
count: #branch_count,
|
||||||
branch_horizontal_length: #branch_horizontal_length,
|
horizontal_length: #branch_horizontal_length,
|
||||||
branch_start_offset_from_top: UniformIntProvider { min_inclusive: #min, max_inclusive: #max },
|
start_offset_from_top: UniformIntProvider { min_inclusive: #min, max_inclusive: #max },
|
||||||
branch_end_offset_from_top: #branch_end_offset_from_top,
|
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 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 f = v["noise_factor"].as_f64().unwrap_or(1.0);
|
||||||
let o = v["noise_offset"].as_f64().unwrap_or(0.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" => {
|
"minecraft:noise_threshold_count" => {
|
||||||
let l = v["noise_level"].as_f64().unwrap_or(0.0);
|
let l = v["noise_level"].as_f64().unwrap_or(0.0);
|
||||||
|
|||||||
@ -77,7 +77,7 @@ pub fn build() -> TokenStream {
|
|||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
quote! {
|
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> {
|
fn build_placed_features() -> std::collections::HashMap<pumpkin_data::placed_feature::PlacedFeature, PlacedFeature> {
|
||||||
use crate::generation::block_predicate::{
|
use crate::generation::block_predicate::{
|
||||||
AllOfBlockPredicate, AnyOfBlockPredicate, BlockPredicate,
|
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);
|
let offset = v["noise_offset"].as_f64().unwrap_or(0.0);
|
||||||
quote! {
|
quote! {
|
||||||
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
|
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
|
||||||
noise_to_count_ratio: #ratio,
|
to_count_ratio: #ratio,
|
||||||
noise_factor: #factor,
|
factor: #factor,
|
||||||
noise_offset: #offset,
|
offset: #offset,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,11 @@
|
|||||||
/* This file is generated. Do not edit manually. */
|
/* 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()
|
fn build_configured_features()
|
||||||
-> std::collections::HashMap<pumpkin_data::configured_feature::ConfiguredFeature, ConfiguredFeature>
|
-> std::collections::HashMap<pumpkin_data::configured_feature::ConfiguredFeature, ConfiguredFeature>
|
||||||
{
|
{
|
||||||
@ -748,8 +754,8 @@ fn build_configured_features()
|
|||||||
prioritize_tip: true,
|
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 :: 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 { 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 :: 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(
|
map.insert(
|
||||||
pumpkin_data::configured_feature::ConfiguredFeature::ChorusPlant,
|
pumpkin_data::configured_feature::ConfiguredFeature::ChorusPlant,
|
||||||
ConfiguredFeature::ChorusPlant(
|
ConfiguredFeature::ChorusPlant(
|
||||||
@ -3629,10 +3635,10 @@ fn build_configured_features()
|
|||||||
PlacedFeature {
|
PlacedFeature {
|
||||||
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
|
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
|
||||||
SmallDripstoneFeature {
|
SmallDripstoneFeature {
|
||||||
chance_of_taller_dripstone: 0.2f32,
|
taller_dripstone: 0.2f32,
|
||||||
chance_of_directional_spread: 0.7f32,
|
directional_spread: 0.7f32,
|
||||||
chance_of_spread_radius2: 0.5f32,
|
spread_radius2: 0.5f32,
|
||||||
chance_of_spread_radius3: 0.5f32,
|
spread_radius3: 0.5f32,
|
||||||
},
|
},
|
||||||
))),
|
))),
|
||||||
placement: vec![
|
placement: vec![
|
||||||
@ -3672,10 +3678,10 @@ fn build_configured_features()
|
|||||||
PlacedFeature {
|
PlacedFeature {
|
||||||
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
|
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
|
||||||
SmallDripstoneFeature {
|
SmallDripstoneFeature {
|
||||||
chance_of_taller_dripstone: 0.2f32,
|
taller_dripstone: 0.2f32,
|
||||||
chance_of_directional_spread: 0.7f32,
|
directional_spread: 0.7f32,
|
||||||
chance_of_spread_radius2: 0.5f32,
|
spread_radius2: 0.5f32,
|
||||||
chance_of_spread_radius3: 0.5f32,
|
spread_radius3: 0.5f32,
|
||||||
},
|
},
|
||||||
))),
|
))),
|
||||||
placement: vec![
|
placement: vec![
|
||||||
@ -4102,10 +4108,10 @@ fn build_configured_features()
|
|||||||
PlacedFeature {
|
PlacedFeature {
|
||||||
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
|
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
|
||||||
SmallDripstoneFeature {
|
SmallDripstoneFeature {
|
||||||
chance_of_taller_dripstone: 0.2f32,
|
taller_dripstone: 0.2f32,
|
||||||
chance_of_directional_spread: 0.7f32,
|
directional_spread: 0.7f32,
|
||||||
chance_of_spread_radius2: 0.5f32,
|
spread_radius2: 0.5f32,
|
||||||
chance_of_spread_radius3: 0.5f32,
|
spread_radius3: 0.5f32,
|
||||||
},
|
},
|
||||||
))),
|
))),
|
||||||
placement: vec![
|
placement: vec![
|
||||||
@ -4145,10 +4151,10 @@ fn build_configured_features()
|
|||||||
PlacedFeature {
|
PlacedFeature {
|
||||||
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
|
feature: Feature::Inlined(Box::new(ConfiguredFeature::PointedDripstone(
|
||||||
SmallDripstoneFeature {
|
SmallDripstoneFeature {
|
||||||
chance_of_taller_dripstone: 0.2f32,
|
taller_dripstone: 0.2f32,
|
||||||
chance_of_directional_spread: 0.7f32,
|
directional_spread: 0.7f32,
|
||||||
chance_of_spread_radius2: 0.5f32,
|
spread_radius2: 0.5f32,
|
||||||
chance_of_spread_radius3: 0.5f32,
|
spread_radius3: 0.5f32,
|
||||||
},
|
},
|
||||||
))),
|
))),
|
||||||
placement: vec![
|
placement: vec![
|
||||||
|
|||||||
@ -37898,7 +37898,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const ARCHER_POTTERY_SHERD: Self = Self {
|
||||||
id: 700,
|
id: 700,
|
||||||
registry_key: "minecraft:archer_pottery_sherd",
|
registry_key: "minecraft:archer_pottery_sherd",
|
||||||
@ -37983,7 +37983,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const BALLOON: Self = Self {
|
||||||
id: 641,
|
id: 641,
|
||||||
registry_key: "minecraft:balloon",
|
registry_key: "minecraft:balloon",
|
||||||
@ -38236,7 +38236,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const BEEHIVE: Self = Self {
|
||||||
id: -219,
|
id: -219,
|
||||||
registry_key: "minecraft:beehive",
|
registry_key: "minecraft:beehive",
|
||||||
@ -38244,9 +38244,9 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 : 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\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_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\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_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 {
|
pub const BELL: Self = Self {
|
||||||
id: -206,
|
id: -206,
|
||||||
registry_key: "minecraft:bell",
|
registry_key: "minecraft:bell",
|
||||||
@ -38408,7 +38408,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const BLACK_CANDLE: Self = Self {
|
||||||
id: -428,
|
id: -428,
|
||||||
registry_key: "minecraft:black_candle",
|
registry_key: "minecraft:black_candle",
|
||||||
@ -38577,7 +38577,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const BLUE_CANDLE: Self = Self {
|
||||||
id: -424,
|
id: -424,
|
||||||
registry_key: "minecraft:blue_candle",
|
registry_key: "minecraft:blue_candle",
|
||||||
@ -38809,8 +38809,8 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 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\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 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 {
|
pub const BREEZE_SPAWN_EGG: Self = Self {
|
||||||
id: 535,
|
id: 535,
|
||||||
registry_key: "minecraft:breeze_spawn_egg",
|
registry_key: "minecraft:breeze_spawn_egg",
|
||||||
@ -38874,7 +38874,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const BROWN_CANDLE: Self = Self {
|
||||||
id: -425,
|
id: -425,
|
||||||
registry_key: "minecraft:brown_candle",
|
registry_key: "minecraft:brown_candle",
|
||||||
@ -39043,7 +39043,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const BURN_POTTERY_SHERD: Self = Self {
|
||||||
id: 704,
|
id: 704,
|
||||||
registry_key: "minecraft:burn_pottery_sherd",
|
registry_key: "minecraft:burn_pottery_sherd",
|
||||||
@ -39107,7 +39107,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const CAMPFIRE: Self = Self {
|
||||||
id: 630,
|
id: 630,
|
||||||
registry_key: "minecraft:campfire",
|
registry_key: "minecraft:campfire",
|
||||||
@ -39136,7 +39136,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const CARROT_ON_A_STICK: Self = Self {
|
||||||
id: 556,
|
id: 556,
|
||||||
registry_key: "minecraft:carrot_on_a_stick",
|
registry_key: "minecraft:carrot_on_a_stick",
|
||||||
@ -39438,7 +39438,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const CHICKEN_SPAWN_EGG: Self = Self {
|
||||||
id: 468,
|
id: 468,
|
||||||
registry_key: "minecraft:chicken_spawn_egg",
|
registry_key: "minecraft:chicken_spawn_egg",
|
||||||
@ -39558,7 +39558,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const CHORUS_PLANT: Self = Self {
|
||||||
id: 240,
|
id: 240,
|
||||||
registry_key: "minecraft:chorus_plant",
|
registry_key: "minecraft:chorus_plant",
|
||||||
@ -39783,7 +39783,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const COD_BUCKET: Self = Self {
|
||||||
id: 396,
|
id: 396,
|
||||||
registry_key: "minecraft:cod_bucket",
|
registry_key: "minecraft:cod_bucket",
|
||||||
@ -39910,14 +39910,14 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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_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\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_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\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_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\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_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\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_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\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_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\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 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\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 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 {
|
pub const COPPER_AXE: Self = Self {
|
||||||
id: 776,
|
id: 776,
|
||||||
registry_key: "minecraft:copper_axe",
|
registry_key: "minecraft:copper_axe",
|
||||||
@ -40079,7 +40079,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const COPPER_SWORD: Self = Self {
|
||||||
id: 773,
|
id: 773,
|
||||||
registry_key: "minecraft:copper_sword",
|
registry_key: "minecraft:copper_sword",
|
||||||
@ -40444,7 +40444,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const CYAN_CANDLE: Self = Self {
|
||||||
id: -422,
|
id: -422,
|
||||||
registry_key: "minecraft:cyan_candle",
|
registry_key: "minecraft:cyan_candle",
|
||||||
@ -41159,7 +41159,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const DIAMOND_SWORD: Self = Self {
|
||||||
id: 347,
|
id: 347,
|
||||||
registry_key: "minecraft:diamond_sword",
|
registry_key: "minecraft:diamond_sword",
|
||||||
@ -41314,7 +41314,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const DRIED_KELP_BLOCK: Self = Self {
|
||||||
id: -139,
|
id: -139,
|
||||||
registry_key: "minecraft:dried_kelp_block",
|
registry_key: "minecraft:dried_kelp_block",
|
||||||
@ -42260,7 +42260,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const ENCHANTING_TABLE: Self = Self {
|
||||||
id: 116,
|
id: 116,
|
||||||
registry_key: "minecraft:enchanting_table",
|
registry_key: "minecraft:enchanting_table",
|
||||||
@ -42835,7 +42835,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const GLOW_FRAME: Self = Self {
|
||||||
id: 665,
|
id: 665,
|
||||||
registry_key: "minecraft:glow_frame",
|
registry_key: "minecraft:glow_frame",
|
||||||
@ -42934,7 +42934,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const GOLDEN_AXE: Self = Self {
|
||||||
id: 357,
|
id: 357,
|
||||||
registry_key: "minecraft:golden_axe",
|
registry_key: "minecraft:golden_axe",
|
||||||
@ -42949,7 +42949,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const GOLDEN_CHESTPLATE: Self = Self {
|
||||||
id: 384,
|
id: 384,
|
||||||
registry_key: "minecraft:golden_chestplate",
|
registry_key: "minecraft:golden_chestplate",
|
||||||
@ -43020,7 +43020,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const GOLDEN_SWORD: Self = Self {
|
||||||
id: 354,
|
id: 354,
|
||||||
registry_key: "minecraft:golden_sword",
|
registry_key: "minecraft:golden_sword",
|
||||||
@ -43084,7 +43084,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const GRAY_CANDLE: Self = Self {
|
||||||
id: -420,
|
id: -420,
|
||||||
registry_key: "minecraft:gray_candle",
|
registry_key: "minecraft:gray_candle",
|
||||||
@ -43176,7 +43176,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const GREEN_CANDLE: Self = Self {
|
||||||
id: -426,
|
id: -426,
|
||||||
registry_key: "minecraft:green_candle",
|
registry_key: "minecraft:green_candle",
|
||||||
@ -43632,7 +43632,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const HONEYCOMB: Self = Self {
|
||||||
id: 632,
|
id: 632,
|
||||||
registry_key: "minecraft:honeycomb",
|
registry_key: "minecraft:honeycomb",
|
||||||
@ -43934,7 +43934,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const IRON_SWORD: Self = Self {
|
||||||
id: 338,
|
id: 338,
|
||||||
registry_key: "minecraft:iron_sword",
|
registry_key: "minecraft:iron_sword",
|
||||||
@ -44509,7 +44509,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const LIGHT_BLUE_CANDLE: Self = Self {
|
||||||
id: -416,
|
id: -416,
|
||||||
registry_key: "minecraft:light_blue_candle",
|
registry_key: "minecraft:light_blue_candle",
|
||||||
@ -44601,7 +44601,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const LIGHT_GRAY_CANDLE: Self = Self {
|
||||||
id: -421,
|
id: -421,
|
||||||
registry_key: "minecraft:light_gray_candle",
|
registry_key: "minecraft:light_gray_candle",
|
||||||
@ -44714,7 +44714,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const LIME_CANDLE: Self = Self {
|
||||||
id: -418,
|
id: -418,
|
||||||
registry_key: "minecraft:lime_candle",
|
registry_key: "minecraft:lime_candle",
|
||||||
@ -44911,7 +44911,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const MAGENTA_CANDLE: Self = Self {
|
||||||
id: -415,
|
id: -415,
|
||||||
registry_key: "minecraft:magenta_candle",
|
registry_key: "minecraft:magenta_candle",
|
||||||
@ -45206,8 +45206,8 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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_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\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_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 {
|
pub const MELON_STEM: Self = Self {
|
||||||
id: 105,
|
id: 105,
|
||||||
registry_key: "minecraft:melon_stem",
|
registry_key: "minecraft:melon_stem",
|
||||||
@ -45425,7 +45425,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const MUSIC_DISC_11: Self = Self {
|
||||||
id: 583,
|
id: 583,
|
||||||
registry_key: "minecraft:music_disc_11",
|
registry_key: "minecraft:music_disc_11",
|
||||||
@ -45580,7 +45580,7 @@ impl BedrockItem {
|
|||||||
component_based: true,
|
component_based: true,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const MYCELIUM: Self = Self {
|
||||||
id: 110,
|
id: 110,
|
||||||
registry_key: "minecraft:mycelium",
|
registry_key: "minecraft:mycelium",
|
||||||
@ -45672,7 +45672,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const NETHER_WART_BLOCK: Self = Self {
|
||||||
id: 214,
|
id: 214,
|
||||||
registry_key: "minecraft:nether_wart_block",
|
registry_key: "minecraft:nether_wart_block",
|
||||||
@ -45778,7 +45778,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const NETHERITE_SWORD: Self = Self {
|
||||||
id: 646,
|
id: 646,
|
||||||
registry_key: "minecraft:netherite_sword",
|
registry_key: "minecraft:netherite_sword",
|
||||||
@ -45975,7 +45975,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const OPEN_EYEBLOSSOM: Self = Self {
|
||||||
id: -1018,
|
id: -1018,
|
||||||
registry_key: "minecraft:open_eyeblossom",
|
registry_key: "minecraft:open_eyeblossom",
|
||||||
@ -45983,7 +45983,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const ORANGE_CANDLE: Self = Self {
|
||||||
id: -414,
|
id: -414,
|
||||||
registry_key: "minecraft:orange_candle",
|
registry_key: "minecraft:orange_candle",
|
||||||
@ -46502,7 +46502,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const PINK_CANDLE: Self = Self {
|
||||||
id: -419,
|
id: -419,
|
||||||
registry_key: "minecraft:pink_candle",
|
registry_key: "minecraft:pink_candle",
|
||||||
@ -46636,7 +46636,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const PLANKS: Self = Self {
|
||||||
id: 817,
|
id: 817,
|
||||||
registry_key: "minecraft:planks",
|
registry_key: "minecraft:planks",
|
||||||
@ -46672,7 +46672,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const POLAR_BEAR_SPAWN_EGG: Self = Self {
|
||||||
id: 506,
|
id: 506,
|
||||||
registry_key: "minecraft:polar_bear_spawn_egg",
|
registry_key: "minecraft:polar_bear_spawn_egg",
|
||||||
@ -47009,7 +47009,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const PORTAL: Self = Self {
|
||||||
id: 90,
|
id: 90,
|
||||||
registry_key: "minecraft:portal",
|
registry_key: "minecraft:portal",
|
||||||
@ -47017,7 +47017,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const POTATOES: Self = Self {
|
||||||
id: 142,
|
id: 142,
|
||||||
registry_key: "minecraft:potatoes",
|
registry_key: "minecraft:potatoes",
|
||||||
@ -47151,7 +47151,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const PUFFERFISH_BUCKET: Self = Self {
|
||||||
id: 399,
|
id: 399,
|
||||||
registry_key: "minecraft:pufferfish_bucket",
|
registry_key: "minecraft:pufferfish_bucket",
|
||||||
@ -47173,8 +47173,8 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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_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\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_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 {
|
pub const PUMPKIN_STEM: Self = Self {
|
||||||
id: 104,
|
id: 104,
|
||||||
registry_key: "minecraft:pumpkin_stem",
|
registry_key: "minecraft:pumpkin_stem",
|
||||||
@ -47182,7 +47182,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const PURPLE_CANDLE: Self = Self {
|
||||||
id: -423,
|
id: -423,
|
||||||
registry_key: "minecraft:purple_candle",
|
registry_key: "minecraft:purple_candle",
|
||||||
@ -47365,7 +47365,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const RABBIT_FOOT: Self = Self {
|
||||||
id: 567,
|
id: 567,
|
||||||
registry_key: "minecraft:rabbit_foot",
|
registry_key: "minecraft:rabbit_foot",
|
||||||
@ -47387,7 +47387,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const RAIL: Self = Self {
|
||||||
id: 66,
|
id: 66,
|
||||||
registry_key: "minecraft:rail",
|
registry_key: "minecraft:rail",
|
||||||
@ -47465,7 +47465,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const RED_CANDLE: Self = Self {
|
||||||
id: -427,
|
id: -427,
|
||||||
registry_key: "minecraft:red_candle",
|
registry_key: "minecraft:red_candle",
|
||||||
@ -47809,7 +47809,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const SADDLE: Self = Self {
|
||||||
id: 403,
|
id: 403,
|
||||||
registry_key: "minecraft:saddle",
|
registry_key: "minecraft:saddle",
|
||||||
@ -47817,7 +47817,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const SALMON_BUCKET: Self = Self {
|
||||||
id: 397,
|
id: 397,
|
||||||
registry_key: "minecraft:salmon_bucket",
|
registry_key: "minecraft:salmon_bucket",
|
||||||
@ -48378,7 +48378,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const SPIDER_SPAWN_EGG: Self = Self {
|
||||||
id: 479,
|
id: 479,
|
||||||
registry_key: "minecraft:spider_spawn_egg",
|
registry_key: "minecraft:spider_spawn_egg",
|
||||||
@ -48743,7 +48743,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const STONE_STAIRS: Self = Self {
|
||||||
id: 67,
|
id: 67,
|
||||||
registry_key: "minecraft:stone_stairs",
|
registry_key: "minecraft:stone_stairs",
|
||||||
@ -49101,8 +49101,8 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 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\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 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 {
|
pub const SWEET_BERRY_BUSH: Self = Self {
|
||||||
id: -207,
|
id: -207,
|
||||||
registry_key: "minecraft:sweet_berry_bush",
|
registry_key: "minecraft:sweet_berry_bush",
|
||||||
@ -49201,7 +49201,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const TOTEM_OF_UNDYING: Self = Self {
|
||||||
id: 607,
|
id: 607,
|
||||||
registry_key: "minecraft:totem_of_undying",
|
registry_key: "minecraft:totem_of_undying",
|
||||||
@ -49230,7 +49230,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const TRIAL_SPAWNER: Self = Self {
|
||||||
id: -315,
|
id: -315,
|
||||||
registry_key: "minecraft:trial_spawner",
|
registry_key: "minecraft:trial_spawner",
|
||||||
@ -49259,7 +49259,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const TROPICAL_FISH_BUCKET: Self = Self {
|
||||||
id: 398,
|
id: 398,
|
||||||
registry_key: "minecraft:tropical_fish_bucket",
|
registry_key: "minecraft:tropical_fish_bucket",
|
||||||
@ -50310,8 +50310,8 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 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!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 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 {
|
pub const WHITE_CANDLE: Self = Self {
|
||||||
id: -413,
|
id: -413,
|
||||||
registry_key: "minecraft:white_candle",
|
registry_key: "minecraft:white_candle",
|
||||||
@ -50424,7 +50424,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const WITCH_SPAWN_EGG: Self = Self {
|
||||||
id: 485,
|
id: 485,
|
||||||
registry_key: "minecraft:witch_spawn_egg",
|
registry_key: "minecraft:witch_spawn_egg",
|
||||||
@ -50537,7 +50537,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const WOODEN_SWORD: Self = Self {
|
||||||
id: 339,
|
id: 339,
|
||||||
registry_key: "minecraft:wooden_sword",
|
registry_key: "minecraft:wooden_sword",
|
||||||
@ -50566,7 +50566,7 @@ impl BedrockItem {
|
|||||||
component_based: false,
|
component_based: false,
|
||||||
definition_components: b"\n\0\0",
|
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 {
|
pub const YELLOW_CANDLE: Self = Self {
|
||||||
id: -417,
|
id: -417,
|
||||||
registry_key: "minecraft:yellow_candle",
|
registry_key: "minecraft:yellow_candle",
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
/* This file is generated. Do not edit manually. */
|
/* 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()
|
fn build_placed_features()
|
||||||
-> std::collections::HashMap<pumpkin_data::placed_feature::PlacedFeature, PlacedFeature> {
|
-> std::collections::HashMap<pumpkin_data::placed_feature::PlacedFeature, PlacedFeature> {
|
||||||
use crate::block::BlockStateCodec;
|
use crate::block::BlockStateCodec;
|
||||||
@ -93,9 +93,9 @@ fn build_placed_features()
|
|||||||
),
|
),
|
||||||
placement: vec![
|
placement: vec![
|
||||||
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
|
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
|
||||||
noise_to_count_ratio: 160i32,
|
to_count_ratio: 160i32,
|
||||||
noise_factor: 80f64,
|
factor: 80f64,
|
||||||
noise_offset: 0.3f64,
|
offset: 0.3f64,
|
||||||
}),
|
}),
|
||||||
PlacementModifier::InSquare(SquarePlacementModifier),
|
PlacementModifier::InSquare(SquarePlacementModifier),
|
||||||
PlacementModifier::Heightmap(HeightmapPlacementModifier {
|
PlacementModifier::Heightmap(HeightmapPlacementModifier {
|
||||||
@ -1943,9 +1943,9 @@ fn build_placed_features()
|
|||||||
feature: Feature::Named(pumpkin_data::configured_feature::ConfiguredFeature::Kelp),
|
feature: Feature::Named(pumpkin_data::configured_feature::ConfiguredFeature::Kelp),
|
||||||
placement: vec![
|
placement: vec![
|
||||||
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
|
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
|
||||||
noise_to_count_ratio: 120i32,
|
to_count_ratio: 120i32,
|
||||||
noise_factor: 80f64,
|
factor: 80f64,
|
||||||
noise_offset: 0f64,
|
offset: 0f64,
|
||||||
}),
|
}),
|
||||||
PlacementModifier::InSquare(SquarePlacementModifier),
|
PlacementModifier::InSquare(SquarePlacementModifier),
|
||||||
PlacementModifier::Heightmap(HeightmapPlacementModifier {
|
PlacementModifier::Heightmap(HeightmapPlacementModifier {
|
||||||
@ -1961,9 +1961,9 @@ fn build_placed_features()
|
|||||||
feature: Feature::Named(pumpkin_data::configured_feature::ConfiguredFeature::Kelp),
|
feature: Feature::Named(pumpkin_data::configured_feature::ConfiguredFeature::Kelp),
|
||||||
placement: vec![
|
placement: vec![
|
||||||
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
|
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
|
||||||
noise_to_count_ratio: 80i32,
|
to_count_ratio: 80i32,
|
||||||
noise_factor: 80f64,
|
factor: 80f64,
|
||||||
noise_offset: 0f64,
|
offset: 0f64,
|
||||||
}),
|
}),
|
||||||
PlacementModifier::InSquare(SquarePlacementModifier),
|
PlacementModifier::InSquare(SquarePlacementModifier),
|
||||||
PlacementModifier::Heightmap(HeightmapPlacementModifier {
|
PlacementModifier::Heightmap(HeightmapPlacementModifier {
|
||||||
@ -7587,9 +7587,9 @@ fn build_placed_features()
|
|||||||
),
|
),
|
||||||
placement: vec![
|
placement: vec![
|
||||||
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
|
PlacementModifier::NoiseBasedCount(NoiseBasedCountPlacementModifier {
|
||||||
noise_to_count_ratio: 20i32,
|
to_count_ratio: 20i32,
|
||||||
noise_factor: 400f64,
|
factor: 400f64,
|
||||||
noise_offset: 0f64,
|
offset: 0f64,
|
||||||
}),
|
}),
|
||||||
PlacementModifier::InSquare(SquarePlacementModifier),
|
PlacementModifier::InSquare(SquarePlacementModifier),
|
||||||
PlacementModifier::Heightmap(HeightmapPlacementModifier {
|
PlacementModifier::Heightmap(HeightmapPlacementModifier {
|
||||||
|
|||||||
@ -85,8 +85,8 @@ name = "noise_router"
|
|||||||
harness = false
|
harness = false
|
||||||
|
|
||||||
|
|
||||||
# [lints]
|
[lints]
|
||||||
# workspace = true
|
workspace = true
|
||||||
|
|
||||||
[package.metadata.cargo-machete]
|
[package.metadata.cargo-machete]
|
||||||
ignored = ["serde_json"]
|
ignored = ["serde_json"]
|
||||||
|
|||||||
@ -54,8 +54,8 @@ impl WorldPortalExt for BlockRegistry {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Benchmarks the full pipeline for a GRID_SIZE^2 chunks grid running in parallel
|
/// Benchmarks the full pipeline for a `GRID_SIZE^2` chunks grid running in parallel
|
||||||
/// across THREAD_COUNT rayon threads.
|
/// across `THREAD_COUNT` rayon threads.
|
||||||
fn bench_concurrent_chunk_generation(c: &mut Criterion) {
|
fn bench_concurrent_chunk_generation(c: &mut Criterion) {
|
||||||
let pool = rayon::ThreadPoolBuilder::new()
|
let pool = rayon::ThreadPoolBuilder::new()
|
||||||
.num_threads(THREAD_COUNT)
|
.num_threads(THREAD_COUNT)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
use std::env;
|
use std::env;
|
||||||
|
use std::fmt::Write;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
@ -7,16 +8,32 @@ fn main() {
|
|||||||
let dest_path = Path::new(&out_dir).join("template_embeddings.rs");
|
let dest_path = Path::new(&out_dir).join("template_embeddings.rs");
|
||||||
|
|
||||||
let mut code = String::from(
|
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(
|
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(
|
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(
|
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();
|
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
|
||||||
@ -26,11 +43,12 @@ fn main() {
|
|||||||
process_dir(&assets_dir, "", &mut code, &mut pools);
|
process_dir(&assets_dir, "", &mut code, &mut pools);
|
||||||
|
|
||||||
for (pool_id, elements) in pools {
|
for (pool_id, elements) in pools {
|
||||||
pool_code.push_str(&format!(
|
let _ = writeln!(
|
||||||
" \"minecraft:{pool_id}\" | \"{pool_id}\" => Some(&[\n"
|
pool_code,
|
||||||
));
|
" \"minecraft:{pool_id}\" | \"{pool_id}\" => Some(&["
|
||||||
|
);
|
||||||
for element in elements {
|
for element in elements {
|
||||||
pool_code.push_str(&format!(" \"{element}\",\n"));
|
let _ = writeln!(pool_code, " \"{element}\",");
|
||||||
}
|
}
|
||||||
pool_code.push_str(" ]),\n");
|
pool_code.push_str(" ]),\n");
|
||||||
}
|
}
|
||||||
@ -85,14 +103,24 @@ fn process_dir(
|
|||||||
format!("{prefix}/{name}")
|
format!("{prefix}/{name}")
|
||||||
};
|
};
|
||||||
process_dir(&path, &new_prefix, code, pools);
|
process_dir(&path, &new_prefix, code, pools);
|
||||||
} else if name.ends_with(".nbt") {
|
} else if path
|
||||||
let template_name = format!("{}/{}", prefix, name.strip_suffix(".nbt").unwrap());
|
.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();
|
let abs_path = path.canonicalize().unwrap();
|
||||||
code.push_str(&format!(
|
let _ = writeln!(
|
||||||
" \"{}\" => Some(include_bytes!(r#\"{}\"#)),\n",
|
code,
|
||||||
template_name,
|
" \"{template_name}\" => Some(include_bytes!(r#\"{abs}\"#)),",
|
||||||
abs_path.display()
|
template_name = template_name,
|
||||||
));
|
abs = abs_path.display()
|
||||||
|
);
|
||||||
|
|
||||||
if !prefix.is_empty() {
|
if !prefix.is_empty() {
|
||||||
pools
|
pools
|
||||||
@ -132,10 +160,12 @@ fn process_json_dir(dir: &Path, prefix: &str, code: &mut String) {
|
|||||||
format!("{prefix}/{stem}")
|
format!("{prefix}/{stem}")
|
||||||
};
|
};
|
||||||
let abs_path = path.canonicalize().unwrap();
|
let abs_path = path.canonicalize().unwrap();
|
||||||
code.push_str(&format!(
|
let _ = writeln!(
|
||||||
" \"minecraft:{id}\" | \"{id}\" => Some(include_str!(r#\"{}\"#)),\n",
|
code,
|
||||||
abs_path.display()
|
" \"minecraft:{id}\" | \"{id}\" => Some(include_str!(r#\"{abs}\"#)),",
|
||||||
));
|
id = id,
|
||||||
|
abs = abs_path.display()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -79,10 +79,12 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn wide_area_surface() {
|
fn wide_area_surface() {
|
||||||
|
use crate::generation::generator::{GeneratorInit, VanillaGenerator};
|
||||||
use crate::generation::noise::router::multi_noise_sampler::{
|
use crate::generation::noise::router::multi_noise_sampler::{
|
||||||
MultiNoiseSampler, MultiNoiseSamplerBuilderOptions,
|
MultiNoiseSampler, MultiNoiseSamplerBuilderOptions,
|
||||||
};
|
};
|
||||||
use crate::generation::{biome_coords, positions::chunk_pos};
|
use crate::generation::{biome_coords, positions::chunk_pos};
|
||||||
|
use pumpkin_util::world_seed::Seed;
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
struct BiomeData {
|
struct BiomeData {
|
||||||
x: i32,
|
x: i32,
|
||||||
@ -94,8 +96,6 @@ mod test {
|
|||||||
read_data_from_file!("../../assets/biome_no_blend_no_beard_0.json");
|
read_data_from_file!("../../assets/biome_no_blend_no_beard_0.json");
|
||||||
|
|
||||||
let seed = 0;
|
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);
|
let generator = VanillaGenerator::new(Seed(seed as u64), Dimension::OVERWORLD);
|
||||||
|
|
||||||
for data in expected_data {
|
for data in expected_data {
|
||||||
|
|||||||
@ -50,9 +50,8 @@ impl BlockStateCodec {
|
|||||||
pub fn get_state_id(&self) -> BlockStateId {
|
pub fn get_state_id(&self) -> BlockStateId {
|
||||||
let block = self.name;
|
let block = self.name;
|
||||||
|
|
||||||
let properties_map = match &self.properties {
|
let Some(properties_map) = &self.properties else {
|
||||||
Some(map) => map,
|
return block.default_state.id;
|
||||||
None => return block.default_state.id,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let props_iter = properties_map
|
let props_iter = properties_map
|
||||||
|
|||||||
@ -124,7 +124,7 @@ impl Compression {
|
|||||||
const LZ4_ID: u8 = 4;
|
const LZ4_ID: u8 = 4;
|
||||||
const CUSTOM_ID: u8 = 127;
|
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]>> {
|
fn decode<R: std::io::Read>(mut reader: R, capacity: usize) -> std::io::Result<Box<[u8]>> {
|
||||||
let mut buf = Vec::with_capacity(capacity);
|
let mut buf = Vec::with_capacity(capacity);
|
||||||
reader.read_to_end(&mut buf)?;
|
reader.read_to_end(&mut buf)?;
|
||||||
@ -149,7 +149,7 @@ impl Compression {
|
|||||||
|
|
||||||
const LZ4_COMPRESSION_LEVEL_BASE: u32 = 10;
|
const LZ4_COMPRESSION_LEVEL_BASE: u32 = 10;
|
||||||
fn compress_data(
|
fn compress_data(
|
||||||
&self,
|
self,
|
||||||
uncompressed_data: &[u8],
|
uncompressed_data: &[u8],
|
||||||
compression_level: u32,
|
compression_level: u32,
|
||||||
) -> Result<Vec<u8>, CompressionError> {
|
) -> 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> {
|
impl<S: SingleChunkDataSerializer> Default for AnvilChunkFile<S> {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
@ -498,7 +499,7 @@ impl<S: SingleChunkDataSerializer> Default for AnvilChunkFile<S> {
|
|||||||
write_action: Mutex::new(WriteAction::Pass),
|
write_action: Mutex::new(WriteAction::Pass),
|
||||||
// Two sectors for offset + timestamp
|
// Two sectors for offset + timestamp
|
||||||
end_sector: 2,
|
end_sector: 2,
|
||||||
_dummy: Default::default(),
|
_dummy: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -606,6 +607,7 @@ impl<S: SingleChunkDataSerializer> ChunkSerializer for AnvilChunkFile<S> {
|
|||||||
Ok(chunk_file)
|
Ok(chunk_file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[expect(clippy::too_many_lines)]
|
||||||
async fn update_chunk(
|
async fn update_chunk(
|
||||||
&mut self,
|
&mut self,
|
||||||
chunk: &Self::Data,
|
chunk: &Self::Data,
|
||||||
|
|||||||
@ -309,6 +309,7 @@ pub struct LinearV2File<S: SingleChunkDataSerializer> {
|
|||||||
_dummy: PhantomData<S>,
|
_dummy: PhantomData<S>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[expect(clippy::large_stack_arrays)]
|
||||||
impl<S: SingleChunkDataSerializer> Default for LinearV2File<S> {
|
impl<S: SingleChunkDataSerializer> Default for LinearV2File<S> {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
@ -448,6 +449,7 @@ impl<S: SingleChunkDataSerializer> ChunkSerializer for LinearV2File<S> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[expect(clippy::large_stack_arrays)]
|
||||||
fn read(raw_file: Bytes) -> Result<Self, ChunkReadingError> {
|
fn read(raw_file: Bytes) -> Result<Self, ChunkReadingError> {
|
||||||
let mut buf = raw_file;
|
let mut buf = raw_file;
|
||||||
|
|
||||||
@ -471,7 +473,7 @@ impl<S: SingleChunkDataSerializer> ChunkSerializer for LinearV2File<S> {
|
|||||||
// the per-chunk size field inside each bucket.
|
// the per-chunk size field inside each bucket.
|
||||||
let mut bitmap_raw = [0u8; ChunkBitmap::SIZE];
|
let mut bitmap_raw = [0u8; ChunkBitmap::SIZE];
|
||||||
bitmap_raw.copy_from_slice(&buf.split_to(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)?;
|
let _features = NbtFeatures::from_bytes(&mut buf)?;
|
||||||
|
|
||||||
@ -581,13 +583,13 @@ impl<S: SingleChunkDataSerializer> ChunkSerializer for LinearV2File<S> {
|
|||||||
for chunk in chunks {
|
for chunk in chunks {
|
||||||
let index = Self::get_chunk_index(chunk.x, chunk.y);
|
let index = Self::get_chunk_index(chunk.x, chunk.y);
|
||||||
|
|
||||||
let result = match &self.chunks_data[index] {
|
let result = self.chunks_data[index].as_ref().map_or_else(
|
||||||
Some(data) => match S::from_bytes(data, chunk) {
|
|| LoadedData::Missing(chunk),
|
||||||
|
|data| match S::from_bytes(data, chunk) {
|
||||||
Ok(c) => LoadedData::Loaded(c),
|
Ok(c) => LoadedData::Loaded(c),
|
||||||
Err(err) => LoadedData::Error((chunk, err)),
|
Err(err) => LoadedData::Error((chunk, err)),
|
||||||
},
|
},
|
||||||
None => LoadedData::Missing(chunk),
|
);
|
||||||
};
|
|
||||||
|
|
||||||
if stream.send(result).await.is_err() {
|
if stream.send(result).await.is_err() {
|
||||||
// Receiver dropped — stop early to avoid unnecessary work.
|
// Receiver dropped — stop early to avoid unnecessary work.
|
||||||
|
|||||||
@ -45,7 +45,7 @@ impl SingleChunkDataSerializer for ChunkData {
|
|||||||
fn to_bytes(
|
fn to_bytes(
|
||||||
&self,
|
&self,
|
||||||
) -> Pin<Box<dyn Future<Output = Result<Bytes, ChunkSerializingError>> + Send + '_>> {
|
) -> 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]
|
#[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
|
let is_light_correct = self
|
||||||
.light_populated
|
.light_populated
|
||||||
.load(std::sync::atomic::Ordering::Relaxed);
|
.load(std::sync::atomic::Ordering::Relaxed);
|
||||||
@ -183,13 +190,6 @@ impl ChunkData {
|
|||||||
entities_guard.values().cloned().collect::<Vec<_>>()
|
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 light_lock = self.light_engine.lock().unwrap();
|
||||||
let heightmap_lock = self.heightmap.lock().unwrap();
|
let heightmap_lock = self.heightmap.lock().unwrap();
|
||||||
let block_lock = self.section.block_sections.read().unwrap();
|
let block_lock = self.section.block_sections.read().unwrap();
|
||||||
|
|||||||
@ -183,7 +183,7 @@ mod tests {
|
|||||||
Box::pin(async move { Ok(bytes) })
|
Box::pin(async move { Ok(bytes) })
|
||||||
}
|
}
|
||||||
fn from_bytes(bytes: &Bytes, pos: Vector2<i32>) -> Result<Self, ChunkReadingError> {
|
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| {
|
.map_err(|e| {
|
||||||
ChunkReadingError::ParsingError(
|
ChunkReadingError::ParsingError(
|
||||||
crate::chunk::ChunkParsingError::ErrorDeserializingChunk(e.to_string()),
|
crate::chunk::ChunkParsingError::ErrorDeserializingChunk(e.to_string()),
|
||||||
@ -199,7 +199,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_pump_file_roundtrip() {
|
async fn pump_file_roundtrip() {
|
||||||
let temp_dir = TempDir::new().unwrap();
|
let temp_dir = TempDir::new().unwrap();
|
||||||
let file_path = temp_dir.child("r.0.0.pump");
|
let file_path = temp_dir.child("r.0.0.pump");
|
||||||
|
|
||||||
|
|||||||
@ -79,12 +79,10 @@ impl<S: ChunkSerializer<WriteBackend = PathBuf>> ChunkSerializerLazyLoader<S> {
|
|||||||
if Arc::strong_count(loader) > 1 {
|
if Arc::strong_count(loader) > 1 {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
match loader.internal.get() {
|
loader
|
||||||
// The loader holds 1 strong count; anything above that means
|
.internal
|
||||||
// a read/write guard is still live somewhere.
|
.get()
|
||||||
Some(arc) => Arc::strong_count(arc) == 1,
|
.is_none_or(|arc| Arc::strong_count(arc) == 1)
|
||||||
None => true,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the serializer, initialising it from disk on the first call.
|
/// Returns the serializer, initialising it from disk on the first call.
|
||||||
|
|||||||
@ -129,7 +129,7 @@ impl ChunkSections {
|
|||||||
.read()
|
.read()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.iter()
|
.iter()
|
||||||
.flat_map(|section| section.iter().copied())
|
.flat_map(|section| section.iter())
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ impl ChunkSections {
|
|||||||
.read()
|
.read()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.iter()
|
.iter()
|
||||||
.flat_map(|section| section.iter().copied())
|
.flat_map(|section| section.iter())
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -815,7 +815,7 @@ mod tests {
|
|||||||
assert_eq!(cache[0].random_ticking_block_count, 1);
|
assert_eq!(cache[0].random_ticking_block_count, 1);
|
||||||
assert_eq!(cache[0].random_ticking_fluid_count, 0);
|
assert_eq!(cache[0].random_ticking_fluid_count, 0);
|
||||||
assert!(cache[0].is_randomly_ticking());
|
assert!(cache[0].is_randomly_ticking());
|
||||||
}
|
};
|
||||||
|
|
||||||
sections.set_block_absolute_y(0, min_y, 0, Block::STONE.default_state.id);
|
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_block_count, 0);
|
||||||
assert_eq!(cache[0].random_ticking_fluid_count, 0);
|
assert_eq!(cache[0].random_ticking_fluid_count, 0);
|
||||||
assert!(!cache[0].is_randomly_ticking());
|
assert!(!cache[0].is_randomly_ticking());
|
||||||
}
|
};
|
||||||
|
|
||||||
sections.set_block_absolute_y(0, min_y, 0, Block::LAVA.default_state.id);
|
sections.set_block_absolute_y(0, min_y, 0, Block::LAVA.default_state.id);
|
||||||
{
|
{
|
||||||
@ -836,7 +836,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_heightmap_is_opaque() {
|
fn heightmap_is_opaque() {
|
||||||
use crate::chunk::ChunkHeightmapType;
|
use crate::chunk::ChunkHeightmapType;
|
||||||
|
|
||||||
let air = Block::AIR.default_state;
|
let air = Block::AIR.default_state;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
use std::{collections::HashMap, hash::Hash, iter::repeat_n};
|
use std::{collections::HashMap, hash::Hash};
|
||||||
|
|
||||||
use pumpkin_data::{
|
use pumpkin_data::{
|
||||||
BlockState, BlockStateId,
|
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 {
|
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 {
|
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(
|
PaletteStorage::Indexed(indices) => Box::new(
|
||||||
indices
|
indices
|
||||||
.as_flattened()
|
.as_flattened()
|
||||||
.as_flattened()
|
.as_flattened()
|
||||||
.iter()
|
.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> {
|
impl<V: Default + Hash + Eq + Copy, const DIM: usize> Default for PalettedContainer<V, DIM> {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self::Homogeneous(V::default())
|
Self::Homogeneous(V::default())
|
||||||
|
|||||||
@ -4,6 +4,7 @@ use itertools::Itertools;
|
|||||||
use std::cmp::{Ordering, PartialEq, min};
|
use std::cmp::{Ordering, PartialEq, min};
|
||||||
use std::collections::BinaryHeap;
|
use std::collections::BinaryHeap;
|
||||||
use std::collections::hash_map::Entry;
|
use std::collections::hash_map::Entry;
|
||||||
|
use std::fmt::Write;
|
||||||
use std::mem::swap;
|
use std::mem::swap;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
@ -38,6 +39,7 @@ impl From<HeapNode> for (ChunkPos, i8) {
|
|||||||
|
|
||||||
struct LevelCache(i32, i32, usize, [(i8, i8); 256 * 256]);
|
struct LevelCache(i32, i32, usize, [(i8, i8); 256 * 256]);
|
||||||
|
|
||||||
|
#[expect(clippy::large_stack_arrays)]
|
||||||
impl LevelCache {
|
impl LevelCache {
|
||||||
const fn new() -> Self {
|
const fn new() -> Self {
|
||||||
Self(0, 0, 0, [(0, 0); 256 * 256])
|
Self(0, 0, 0, [(0, 0); 256 * 256])
|
||||||
@ -176,22 +178,21 @@ impl ChunkLoading {
|
|||||||
|
|
||||||
let mut header = "X/Y".to_string();
|
let mut header = "X/Y".to_string();
|
||||||
for y in sy..=ty {
|
for y in sy..=ty {
|
||||||
header.push_str(&format!("{y:4}"));
|
let _ = write!(header, "{y:4}");
|
||||||
}
|
}
|
||||||
|
|
||||||
let grid: String = (sx..=tx)
|
let grid: String = (sx..=tx)
|
||||||
.map(|x| {
|
.map(|x| {
|
||||||
let mut row = format!("{x:3}");
|
let mut row = format!("{x:3}");
|
||||||
row.push_str(
|
let mut cols = String::new();
|
||||||
&(sy..=ty)
|
for y in sy..=ty {
|
||||||
.map(|y| {
|
let _ = write!(
|
||||||
format!(
|
cols,
|
||||||
"{:4}",
|
"{:4}",
|
||||||
map.get(&ChunkPos::new(x, y)).unwrap_or(&Self::MAX_LEVEL)
|
map.get(&ChunkPos::new(x, y)).unwrap_or(&Self::MAX_LEVEL)
|
||||||
)
|
|
||||||
})
|
|
||||||
.collect::<String>(),
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
row.push_str(&cols);
|
||||||
row
|
row
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
@ -393,6 +394,7 @@ impl ChunkLoading {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[expect(clippy::print_stdout)]
|
||||||
fn test() {
|
fn test() {
|
||||||
let mut a = ChunkLoading::new(Arc::new(LevelChannel::new()));
|
let mut a = ChunkLoading::new(Arc::new(LevelChannel::new()));
|
||||||
|
|
||||||
@ -426,24 +428,20 @@ fn test() {
|
|||||||
{
|
{
|
||||||
let mut header = "X/Y".to_string();
|
let mut header = "X/Y".to_string();
|
||||||
for y in sy..=ty {
|
for y in sy..=ty {
|
||||||
header.push_str(&format!("{y:4}"));
|
let _ = write!(header, "{y:4}");
|
||||||
}
|
}
|
||||||
|
|
||||||
let grid: String = (sx..=tx)
|
let grid: String = (sx..=tx)
|
||||||
.map(|x| {
|
.map(|x| {
|
||||||
let mut row = format!("{x:3}");
|
let mut row = format!("{x:3}");
|
||||||
row.push_str(
|
for y in sy..=ty {
|
||||||
&(sy..=ty)
|
let level = a
|
||||||
.map(|y| {
|
.pos_level
|
||||||
format!(
|
|
||||||
"{:4}",
|
|
||||||
a.pos_level
|
|
||||||
.get(&ChunkPos::new(x, y))
|
.get(&ChunkPos::new(x, y))
|
||||||
.unwrap_or(&ChunkLoading::MAX_LEVEL)
|
.unwrap_or(&ChunkLoading::MAX_LEVEL);
|
||||||
)
|
|
||||||
})
|
let _ = write!(row, "{level:4}");
|
||||||
.collect::<String>(),
|
}
|
||||||
);
|
|
||||||
row
|
row
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
use crate::chunk::{ChunkData, ChunkLight, ChunkSections};
|
use crate::chunk::{ChunkData, ChunkLight, ChunkSections};
|
||||||
use crate::generation::biome_coords;
|
use crate::generation::biome_coords;
|
||||||
|
use crate::tick::scheduler::ChunkTickScheduler;
|
||||||
use pumpkin_config::lighting::LightingEngineConfig;
|
use pumpkin_config::lighting::LightingEngineConfig;
|
||||||
use pumpkin_data::dimension::Dimension;
|
use pumpkin_data::dimension::Dimension;
|
||||||
use rustc_hash::FxHashMap;
|
use rustc_hash::FxHashMap;
|
||||||
@ -38,6 +39,7 @@ pub enum StagedChunkEnum {
|
|||||||
Full,
|
Full,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[expect(clippy::fallible_impl_from)]
|
||||||
impl From<u8> for StagedChunkEnum {
|
impl From<u8> for StagedChunkEnum {
|
||||||
fn from(v: u8) -> Self {
|
fn from(v: u8) -> Self {
|
||||||
match v {
|
match v {
|
||||||
@ -68,14 +70,14 @@ impl From<ChunkStatus> for StagedChunkEnum {
|
|||||||
ChunkStatus::Surface => Self::Surface,
|
ChunkStatus::Surface => Self::Surface,
|
||||||
ChunkStatus::Carvers => Self::Carvers,
|
ChunkStatus::Carvers => Self::Carvers,
|
||||||
ChunkStatus::Features => Self::Features,
|
ChunkStatus::Features => Self::Features,
|
||||||
ChunkStatus::InitializeLight => Self::Lighting,
|
ChunkStatus::InitializeLight | ChunkStatus::Light => Self::Lighting,
|
||||||
ChunkStatus::Light => Self::Lighting,
|
|
||||||
ChunkStatus::Spawn => Self::Spawn,
|
ChunkStatus::Spawn => Self::Spawn,
|
||||||
ChunkStatus::Full => Self::Full,
|
ChunkStatus::Full => Self::Full,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[expect(clippy::fallible_impl_from)]
|
||||||
impl From<StagedChunkEnum> for ChunkStatus {
|
impl From<StagedChunkEnum> for ChunkStatus {
|
||||||
fn from(status: StagedChunkEnum) -> Self {
|
fn from(status: StagedChunkEnum) -> Self {
|
||||||
match status {
|
match status {
|
||||||
@ -90,7 +92,7 @@ impl From<StagedChunkEnum> for ChunkStatus {
|
|||||||
StagedChunkEnum::Lighting => Self::Light,
|
StagedChunkEnum::Lighting => Self::Light,
|
||||||
StagedChunkEnum::Spawn => Self::Spawn,
|
StagedChunkEnum::Spawn => Self::Spawn,
|
||||||
StagedChunkEnum::Full => Self::Full,
|
StagedChunkEnum::Full => Self::Full,
|
||||||
_ => panic!(),
|
StagedChunkEnum::None => panic!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,36 +132,16 @@ impl StagedChunkEnum {
|
|||||||
pub const fn get_direct_radius(self) -> i32 {
|
pub const fn get_direct_radius(self) -> i32 {
|
||||||
// self exclude
|
// self exclude
|
||||||
match self {
|
match self {
|
||||||
Self::Empty => 0,
|
Self::Features | Self::Lighting | Self::Spawn | Self::Full => 1,
|
||||||
Self::StructureStart => 0,
|
_ => 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!(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub const fn get_write_radius(self) -> i32 {
|
pub const fn get_write_radius(self) -> i32 {
|
||||||
// self exclude
|
// self exclude
|
||||||
match self {
|
match self {
|
||||||
Self::Empty => 0,
|
Self::Features | Self::Lighting | Self::Spawn => 1,
|
||||||
Self::StructureStart => 0,
|
_ => 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!(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[must_use]
|
#[must_use]
|
||||||
@ -229,12 +211,12 @@ impl Chunk {
|
|||||||
self,
|
self,
|
||||||
Self::Level(Arc::new(ChunkData {
|
Self::Level(Arc::new(ChunkData {
|
||||||
section: ChunkSections::new(0, 0),
|
section: ChunkSections::new(0, 0),
|
||||||
heightmap: Default::default(),
|
heightmap: Mutex::default(),
|
||||||
x: 0,
|
x: 0,
|
||||||
z: 0,
|
z: 0,
|
||||||
block_ticks: Default::default(),
|
block_ticks: ChunkTickScheduler::default(),
|
||||||
fluid_ticks: Default::default(),
|
fluid_ticks: ChunkTickScheduler::default(),
|
||||||
pending_block_entities: Default::default(),
|
pending_block_entities: Mutex::default(),
|
||||||
light_engine: Mutex::new(ChunkLight::default()),
|
light_engine: Mutex::new(ChunkLight::default()),
|
||||||
light_populated: AtomicBool::new(false),
|
light_populated: AtomicBool::new(false),
|
||||||
status: ChunkStatus::Empty,
|
status: ChunkStatus::Empty,
|
||||||
@ -322,12 +304,12 @@ impl Chunk {
|
|||||||
light_engine: Mutex::new(light_data),
|
light_engine: Mutex::new(light_data),
|
||||||
light_populated: AtomicBool::new(is_lit),
|
light_populated: AtomicBool::new(is_lit),
|
||||||
section: sections,
|
section: sections,
|
||||||
heightmap: Default::default(),
|
heightmap: Mutex::default(),
|
||||||
x: proto_chunk.x,
|
x: proto_chunk.x,
|
||||||
z: proto_chunk.z,
|
z: proto_chunk.z,
|
||||||
dirty: AtomicBool::new(true),
|
dirty: AtomicBool::new(true),
|
||||||
block_ticks: Default::default(),
|
block_ticks: ChunkTickScheduler::default(),
|
||||||
fluid_ticks: Default::default(),
|
fluid_ticks: ChunkTickScheduler::default(),
|
||||||
pending_block_entities: Mutex::new(pending_block_entities),
|
pending_block_entities: Mutex::new(pending_block_entities),
|
||||||
status: proto_chunk.stage.into(),
|
status: proto_chunk.stage.into(),
|
||||||
blending_data: proto_chunk.blending_data,
|
blending_data: proto_chunk.blending_data,
|
||||||
|
|||||||
@ -28,7 +28,7 @@ impl HeightLimitView for Cache {
|
|||||||
let mid = ((self.size * self.size) >> 1) as usize;
|
let mid = ((self.size * self.size) >> 1) as usize;
|
||||||
match &self.chunks[mid] {
|
match &self.chunks[mid] {
|
||||||
Chunk::Proto(chunk) => chunk.height(),
|
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;
|
let mid = ((self.size * self.size) >> 1) as usize;
|
||||||
match &self.chunks[mid] {
|
match &self.chunks[mid] {
|
||||||
Chunk::Proto(chunk) => chunk.bottom_y(),
|
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 {
|
fn get_top_y(&self, heightmap: &HeightMap, x: i32, z: i32) -> i32 {
|
||||||
match heightmap {
|
match heightmap {
|
||||||
HeightMap::WorldSurfaceWg => self.top_block_height_exclusive(x, z),
|
HeightMap::WorldSurfaceWg | HeightMap::WorldSurface => {
|
||||||
HeightMap::WorldSurface => self.top_block_height_exclusive(x, z),
|
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::OceanFloorWg | HeightMap::OceanFloor => {
|
||||||
|
self.ocean_floor_height_exclusive(x, z)
|
||||||
|
}
|
||||||
HeightMap::MotionBlocking => self.top_motion_blocking_block_height_exclusive(x, z),
|
HeightMap::MotionBlocking => self.top_motion_blocking_block_height_exclusive(x, z),
|
||||||
HeightMap::MotionBlockingNoLeaves => {
|
HeightMap::MotionBlockingNoLeaves => {
|
||||||
self.top_motion_blocking_block_no_leaves_height_exclusive(x, z)
|
self.top_motion_blocking_block_no_leaves_height_exclusive(x, z)
|
||||||
|
|||||||
@ -32,7 +32,7 @@ impl PartialEq for TaskHeapNode {
|
|||||||
}
|
}
|
||||||
impl TaskHeapNode {
|
impl TaskHeapNode {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub(crate) fn node_key(&self) -> NodeKey {
|
pub(crate) const fn node_key(&self) -> NodeKey {
|
||||||
self.1
|
self.1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -129,7 +129,7 @@ impl GenerationSchedule {
|
|||||||
let handle = thread::Builder::new()
|
let handle = thread::Builder::new()
|
||||||
.name(format!("Gen-{i}"))
|
.name(format!("Gen-{i}"))
|
||||||
.spawn(move || {
|
.spawn(move || {
|
||||||
generation_work(recv_gen, send_chunk, level_clone);
|
generation_work(&recv_gen, &send_chunk, &level_clone);
|
||||||
})
|
})
|
||||||
.expect("Failed to spawn Generation Thread");
|
.expect("Failed to spawn Generation Thread");
|
||||||
|
|
||||||
@ -168,11 +168,11 @@ impl GenerationSchedule {
|
|||||||
send_chunk,
|
send_chunk,
|
||||||
gen_pool,
|
gen_pool,
|
||||||
listener,
|
listener,
|
||||||
chunk_map: Default::default(),
|
chunk_map: HashMap::default(),
|
||||||
lighting_config,
|
lighting_config,
|
||||||
last_unload: std::time::Instant::now(),
|
last_unload: std::time::Instant::now(),
|
||||||
};
|
};
|
||||||
scheduler.work(level_sched);
|
scheduler.work(&level_sched);
|
||||||
})
|
})
|
||||||
.expect("Failed to spawn Scheduler Thread");
|
.expect("Failed to spawn Scheduler Thread");
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ impl GenerationSchedule {
|
|||||||
}
|
}
|
||||||
chunk.dirty.store(true, Relaxed);
|
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 {
|
fn resort_work(&mut self, new_data: (Option<LevelChange>, Option<Vec<ChunkPos>>)) -> bool {
|
||||||
if new_data.0.is_none() && new_data.1.is_none() {
|
if new_data.0.is_none() && new_data.1.is_none() {
|
||||||
return false;
|
return false;
|
||||||
@ -719,6 +720,7 @@ impl GenerationSchedule {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[expect(clippy::too_many_lines)]
|
||||||
fn receive_chunk(&mut self, pos: ChunkPos, data: RecvChunk) {
|
fn receive_chunk(&mut self, pos: ChunkPos, data: RecvChunk) {
|
||||||
match data {
|
match data {
|
||||||
RecvChunk::IO(chunk) => {
|
RecvChunk::IO(chunk) => {
|
||||||
@ -800,10 +802,9 @@ impl GenerationSchedule {
|
|||||||
holder.current_stage = StagedChunkEnum::Full;
|
holder.current_stage = StagedChunkEnum::Full;
|
||||||
|
|
||||||
let was_public = holder.public;
|
let was_public = holder.public;
|
||||||
|
|
||||||
if was_public {
|
|
||||||
self.apply_lighting_override(&chunk);
|
self.apply_lighting_override(&chunk);
|
||||||
let public_chunk = chunk.clone();
|
let public_chunk = chunk.clone();
|
||||||
|
if was_public {
|
||||||
self.public_chunk_map.insert(new_pos, public_chunk);
|
self.public_chunk_map.insert(new_pos, public_chunk);
|
||||||
info!(
|
info!(
|
||||||
"Notifying players: regenerated chunk at {:?} (was already public)",
|
"Notifying players: regenerated chunk at {:?} (was already public)",
|
||||||
@ -812,8 +813,6 @@ impl GenerationSchedule {
|
|||||||
self.listener.process_new_chunk(new_pos, &chunk);
|
self.listener.process_new_chunk(new_pos, &chunk);
|
||||||
holder.chunk = Some(Chunk::Level(chunk));
|
holder.chunk = Some(Chunk::Level(chunk));
|
||||||
} else {
|
} else {
|
||||||
self.apply_lighting_override(&chunk);
|
|
||||||
let public_chunk = chunk.clone();
|
|
||||||
holder.chunk = Some(Chunk::Level(chunk));
|
holder.chunk = Some(Chunk::Level(chunk));
|
||||||
let result =
|
let result =
|
||||||
self.public_chunk_map.insert(new_pos, public_chunk);
|
self.public_chunk_map.insert(new_pos, public_chunk);
|
||||||
@ -985,7 +984,8 @@ impl GenerationSchedule {
|
|||||||
self.running_task_count -= 1;
|
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!(
|
debug!(
|
||||||
"schedule thread start id: {:?} name: {}",
|
"schedule thread start id: {:?} name: {}",
|
||||||
thread::current().id(),
|
thread::current().id(),
|
||||||
@ -1175,12 +1175,11 @@ impl GenerationSchedule {
|
|||||||
let holder = self.chunk_map.get_mut(&new_pos).unwrap();
|
let holder = self.chunk_map.get_mut(&new_pos).unwrap();
|
||||||
let mut tmp = None;
|
let mut tmp = None;
|
||||||
swap(&mut tmp, &mut holder.chunk);
|
swap(&mut tmp, &mut holder.chunk);
|
||||||
let tmp = match tmp {
|
let Some(tmp) = tmp else {
|
||||||
Some(v) => v,
|
panic!(
|
||||||
None => panic!(
|
|
||||||
"Missing chunk for position {:?} while processing generation task for {:?} stage {:?}",
|
"Missing chunk for position {:?} while processing generation task for {:?} stage {:?}",
|
||||||
new_pos, node.pos, node.stage
|
new_pos, node.pos, node.stage
|
||||||
),
|
)
|
||||||
};
|
};
|
||||||
match tmp {
|
match tmp {
|
||||||
Chunk::Level(chunk) => {
|
Chunk::Level(chunk) => {
|
||||||
@ -1268,22 +1267,18 @@ impl GenerationSchedule {
|
|||||||
}
|
}
|
||||||
Err(crossfire::compat::RecvTimeoutError::Disconnected) => break,
|
Err(crossfire::compat::RecvTimeoutError::Disconnected) => break,
|
||||||
}
|
}
|
||||||
if self.queue_dirty {
|
|
||||||
self.sort_queue();
|
|
||||||
self.queue_dirty = false;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// No tasks in flight, wait indefinitely for LevelChannel changes
|
// No tasks in flight, wait indefinitely for LevelChannel changes
|
||||||
debug_assert!(self.debug_check());
|
debug_assert!(self.debug_check());
|
||||||
debug_assert_eq!(self.running_task_count, 0);
|
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 {
|
if self.queue_dirty {
|
||||||
self.sort_queue();
|
self.sort_queue();
|
||||||
self.queue_dirty = false;
|
self.queue_dirty = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
info!(
|
info!(
|
||||||
"schedule: waiting for {} generation tasks to finish",
|
"schedule: waiting for {} generation tasks to finish",
|
||||||
self.running_task_count
|
self.running_task_count
|
||||||
|
|||||||
@ -42,7 +42,7 @@ fn ensure_dependency_chain_builds_multistage_chain() {
|
|||||||
// Ensure tasks were created, present in the DAG, and correctly chained
|
// Ensure tasks were created, present in the DAG, and correctly chained
|
||||||
for idx in start..=end {
|
for idx in start..=end {
|
||||||
let key = holder.tasks[idx];
|
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");
|
let node = graph.nodes.get(key).expect("graph missing node");
|
||||||
|
|
||||||
@ -51,8 +51,7 @@ fn ensure_dependency_chain_builds_multistage_chain() {
|
|||||||
} else {
|
} else {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
node.in_degree, 1,
|
node.in_degree, 1,
|
||||||
"Intermediate task {} should have in_degree of 1",
|
"Intermediate task {idx} should have in_degree of 1"
|
||||||
idx
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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
|
// Ensure the function returned early without creating any tasks or queueing anything
|
||||||
for task in holder.tasks.iter() {
|
for task in &holder.tasks {
|
||||||
assert!(
|
assert!(
|
||||||
task.is_null(),
|
task.is_null(),
|
||||||
"No tasks should be created if the stage requirement is already met"
|
"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]
|
#[test]
|
||||||
fn test_cancellation_path_decrements_in_degree() {
|
fn cancellation_path_decrements_in_degree() {
|
||||||
let mut graph = DAG::default();
|
let mut graph = DAG::default();
|
||||||
|
|
||||||
// Create a task that is waiting (in_degree = 1)
|
// Create a task that is waiting (in_degree = 1)
|
||||||
|
|||||||
@ -28,8 +28,8 @@ pub enum RecvChunk {
|
|||||||
/// Checks if a chunk needs relighting based on the current lighting configuration
|
/// 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
|
/// 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)
|
/// is now running in default mode (which needs proper lighting calculation)
|
||||||
fn needs_relighting(chunk: &crate::chunk::ChunkData, config: &LightingEngineConfig) -> bool {
|
fn needs_relighting(chunk: &crate::chunk::ChunkData, config: LightingEngineConfig) -> bool {
|
||||||
if *config != LightingEngineConfig::Default {
|
if config != LightingEngineConfig::Default {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,9 +87,8 @@ pub async fn io_read_work(
|
|||||||
});
|
});
|
||||||
|
|
||||||
for _ in 0..batch_len {
|
for _ in 0..batch_len {
|
||||||
let data = match t_recv.recv().await {
|
let Some(data) = t_recv.recv().await else {
|
||||||
Some(res) => res,
|
break;
|
||||||
None => break,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
match data {
|
match data {
|
||||||
@ -97,7 +96,7 @@ pub async fn io_read_work(
|
|||||||
let pos = ChunkPos::new(chunk.x, chunk.z);
|
let pos = ChunkPos::new(chunk.x, chunk.z);
|
||||||
if chunk.status == ChunkStatus::Full {
|
if chunk.status == ChunkStatus::Full {
|
||||||
// Relighting check
|
// Relighting check
|
||||||
let needs_relight = needs_relighting(&chunk, &level.lighting_config);
|
let needs_relight = needs_relighting(&chunk, level.lighting_config);
|
||||||
|
|
||||||
if needs_relight {
|
if needs_relight {
|
||||||
debug!(
|
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) {
|
pub async fn io_write_work(recv: AsyncRx<Vec<(ChunkPos, Chunk)>>, level: Arc<Level>, lock: IOLock) {
|
||||||
loop {
|
loop {
|
||||||
// Don't check cancel_token here (keep saving chunks)
|
// Don't check cancel_token here (keep saving chunks)
|
||||||
let data = match recv.recv().await {
|
let Ok(data) = recv.recv().await else { break };
|
||||||
Ok(d) => d,
|
|
||||||
Err(_) => break,
|
|
||||||
};
|
|
||||||
// debug!("io write thread receive chunks size {}", data.len());
|
// debug!("io write thread receive chunks size {}", data.len());
|
||||||
let mut vec = Vec::with_capacity(data.len());
|
let mut vec = Vec::with_capacity(data.len());
|
||||||
let mut positions = 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(
|
pub fn generation_work(
|
||||||
recv: crossfire::compat::MRx<(ChunkPos, Cache, StagedChunkEnum)>,
|
recv: &crossfire::compat::MRx<(ChunkPos, Cache, StagedChunkEnum)>,
|
||||||
send: crossfire::compat::MTx<(ChunkPos, RecvChunk)>,
|
send: &crossfire::compat::MTx<(ChunkPos, RecvChunk)>,
|
||||||
level: Arc<Level>,
|
level: &Arc<Level>,
|
||||||
) {
|
) {
|
||||||
let settings = GenerationSettings::from_dimension(&level.world_gen.dimension);
|
let settings = GenerationSettings::from_dimension(&level.world_gen.dimension);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let (pos, cache, stage) = if let Ok(data) = recv.recv() {
|
let Ok((pos, cache, stage)) = recv.recv() else {
|
||||||
data
|
|
||||||
} else {
|
|
||||||
debug!("generation channel closed, exiting");
|
debug!("generation channel closed, exiting");
|
||||||
break;
|
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() {
|
if send.send((pos, result)).is_err() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -220,8 +220,8 @@ impl Blender {
|
|||||||
{
|
{
|
||||||
let chunk_x = biome_coords::to_chunk(cell_x);
|
let chunk_x = biome_coords::to_chunk(cell_x);
|
||||||
let chunk_z = biome_coords::to_chunk(cell_z);
|
let chunk_z = biome_coords::to_chunk(cell_z);
|
||||||
let min_x = (cell_x & 3) == 0;
|
let min_x = cell_x.trailing_zeros() >= 2;
|
||||||
let min_z = (cell_z & 3) == 0;
|
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);
|
let mut value = self.get_data_value(&getter, chunk_x, chunk_z, cell_x, cell_y, cell_z);
|
||||||
if value == f64::MAX {
|
if value == f64::MAX {
|
||||||
@ -259,16 +259,16 @@ impl Blender {
|
|||||||
F: Fn(&BlendingData, i32, i32, i32) -> f64,
|
F: Fn(&BlendingData, i32, i32, i32) -> f64,
|
||||||
{
|
{
|
||||||
let packed = (chunk_x as u32 as u64) | ((chunk_z as u32 as u64) << 32);
|
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(
|
getter(
|
||||||
data,
|
data,
|
||||||
cell_x - biome_coords::from_chunk(chunk_x),
|
cell_x - biome_coords::from_chunk(chunk_x),
|
||||||
cell_y,
|
cell_y,
|
||||||
cell_z - biome_coords::from_chunk(chunk_z),
|
cell_z - biome_coords::from_chunk(chunk_z),
|
||||||
)
|
)
|
||||||
} else {
|
})
|
||||||
f64::MAX
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
@ -323,11 +323,9 @@ pub struct BlenderBiomeSupplier<'a> {
|
|||||||
|
|
||||||
impl BiomeSupplier for BlenderBiomeSupplier<'_> {
|
impl BiomeSupplier for BlenderBiomeSupplier<'_> {
|
||||||
fn biome(&self, x: i32, y: i32, z: i32, sampler: &mut MultiNoiseSampler<'_>) -> &'static Biome {
|
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) {
|
self.blender
|
||||||
blended
|
.blend_biome(x, y, z, &self.shift_noise)
|
||||||
} else {
|
.map_or_else(|| self.base.biome(x, y, z, sampler), |blended| blended)
|
||||||
self.base.biome(x, y, z, sampler)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -27,7 +27,13 @@ pub enum BlockStateProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl 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 {
|
match self {
|
||||||
Self::NoiseThreshold(provider) => provider.get(random, pos),
|
Self::NoiseThreshold(provider) => provider.get(random, pos),
|
||||||
Self::NoiseProvider(provider) => provider.get(pos),
|
Self::NoiseProvider(provider) => provider.get(pos),
|
||||||
@ -35,9 +41,8 @@ impl BlockStateProvider {
|
|||||||
Self::Weighted(provider) => provider.get(random),
|
Self::Weighted(provider) => provider.get(random),
|
||||||
Self::DualNoise(provider) => provider.get(pos),
|
Self::DualNoise(provider) => provider.get(pos),
|
||||||
Self::Pillar(provider) => provider.get(pos),
|
Self::Pillar(provider) => provider.get(pos),
|
||||||
Self::RandomizedInt(provider) => provider.get(random, pos),
|
Self::RandomizedInt(provider) => provider.get(random, pos, chunk, block_registry),
|
||||||
// Without chunk context, fall through to fallback (rules cannot be evaluated)
|
Self::Rule(provider) => provider.get(block_registry, chunk, random, pos),
|
||||||
Self::Rule(_provider) => todo!(), //provider.get(random, pos),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +55,7 @@ impl BlockStateProvider {
|
|||||||
) -> &'static BlockState {
|
) -> &'static BlockState {
|
||||||
match self {
|
match self {
|
||||||
Self::Rule(provider) => provider.get(block_registry, chunk, random, pos),
|
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> {
|
) -> Option<&'static BlockState> {
|
||||||
match self {
|
match self {
|
||||||
Self::Rule(provider) => provider.get_optional(block_registry, chunk, random, pos),
|
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 {
|
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
|
// 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);
|
let mut list = Vec::with_capacity(mapped as usize);
|
||||||
for i in 0..mapped {
|
for i in 0..mapped {
|
||||||
let value = self.get_slow_noise(i as f64 * 54545.0, 0.0, i as f64 * 34234.0, &sampler);
|
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);
|
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 {
|
fn get_slow_noise(&self, x: f64, y: f64, z: f64, sampler: &DoublePerlinNoiseSampler) -> f64 {
|
||||||
@ -228,14 +244,10 @@ pub struct NoiseBlockStateProvider {
|
|||||||
impl NoiseBlockStateProvider {
|
impl NoiseBlockStateProvider {
|
||||||
pub fn get(&self, pos: BlockPos) -> &'static BlockState {
|
pub fn get(&self, pos: BlockPos) -> &'static BlockState {
|
||||||
let value = self.base.get_noise(pos);
|
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(
|
fn get_state_by_value(states: &[&'static BlockState], value: f64) -> &'static BlockState {
|
||||||
&self,
|
|
||||||
states: &[&'static BlockState],
|
|
||||||
value: f64,
|
|
||||||
) -> &'static BlockState {
|
|
||||||
let val = f64::midpoint(1.0, value).clamp(0.0, 0.9999);
|
let val = f64::midpoint(1.0, value).clamp(0.0, 0.9999);
|
||||||
states[(val * states.len() as f64) as usize]
|
states[(val * states.len() as f64) as usize]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,7 +40,7 @@ impl Carver for CanyonCarver {
|
|||||||
let distance =
|
let distance =
|
||||||
(max_distance as f32 * canyon_config.shape.distance_factor.get(random)) as i32;
|
(max_distance as f32 * canyon_config.shape.distance_factor.get(random)) as i32;
|
||||||
|
|
||||||
self.do_carve(
|
Self::do_carve(
|
||||||
config,
|
config,
|
||||||
chunk,
|
chunk,
|
||||||
random.next_i64(),
|
random.next_i64(),
|
||||||
@ -61,7 +61,6 @@ impl Carver for CanyonCarver {
|
|||||||
impl CanyonCarver {
|
impl CanyonCarver {
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn do_carve(
|
fn do_carve(
|
||||||
&self,
|
|
||||||
config: &CarverConfig,
|
config: &CarverConfig,
|
||||||
chunk: &mut ProtoChunk,
|
chunk: &mut ProtoChunk,
|
||||||
tunnel_seed: i64,
|
tunnel_seed: i64,
|
||||||
@ -86,7 +85,7 @@ impl CanyonCarver {
|
|||||||
))
|
))
|
||||||
};
|
};
|
||||||
let width_factor_per_height =
|
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 y_rota = 0.0f32;
|
||||||
let mut x_rota = 0.0f32;
|
let mut x_rota = 0.0f32;
|
||||||
|
|
||||||
@ -102,7 +101,7 @@ impl CanyonCarver {
|
|||||||
.shape
|
.shape
|
||||||
.horizontal_radius_factor
|
.horizontal_radius_factor
|
||||||
.get(&mut random) as f64;
|
.get(&mut random) as f64;
|
||||||
vertical_radius = self.update_vertical_radius(
|
vertical_radius = Self::update_vertical_radius(
|
||||||
config,
|
config,
|
||||||
&mut random,
|
&mut random,
|
||||||
vertical_radius,
|
vertical_radius,
|
||||||
@ -125,11 +124,11 @@ impl CanyonCarver {
|
|||||||
y_rota += (random.next_f32() - random.next_f32()) * random.next_f32() * 4.0;
|
y_rota += (random.next_f32() - random.next_f32()) * random.next_f32() * 4.0;
|
||||||
|
|
||||||
if random.next_bounded_i32(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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.carve_ellipsoid(
|
Self::carve_ellipsoid(
|
||||||
chunk,
|
chunk,
|
||||||
config,
|
config,
|
||||||
x,
|
x,
|
||||||
@ -144,7 +143,6 @@ impl CanyonCarver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn init_width_factors(
|
fn init_width_factors(
|
||||||
&self,
|
|
||||||
depth: usize,
|
depth: usize,
|
||||||
config: &CarverConfig,
|
config: &CarverConfig,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
@ -165,7 +163,6 @@ impl CanyonCarver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn update_vertical_radius(
|
fn update_vertical_radius(
|
||||||
&self,
|
|
||||||
config: &CarverConfig,
|
config: &CarverConfig,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
vertical_radius: f64,
|
vertical_radius: f64,
|
||||||
@ -183,7 +180,6 @@ impl CanyonCarver {
|
|||||||
|
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn can_reach(
|
fn can_reach(
|
||||||
&self,
|
|
||||||
chunk_x: i32,
|
chunk_x: i32,
|
||||||
chunk_z: i32,
|
chunk_z: i32,
|
||||||
x: f64,
|
x: f64,
|
||||||
@ -203,7 +199,6 @@ impl CanyonCarver {
|
|||||||
|
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn carve_ellipsoid(
|
fn carve_ellipsoid(
|
||||||
&self,
|
|
||||||
chunk: &mut ProtoChunk,
|
chunk: &mut ProtoChunk,
|
||||||
config: &CarverConfig,
|
config: &CarverConfig,
|
||||||
x: f64,
|
x: f64,
|
||||||
@ -224,22 +219,22 @@ impl CanyonCarver {
|
|||||||
let chunk_min_x = chunk.x << 4;
|
let chunk_min_x = chunk.x << 4;
|
||||||
let chunk_min_z = chunk.z << 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 x_index_min = ((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_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 min_y = ((y - vertical_radius).floor() as i32 - 1).max(chunk.bottom_y() as i32 + 1);
|
||||||
let protected_blocks_on_top = 7;
|
let protected_blocks_on_top = 7;
|
||||||
let max_y = ((y + vertical_radius).floor() as i32 + 1)
|
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);
|
.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 z_index_min = ((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_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 world_x = chunk_min_x + x_index;
|
||||||
let xd = (world_x as f64 + 0.5 - x) / horizontal_radius;
|
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 world_z = chunk_min_z + z_index;
|
||||||
let zd = (world_z as f64 + 0.5 - z) / horizontal_radius;
|
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() {
|
for world_y in (min_y + 1..=max_y).rev() {
|
||||||
let yd = (world_y as f64 - 0.5 - y) / vertical_radius;
|
let yd = (world_y as f64 - 0.5 - y) / vertical_radius;
|
||||||
|
|
||||||
if !self.should_skip(
|
if !Self::should_skip(
|
||||||
width_factor_per_height,
|
width_factor_per_height,
|
||||||
xd,
|
xd,
|
||||||
yd,
|
yd,
|
||||||
@ -266,7 +261,6 @@ impl CanyonCarver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn should_skip(
|
fn should_skip(
|
||||||
&self,
|
|
||||||
width_factor_per_height: &[f32],
|
width_factor_per_height: &[f32],
|
||||||
xd: f64,
|
xd: f64,
|
||||||
yd: f64,
|
yd: f64,
|
||||||
|
|||||||
@ -289,22 +289,22 @@ impl CaveCarver {
|
|||||||
let chunk_min_x = chunk.x << 4;
|
let chunk_min_x = chunk.x << 4;
|
||||||
let chunk_min_z = chunk.z << 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 x_index_min = ((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_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 min_y = ((y - vertical_radius).floor() as i32 - 1).max(chunk.bottom_y() as i32 + 1);
|
||||||
let protected_blocks_on_top = 7;
|
let protected_blocks_on_top = 7;
|
||||||
let max_y = ((y + vertical_radius).floor() as i32 + 1)
|
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);
|
.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 z_index_min = ((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_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 world_x = chunk_min_x + x_index;
|
||||||
let xd = (world_x as f64 + 0.5 - x) / horizontal_radius;
|
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 world_z = chunk_min_z + z_index;
|
||||||
let zd = (world_z as f64 + 0.5 - z) / horizontal_radius;
|
let zd = (world_z as f64 + 0.5 - z) / horizontal_radius;
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
let canyon_carver = canyon::CanyonCarver;
|
||||||
|
|
||||||
for dx in -radius..=radius {
|
for dx in -radius..=radius {
|
||||||
|
|||||||
@ -145,6 +145,7 @@ pub enum ConfiguredFeature {
|
|||||||
|
|
||||||
impl ConfiguredFeature {
|
impl ConfiguredFeature {
|
||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
|
#[expect(clippy::too_many_lines)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
@ -193,7 +194,7 @@ impl ConfiguredFeature {
|
|||||||
pos,
|
pos,
|
||||||
),
|
),
|
||||||
Self::PointedDripstone(feature) => feature.generate(chunk, random, pos),
|
Self::PointedDripstone(feature) => feature.generate(chunk, random, pos),
|
||||||
Self::CoralMushroom(feature) => feature.generate(
|
Self::CoralMushroom(_feature) => CoralMushroomFeature::generate(
|
||||||
chunk,
|
chunk,
|
||||||
block_registry,
|
block_registry,
|
||||||
min_y,
|
min_y,
|
||||||
@ -202,7 +203,7 @@ impl ConfiguredFeature {
|
|||||||
random,
|
random,
|
||||||
pos,
|
pos,
|
||||||
),
|
),
|
||||||
Self::CoralTree(feature) => feature.generate(
|
Self::CoralTree(_feature) => CoralTreeFeature::generate(
|
||||||
chunk,
|
chunk,
|
||||||
block_registry,
|
block_registry,
|
||||||
min_y,
|
min_y,
|
||||||
@ -211,7 +212,7 @@ impl ConfiguredFeature {
|
|||||||
random,
|
random,
|
||||||
pos,
|
pos,
|
||||||
),
|
),
|
||||||
Self::CoralClaw(feature) => feature.generate(
|
Self::CoralClaw(_feature) => CoralClawFeature::generate(
|
||||||
chunk,
|
chunk,
|
||||||
block_registry,
|
block_registry,
|
||||||
min_y,
|
min_y,
|
||||||
@ -220,7 +221,7 @@ impl ConfiguredFeature {
|
|||||||
random,
|
random,
|
||||||
pos,
|
pos,
|
||||||
),
|
),
|
||||||
Self::EndPlatform(feature) => feature.generate(
|
Self::EndPlatform(_feature) => EndPlatformFeature::generate(
|
||||||
chunk,
|
chunk,
|
||||||
block_registry,
|
block_registry,
|
||||||
min_y,
|
min_y,
|
||||||
@ -240,7 +241,9 @@ impl ConfiguredFeature {
|
|||||||
),
|
),
|
||||||
Self::SpringFeature(feature) => feature.generate(block_registry, chunk, random, pos),
|
Self::SpringFeature(feature) => feature.generate(block_registry, chunk, random, pos),
|
||||||
Self::SimpleBlock(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,
|
chunk,
|
||||||
block_registry,
|
block_registry,
|
||||||
min_y,
|
min_y,
|
||||||
@ -249,17 +252,8 @@ impl ConfiguredFeature {
|
|||||||
random,
|
random,
|
||||||
pos,
|
pos,
|
||||||
),
|
),
|
||||||
Self::NoBonemealFlower(feature) => feature.generate(
|
Self::DesertWell(_feature) => {
|
||||||
chunk,
|
DesertWellFeature::generate(chunk, min_y, height, feature_name, random, pos)
|
||||||
block_registry,
|
|
||||||
min_y,
|
|
||||||
height,
|
|
||||||
feature_name,
|
|
||||||
random,
|
|
||||||
pos,
|
|
||||||
),
|
|
||||||
Self::DesertWell(feature) => {
|
|
||||||
feature.generate(chunk, min_y, height, feature_name, random, pos)
|
|
||||||
}
|
}
|
||||||
Self::Fossil(feature) => feature.generate(chunk, min_y, height, random, pos),
|
Self::Fossil(feature) => feature.generate(chunk, min_y, height, random, pos),
|
||||||
Self::Bamboo(feature) => feature.generate(
|
Self::Bamboo(feature) => feature.generate(
|
||||||
@ -280,15 +274,6 @@ impl ConfiguredFeature {
|
|||||||
random,
|
random,
|
||||||
pos,
|
pos,
|
||||||
),
|
),
|
||||||
Self::RandomPatch(feature) => feature.generate(
|
|
||||||
chunk,
|
|
||||||
block_registry,
|
|
||||||
min_y,
|
|
||||||
height,
|
|
||||||
feature_name,
|
|
||||||
random,
|
|
||||||
pos,
|
|
||||||
),
|
|
||||||
Self::RandomBooleanSelector(feature) => feature.generate(
|
Self::RandomBooleanSelector(feature) => feature.generate(
|
||||||
chunk,
|
chunk,
|
||||||
block_registry,
|
block_registry,
|
||||||
@ -325,7 +310,7 @@ impl ConfiguredFeature {
|
|||||||
random,
|
random,
|
||||||
pos,
|
pos,
|
||||||
),
|
),
|
||||||
Self::Vines(feature) => feature.generate(
|
Self::Vines(_feature) => VinesFeature::generate(
|
||||||
chunk,
|
chunk,
|
||||||
block_registry,
|
block_registry,
|
||||||
min_y,
|
min_y,
|
||||||
@ -355,8 +340,8 @@ impl ConfiguredFeature {
|
|||||||
random,
|
random,
|
||||||
pos,
|
pos,
|
||||||
),
|
),
|
||||||
Self::Kelp(feature) => {
|
Self::Kelp(_feature) => {
|
||||||
feature.generate(chunk, min_y, height, feature_name, random, pos)
|
KelpFeature::generate(chunk, min_y, height, feature_name, random, pos)
|
||||||
}
|
}
|
||||||
Self::Ore(feature) => feature.generate(
|
Self::Ore(feature) => feature.generate(
|
||||||
chunk,
|
chunk,
|
||||||
@ -376,12 +361,12 @@ impl ConfiguredFeature {
|
|||||||
random,
|
random,
|
||||||
pos,
|
pos,
|
||||||
),
|
),
|
||||||
Self::MonsterRoom(feature) => {
|
Self::MonsterRoom(_feature) => {
|
||||||
feature.generate(chunk, min_y, height, feature_name, random, pos)
|
DungeonFeature::generate(chunk, min_y, height, feature_name, random, pos)
|
||||||
}
|
}
|
||||||
Self::BlueIce(feature) => feature.generate(chunk, random, pos),
|
Self::BlueIce(_feature) => BlueIceFeature::generate(chunk, random, pos),
|
||||||
Self::GlowstoneBlob(feature) => {
|
Self::GlowstoneBlob(_feature) => {
|
||||||
feature.generate(chunk, min_y, height, feature_name, random, pos)
|
GlowstoneBlobFeature::generate(chunk, min_y, height, feature_name, random, pos)
|
||||||
}
|
}
|
||||||
Self::Disk(feature) => feature.generate(
|
Self::Disk(feature) => feature.generate(
|
||||||
chunk,
|
chunk,
|
||||||
@ -402,22 +387,22 @@ impl ConfiguredFeature {
|
|||||||
random,
|
random,
|
||||||
pos,
|
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::ForestRock(feature) => feature.generate(chunk, random, pos),
|
||||||
Self::FreezeTopLayer(feature) => {
|
Self::FreezeTopLayer(_feature) => {
|
||||||
feature.generate(chunk, min_y, height, feature_name, random, pos)
|
FreezeTopLayerFeature::generate(chunk, min_y, height, feature_name, random, pos)
|
||||||
}
|
}
|
||||||
Self::IceSpike(feature) => {
|
Self::IceSpike(_feature) => {
|
||||||
feature.generate(chunk, min_y, height, feature_name, random, pos)
|
IceSpikeFeature::generate(chunk, min_y, height, feature_name, random, pos)
|
||||||
}
|
}
|
||||||
Self::Iceberg(feature) => {
|
Self::Iceberg(feature) => {
|
||||||
feature.generate(chunk, min_y, height, feature_name, random, pos)
|
feature.generate(chunk, min_y, height, feature_name, random, pos)
|
||||||
}
|
}
|
||||||
Self::ChorusPlant(feature) => {
|
Self::ChorusPlant(_feature) => {
|
||||||
feature.generate(chunk, min_y, height, feature_name, random, pos)
|
ChorusPlantFeature::generate(chunk, min_y, height, feature_name, random, pos)
|
||||||
}
|
}
|
||||||
Self::EndIsland(feature) => {
|
Self::EndIsland(_feature) => {
|
||||||
feature.generate(chunk, min_y, height, feature_name, random, pos)
|
EndIslandFeature::generate(chunk, min_y, height, feature_name, random, pos)
|
||||||
}
|
}
|
||||||
Self::SculkPatch(feature) => feature.generate(block_registry, chunk, random, pos),
|
Self::SculkPatch(feature) => feature.generate(block_registry, chunk, random, pos),
|
||||||
Self::RootSystem(feature) => feature.generate(
|
Self::RootSystem(feature) => feature.generate(
|
||||||
|
|||||||
@ -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)
|
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!(
|
matches!(
|
||||||
id,
|
id,
|
||||||
BlockId::LAVA
|
BlockId::LAVA
|
||||||
|
|||||||
@ -6,11 +6,10 @@ use pumpkin_util::{
|
|||||||
|
|
||||||
use crate::generation::proto_chunk::GenerationCache;
|
use crate::generation::proto_chunk::GenerationCache;
|
||||||
|
|
||||||
pub struct BasaltPillarFeature {}
|
pub struct BasaltPillarFeature;
|
||||||
|
|
||||||
impl BasaltPillarFeature {
|
impl BasaltPillarFeature {
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
|
|||||||
@ -69,7 +69,7 @@ impl BlockColumnFeature {
|
|||||||
}
|
}
|
||||||
let layer = &self.layers[l];
|
let layer = &self.layers[l];
|
||||||
for _n in 0..*m {
|
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);
|
chunk.set_block_state(&mutable.0, state);
|
||||||
mutable = mutable.offset(self.direction.to_offset());
|
mutable = mutable.offset(self.direction.to_offset());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct BlockPileFeature {
|
pub struct BlockPileFeature;
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -8,11 +8,10 @@ use crate::generation::proto_chunk::GenerationCache;
|
|||||||
|
|
||||||
const SEA_LEVEL: i32 = 63; // TODO: use getSeaLevel() instead of hardcoding
|
const SEA_LEVEL: i32 = 63; // TODO: use getSeaLevel() instead of hardcoding
|
||||||
|
|
||||||
pub struct BlueIceFeature {}
|
pub struct BlueIceFeature;
|
||||||
|
|
||||||
impl BlueIceFeature {
|
impl BlueIceFeature {
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct BonusChestFeature {
|
pub struct BonusChestFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -13,11 +13,10 @@ use pumpkin_util::{
|
|||||||
|
|
||||||
use crate::generation::proto_chunk::GenerationCache;
|
use crate::generation::proto_chunk::GenerationCache;
|
||||||
|
|
||||||
pub struct ChorusPlantFeature {}
|
pub struct ChorusPlantFeature;
|
||||||
|
|
||||||
impl ChorusPlantFeature {
|
impl ChorusPlantFeature {
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
_height: u16,
|
_height: u16,
|
||||||
|
|||||||
@ -12,7 +12,6 @@ pub struct CoralClawFeature;
|
|||||||
impl CoralClawFeature {
|
impl CoralClawFeature {
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
@ -36,27 +35,26 @@ impl CoralClawFeature {
|
|||||||
let j = random.next_bounded_i32(2) + 1;
|
let j = random.next_bounded_i32(2) + 1;
|
||||||
pos = pos.offset(direction2.to_offset());
|
pos = pos.offset(direction2.to_offset());
|
||||||
|
|
||||||
let direction3;
|
let branch_direction;
|
||||||
let k;
|
|
||||||
|
|
||||||
if direction2 == direction {
|
let k = if direction2 == direction {
|
||||||
direction3 = direction;
|
branch_direction = direction;
|
||||||
k = random.next_bounded_i32(3) + 2;
|
random.next_bounded_i32(3) + 2
|
||||||
} else {
|
} else {
|
||||||
pos = pos.up();
|
pos = pos.up();
|
||||||
//let _directions = [direction2, BlockDirection::Up];
|
//let _directions = [direction2, BlockDirection::Up];
|
||||||
direction3 = direction2; // TODO: make this random
|
branch_direction = direction2; // TODO: make this random
|
||||||
k = random.next_bounded_i32(3) + 5;
|
random.next_bounded_i32(3) + 5
|
||||||
}
|
};
|
||||||
|
|
||||||
for _ in 0..j {
|
for _ in 0..j {
|
||||||
if !CoralFeature::generate_coral_piece(chunk, block_registry, random, block, pos) {
|
if !CoralFeature::generate_coral_piece(chunk, block_registry, random, block, pos) {
|
||||||
break;
|
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();
|
pos = pos.up();
|
||||||
|
|
||||||
for _l in 0..k {
|
for _l in 0..k {
|
||||||
|
|||||||
@ -12,7 +12,6 @@ pub struct CoralMushroomFeature;
|
|||||||
impl CoralMushroomFeature {
|
impl CoralMushroomFeature {
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
@ -51,9 +50,7 @@ impl CoralMushroomFeature {
|
|||||||
block,
|
block,
|
||||||
pos,
|
pos,
|
||||||
))
|
))
|
||||||
{
|
{}
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,6 @@ pub struct CoralTreeFeature;
|
|||||||
impl CoralTreeFeature {
|
impl CoralTreeFeature {
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct DeltaFeatureFeature {
|
pub struct DeltaFeatureFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -14,8 +14,8 @@ impl DesertWellFeature {
|
|||||||
const SLAB: Block = Block::SANDSTONE_SLAB;
|
const SLAB: Block = Block::SANDSTONE_SLAB;
|
||||||
const WALL: Block = Block::SANDSTONE;
|
const WALL: Block = Block::SANDSTONE;
|
||||||
|
|
||||||
|
#[expect(clippy::too_many_lines)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
_height: u16,
|
_height: u16,
|
||||||
@ -23,12 +23,13 @@ impl DesertWellFeature {
|
|||||||
_random: &mut RandomGenerator,
|
_random: &mut RandomGenerator,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
|
const CAN_GENERATE: Block = Block::SAND;
|
||||||
|
|
||||||
let mut block_pos = pos.up();
|
let mut block_pos = pos.up();
|
||||||
while chunk.is_air(&block_pos.0) && block_pos.0.y > chunk.bottom_y() as i32 + 2 {
|
while chunk.is_air(&block_pos.0) && block_pos.0.y > chunk.bottom_y() as i32 + 2 {
|
||||||
block_pos = block_pos.down();
|
block_pos = block_pos.down();
|
||||||
}
|
}
|
||||||
let block = GenerationCache::get_block_state(chunk, &pos.0).to_block_id();
|
let block = GenerationCache::get_block_state(chunk, &pos.0).to_block_id();
|
||||||
const CAN_GENERATE: Block = Block::SAND;
|
|
||||||
if CAN_GENERATE.id != block {
|
if CAN_GENERATE.id != block {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct DripstoneClusterFeature {
|
pub struct DripstoneClusterFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct LargeDripstoneFeature {
|
pub struct LargeDripstoneFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -6,10 +6,10 @@ use pumpkin_util::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub struct SmallDripstoneFeature {
|
pub struct SmallDripstoneFeature {
|
||||||
pub chance_of_taller_dripstone: f32,
|
pub taller_dripstone: f32,
|
||||||
pub chance_of_directional_spread: f32,
|
pub directional_spread: f32,
|
||||||
pub chance_of_spread_radius2: f32,
|
pub spread_radius2: f32,
|
||||||
pub chance_of_spread_radius3: f32,
|
pub spread_radius3: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SmallDripstoneFeature {
|
impl SmallDripstoneFeature {
|
||||||
@ -62,17 +62,17 @@ impl SmallDripstoneFeature {
|
|||||||
) {
|
) {
|
||||||
super::gen_dripstone(chunk, pos);
|
super::gen_dripstone(chunk, pos);
|
||||||
for dir in BlockDirection::horizontal() {
|
for dir in BlockDirection::horizontal() {
|
||||||
if random.next_f32() > self.chance_of_directional_spread {
|
if random.next_f32() > self.directional_spread {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let pos = pos.offset(dir.to_offset());
|
let pos = pos.offset(dir.to_offset());
|
||||||
super::gen_dripstone(chunk, pos);
|
super::gen_dripstone(chunk, pos);
|
||||||
if random.next_f32() > self.chance_of_spread_radius2 {
|
if random.next_f32() > self.spread_radius2 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let pos = pos.offset(BlockDirection::random(random).to_offset());
|
let pos = pos.offset(BlockDirection::random(random).to_offset());
|
||||||
super::gen_dripstone(chunk, pos);
|
super::gen_dripstone(chunk, pos);
|
||||||
if random.next_f32() > self.chance_of_spread_radius3 {
|
if random.next_f32() > self.spread_radius3 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let pos = pos.offset(BlockDirection::random(random).to_offset());
|
let pos = pos.offset(BlockDirection::random(random).to_offset());
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct EndGatewayFeature {
|
pub struct EndGatewayFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -6,11 +6,10 @@ use pumpkin_util::{
|
|||||||
|
|
||||||
use crate::generation::proto_chunk::GenerationCache;
|
use crate::generation::proto_chunk::GenerationCache;
|
||||||
|
|
||||||
pub struct EndIslandFeature {}
|
pub struct EndIslandFeature;
|
||||||
|
|
||||||
impl EndIslandFeature {
|
impl EndIslandFeature {
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
_height: u16,
|
_height: u16,
|
||||||
|
|||||||
@ -10,9 +10,7 @@ use crate::world::WorldPortalExt;
|
|||||||
pub struct EndPlatformFeature;
|
pub struct EndPlatformFeature;
|
||||||
|
|
||||||
impl EndPlatformFeature {
|
impl EndPlatformFeature {
|
||||||
#[expect(clippy::too_many_arguments)]
|
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_block_registry: &dyn WorldPortalExt,
|
_block_registry: &dyn WorldPortalExt,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
|
|||||||
@ -133,16 +133,16 @@ impl EndSpikeFeature {
|
|||||||
for dx in -2i32..=2 {
|
for dx in -2i32..=2 {
|
||||||
for dz in -2i32..=2 {
|
for dz in -2i32..=2 {
|
||||||
// Only place on perimeter walls and the top frame
|
// Only place on perimeter walls and the top frame
|
||||||
let on_x_wall = dx.abs() == 2;
|
let x_wall_present = dx.abs() == 2;
|
||||||
let on_z_wall = dz.abs() == 2;
|
let z_wall_present = dz.abs() == 2;
|
||||||
let on_top = dy == 3;
|
let on_top = dy == 3;
|
||||||
if !on_x_wall && !on_z_wall && !on_top {
|
if !x_wall_present && !z_wall_present && !on_top {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connectivity rules
|
// Connectivity rules
|
||||||
let x_edge = on_x_wall || on_top;
|
let x_edge = x_wall_present || on_top;
|
||||||
let z_edge = on_z_wall || on_top;
|
let z_edge = z_wall_present || on_top;
|
||||||
|
|
||||||
let mut props = OakFenceLikeProperties::default(&Block::IRON_BARS);
|
let mut props = OakFenceLikeProperties::default(&Block::IRON_BARS);
|
||||||
props.north = x_edge && dz != 2;
|
props.north = x_edge && dz != 2;
|
||||||
|
|||||||
@ -8,7 +8,6 @@ pub struct FallenTreeFeature {
|
|||||||
|
|
||||||
impl FallenTreeFeature {
|
impl FallenTreeFeature {
|
||||||
pub const fn generate(
|
pub const fn generate(
|
||||||
&self,
|
|
||||||
_chunk: &mut ProtoChunk,
|
_chunk: &mut ProtoChunk,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
_height: u16,
|
_height: u16,
|
||||||
@ -19,12 +18,12 @@ impl FallenTreeFeature {
|
|||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gen_stump(&self, chunk: &mut ProtoChunk, random: &mut RandomGenerator, pos: BlockPos) {
|
// fn gen_stump(&self, chunk: &mut ProtoChunk, random: &mut RandomGenerator, pos: BlockPos) {
|
||||||
chunk.set_block_state(
|
// // chunk.set_block_state(
|
||||||
pos.0.x,
|
// // pos.0.x,
|
||||||
pos.0.y,
|
// // pos.0.y,
|
||||||
pos.0.z,
|
// // pos.0.z,
|
||||||
self.trunk_provider.get(random, pos),
|
// // self.trunk_provider.get(random, pos, chunk),
|
||||||
);
|
// // );
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct FillLayerFeature {
|
pub struct FillLayerFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
use pumpkin_data::{Block, BlockState, Rotation, tag};
|
use pumpkin_data::{Block, BlockState, Mirror, Rotation, tag};
|
||||||
use pumpkin_util::{
|
use pumpkin_util::{
|
||||||
HeightMap,
|
HeightMap,
|
||||||
math::{block_box::BlockBox, position::BlockPos, vector3::Vector3},
|
math::{block_box::BlockBox, position::BlockPos, vector3::Vector3},
|
||||||
@ -190,8 +190,7 @@ fn place_fossil_template<T: GenerationCache>(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(state) =
|
if let Some(state) = BlockStateResolver::resolve(palette_entry, rotation, Mirror::default())
|
||||||
BlockStateResolver::resolve(palette_entry, rotation, Default::default())
|
|
||||||
{
|
{
|
||||||
chunk.set_block_state(&world_pos, processor.process(state));
|
chunk.set_block_state(&world_pos, processor.process(state));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,11 +6,10 @@ use pumpkin_util::random::RandomGenerator;
|
|||||||
|
|
||||||
const SEA_LEVEL: i32 = 63; // TODO: getSeaLevel() from the worldgen context instead of hardcoding
|
const SEA_LEVEL: i32 = 63; // TODO: getSeaLevel() from the worldgen context instead of hardcoding
|
||||||
|
|
||||||
pub struct FreezeTopLayerFeature {}
|
pub struct FreezeTopLayerFeature;
|
||||||
|
|
||||||
impl FreezeTopLayerFeature {
|
impl FreezeTopLayerFeature {
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
_height: u16,
|
_height: u16,
|
||||||
|
|||||||
@ -74,7 +74,6 @@ pub struct GeodeFeature {
|
|||||||
|
|
||||||
impl GeodeFeature {
|
impl GeodeFeature {
|
||||||
fn safe_set_block<T: GenerationCache>(
|
fn safe_set_block<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
state: &'static BlockState,
|
state: &'static BlockState,
|
||||||
@ -90,18 +89,17 @@ impl GeodeFeature {
|
|||||||
let state = codec.get_state();
|
let state = codec.get_state();
|
||||||
// Obtain the block corresponding to this state id
|
// Obtain the block corresponding to this state id
|
||||||
let block = Block::from_state_id(state.id);
|
let block = Block::from_state_id(state.id);
|
||||||
if let Some(props) = block.properties(state.id) {
|
block
|
||||||
props.to_props().iter().any(|(k, _)| *k == property)
|
.properties(state.id)
|
||||||
} else {
|
.is_some_and(|props| props.to_props().iter().any(|(k, _)| *k == property))
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
|
#[allow(clippy::too_many_lines)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
_height: u16,
|
_height: u16,
|
||||||
_feature_name: pumpkin_data::placed_feature::PlacedFeature,
|
_feature_name: pumpkin_data::placed_feature::PlacedFeature,
|
||||||
@ -263,25 +261,35 @@ impl GeodeFeature {
|
|||||||
&& dist_sum_shell < inner_air
|
&& dist_sum_shell < inner_air
|
||||||
{
|
{
|
||||||
// Carve crack
|
// Carve crack
|
||||||
self.safe_set_block(
|
Self::safe_set_block(
|
||||||
chunk,
|
chunk,
|
||||||
point_inside,
|
point_inside,
|
||||||
BlockStateId::AIR.to_state(),
|
BlockStateId::AIR.to_state(),
|
||||||
&can_replace_pred,
|
&can_replace_pred,
|
||||||
);
|
);
|
||||||
} else if dist_sum_shell >= inner_air {
|
} else if dist_sum_shell >= inner_air {
|
||||||
let state = self.filling_provider.get(random, point_inside);
|
let state =
|
||||||
self.safe_set_block(chunk, point_inside, state, &can_replace_pred);
|
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 {
|
} else if dist_sum_shell >= innermost_block_layer {
|
||||||
let use_alternate = random.next_f32() < self.use_alternate_layer0_chance as f32;
|
let use_alternate = random.next_f32() < self.use_alternate_layer0_chance as f32;
|
||||||
if use_alternate {
|
if use_alternate {
|
||||||
let state = self
|
let state = self.alternate_inner_layer_provider.get(
|
||||||
.alternate_inner_layer_provider
|
random,
|
||||||
.get(random, point_inside);
|
point_inside,
|
||||||
self.safe_set_block(chunk, point_inside, state, &can_replace_pred);
|
chunk,
|
||||||
|
block_registry,
|
||||||
|
);
|
||||||
|
Self::safe_set_block(chunk, point_inside, state, &can_replace_pred);
|
||||||
} else {
|
} else {
|
||||||
let state = self.inner_layer_provider.get(random, point_inside);
|
let state = self.inner_layer_provider.get(
|
||||||
self.safe_set_block(chunk, point_inside, state, &can_replace_pred);
|
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)
|
if (!self.placements_require_layer0_alternate || use_alternate)
|
||||||
&& random.next_f32() < self.use_potential_placements_chance as f32
|
&& random.next_f32() < self.use_potential_placements_chance as f32
|
||||||
@ -289,11 +297,15 @@ impl GeodeFeature {
|
|||||||
potential_crystal_placements.push(point_inside);
|
potential_crystal_placements.push(point_inside);
|
||||||
}
|
}
|
||||||
} else if dist_sum_shell >= inner_crust {
|
} else if dist_sum_shell >= inner_crust {
|
||||||
let state = self.middle_layer_provider.get(random, point_inside);
|
let state =
|
||||||
self.safe_set_block(chunk, point_inside, state, &can_replace_pred);
|
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 {
|
} else if dist_sum_shell >= outer_crust {
|
||||||
let state = self.outer_layer_provider.get(random, point_inside);
|
let state =
|
||||||
self.safe_set_block(chunk, point_inside, state, &can_replace_pred);
|
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();
|
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
|
// Only place one crystal per budding block per geode gen
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -6,11 +6,10 @@ use pumpkin_util::{
|
|||||||
|
|
||||||
use crate::generation::proto_chunk::GenerationCache;
|
use crate::generation::proto_chunk::GenerationCache;
|
||||||
|
|
||||||
pub struct GlowstoneBlobFeature {}
|
pub struct GlowstoneBlobFeature;
|
||||||
|
|
||||||
impl GlowstoneBlobFeature {
|
impl GlowstoneBlobFeature {
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
_height: u16,
|
_height: u16,
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct HugeBrownMushroomFeature {
|
pub struct HugeBrownMushroomFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct HugeFungusFeature {
|
pub struct HugeFungusFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct HugeRedMushroomFeature {
|
pub struct HugeRedMushroomFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -6,11 +6,10 @@ use pumpkin_util::{
|
|||||||
|
|
||||||
use crate::generation::proto_chunk::GenerationCache;
|
use crate::generation::proto_chunk::GenerationCache;
|
||||||
|
|
||||||
pub struct IceSpikeFeature {}
|
pub struct IceSpikeFeature;
|
||||||
|
|
||||||
impl IceSpikeFeature {
|
impl IceSpikeFeature {
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
_height: u16,
|
_height: u16,
|
||||||
|
|||||||
@ -15,6 +15,7 @@ pub struct IcebergFeature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl IcebergFeature {
|
impl IcebergFeature {
|
||||||
|
#[expect(clippy::too_many_lines)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
@ -52,12 +53,12 @@ impl IcebergFeature {
|
|||||||
for zo in -a..a {
|
for zo in -a..a {
|
||||||
for y_off in 0..over_water_height {
|
for y_off in 0..over_water_height {
|
||||||
let radius = if is_ellipse {
|
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 {
|
} 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 {
|
if is_ellipse || xo < radius {
|
||||||
self.generate_iceberg_block(
|
Self::generate_iceberg_block(
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
&origin,
|
&origin,
|
||||||
@ -78,7 +79,7 @@ impl IcebergFeature {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.smooth(
|
Self::smooth(
|
||||||
chunk,
|
chunk,
|
||||||
&origin,
|
&origin,
|
||||||
width,
|
width,
|
||||||
@ -99,14 +100,14 @@ impl IcebergFeature {
|
|||||||
} else {
|
} else {
|
||||||
a
|
a
|
||||||
};
|
};
|
||||||
let radius = self.height_dependent_radius_steep(
|
let radius = Self::height_dependent_radius_steep(
|
||||||
random,
|
random,
|
||||||
-y_off,
|
-y_off,
|
||||||
under_water_height,
|
under_water_height,
|
||||||
width,
|
width,
|
||||||
);
|
);
|
||||||
if xo < radius {
|
if xo < radius {
|
||||||
self.generate_iceberg_block(
|
Self::generate_iceberg_block(
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
&origin,
|
&origin,
|
||||||
@ -133,7 +134,7 @@ impl IcebergFeature {
|
|||||||
random.next_f64() > 0.7
|
random.next_f64() > 0.7
|
||||||
};
|
};
|
||||||
if do_cut_out {
|
if do_cut_out {
|
||||||
self.generate_cut_out(
|
Self::generate_cut_out(
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
width,
|
width,
|
||||||
@ -149,9 +150,8 @@ impl IcebergFeature {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments, clippy::useless_let_if_seq)]
|
||||||
fn generate_cut_out<T: GenerationCache>(
|
fn generate_cut_out<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
width: i32,
|
width: i32,
|
||||||
@ -165,16 +165,17 @@ impl IcebergFeature {
|
|||||||
let random_sign_x: i32 = if random.next_bool() { -1 } else { 1 };
|
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 random_sign_z: i32 = if random.next_bool() { -1 } else { 1 };
|
||||||
|
|
||||||
let mut x_off = random.next_bounded_i32((width / 2 - 2).max(1));
|
let mut x_off = if random.next_bool() {
|
||||||
if random.next_bool() {
|
width / 2 + 1 - random.next_bounded_i32((width - width / 2 - 1).max(1))
|
||||||
x_off = 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 = 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 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 {
|
if is_ellipse {
|
||||||
let v = random.next_bounded_i32((shape_ellipse_a - 5).max(1));
|
let v = random.next_bounded_i32((shape_ellipse_a - 5).max(1));
|
||||||
x_off = v;
|
x_off = v;
|
||||||
@ -190,8 +191,8 @@ impl IcebergFeature {
|
|||||||
|
|
||||||
// Above-water carve
|
// Above-water carve
|
||||||
for y_off in 0..(height - 3) {
|
for y_off in 0..(height - 3) {
|
||||||
let radius = self.height_dependent_radius_round(random, y_off, height, width);
|
let radius = Self::height_dependent_radius_round(random, y_off, height, width);
|
||||||
self.carve(
|
Self::carve(
|
||||||
chunk,
|
chunk,
|
||||||
radius,
|
radius,
|
||||||
y_off,
|
y_off,
|
||||||
@ -207,8 +208,8 @@ impl IcebergFeature {
|
|||||||
// Below-water carve
|
// Below-water carve
|
||||||
let mut y_off = -1i32;
|
let mut y_off = -1i32;
|
||||||
while y_off > -height + random.next_bounded_i32(5) {
|
while y_off > -height + random.next_bounded_i32(5) {
|
||||||
let radius = self.height_dependent_radius_steep(random, -y_off, height, width);
|
let radius = Self::height_dependent_radius_steep(random, -y_off, height, width);
|
||||||
self.carve(
|
Self::carve(
|
||||||
chunk,
|
chunk,
|
||||||
radius,
|
radius,
|
||||||
y_off,
|
y_off,
|
||||||
@ -225,7 +226,6 @@ impl IcebergFeature {
|
|||||||
|
|
||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
fn carve<T: GenerationCache>(
|
fn carve<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
radius: i32,
|
radius: i32,
|
||||||
y_off: i32,
|
y_off: i32,
|
||||||
@ -241,7 +241,7 @@ impl IcebergFeature {
|
|||||||
|
|
||||||
for xo in -a..a {
|
for xo in -a..a {
|
||||||
for zo in -a..a {
|
for zo in -a..a {
|
||||||
let signed_dist = self.signed_distance_ellipse(
|
let signed_dist = Self::signed_distance_ellipse(
|
||||||
xo,
|
xo,
|
||||||
zo,
|
zo,
|
||||||
local_origin.x,
|
local_origin.x,
|
||||||
@ -259,7 +259,7 @@ impl IcebergFeature {
|
|||||||
chunk.set_block_state(&pos, Block::WATER.default_state);
|
chunk.set_block_state(&pos, Block::WATER.default_state);
|
||||||
} else {
|
} else {
|
||||||
chunk.set_block_state(&pos, Block::AIR.default_state);
|
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 above = pos.add(&Vector3::new(0, 1, 0));
|
||||||
let raw = GenerationCache::get_block_state(chunk, &above);
|
let raw = GenerationCache::get_block_state(chunk, &above);
|
||||||
if raw.to_block_id() == Block::SNOW.id {
|
if raw.to_block_id() == Block::SNOW.id {
|
||||||
@ -277,7 +277,6 @@ impl IcebergFeature {
|
|||||||
|
|
||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
fn generate_iceberg_block<T: GenerationCache>(
|
fn generate_iceberg_block<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
origin: &Vector3<i32>,
|
origin: &Vector3<i32>,
|
||||||
@ -294,17 +293,17 @@ impl IcebergFeature {
|
|||||||
main_block: &'static BlockState,
|
main_block: &'static BlockState,
|
||||||
) {
|
) {
|
||||||
let signed_dist = if is_ellipse {
|
let signed_dist = if is_ellipse {
|
||||||
self.signed_distance_ellipse(
|
Self::signed_distance_ellipse(
|
||||||
xo,
|
xo,
|
||||||
zo,
|
zo,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
a,
|
a,
|
||||||
self.get_ellipse_c(y_off, height, shape_ellipse_c),
|
Self::get_ellipse_c(y_off, height, shape_ellipse_c),
|
||||||
shape_angle,
|
shape_angle,
|
||||||
)
|
)
|
||||||
} else {
|
} 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 {
|
if signed_dist < 0.0 {
|
||||||
@ -317,7 +316,7 @@ impl IcebergFeature {
|
|||||||
if signed_dist > compare_val && random.next_f64() > 0.9 {
|
if signed_dist > compare_val && random.next_f64() > 0.9 {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.set_iceberg_block(
|
Self::set_iceberg_block(
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
&pos,
|
&pos,
|
||||||
@ -332,7 +331,6 @@ impl IcebergFeature {
|
|||||||
|
|
||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
fn set_iceberg_block<T: GenerationCache>(
|
fn set_iceberg_block<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
pos: &Vector3<i32>,
|
pos: &Vector3<i32>,
|
||||||
@ -362,7 +360,6 @@ impl IcebergFeature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn smooth<T: GenerationCache>(
|
fn smooth<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
origin: &Vector3<i32>,
|
origin: &Vector3<i32>,
|
||||||
width: 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 {
|
const fn get_ellipse_c(y_off: i32, height: i32, shape_ellipse_c: i32) -> i32 {
|
||||||
let mut c = shape_ellipse_c;
|
|
||||||
if y_off > 0 && height - y_off <= 3 {
|
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(
|
fn signed_distance_circle(
|
||||||
&self,
|
|
||||||
xo: i32,
|
xo: i32,
|
||||||
zo: i32,
|
zo: i32,
|
||||||
ox: i32,
|
ox: i32,
|
||||||
@ -435,9 +430,7 @@ impl IcebergFeature {
|
|||||||
- (radius as f64).powi(2)
|
- (radius as f64).powi(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[expect(clippy::too_many_arguments)]
|
|
||||||
fn signed_distance_ellipse(
|
fn signed_distance_ellipse(
|
||||||
&self,
|
|
||||||
xo: i32,
|
xo: i32,
|
||||||
zo: i32,
|
zo: i32,
|
||||||
ox: i32,
|
ox: i32,
|
||||||
@ -455,7 +448,6 @@ impl IcebergFeature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn height_dependent_radius_round(
|
fn height_dependent_radius_round(
|
||||||
&self,
|
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
y_off: i32,
|
y_off: i32,
|
||||||
height: i32,
|
height: i32,
|
||||||
@ -463,26 +455,27 @@ impl IcebergFeature {
|
|||||||
) -> i32 {
|
) -> i32 {
|
||||||
let k = 3.5f32 - random.next_f32();
|
let k = 3.5f32 - random.next_f32();
|
||||||
let y_off_sq = (y_off as f64).powi(2) as 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;
|
let scale = if height > 15 + random.next_bounded_i32(5) {
|
||||||
if height > 15 + random.next_bounded_i32(5) {
|
|
||||||
let temp_y_off = if y_off < 3 + random.next_bounded_i32(6) {
|
let temp_y_off = if y_off < 3 + random.next_bounded_i32(6) {
|
||||||
y_off / 2
|
y_off / 2
|
||||||
} else {
|
} else {
|
||||||
y_off
|
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
|
(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 y_off_sq = (y_off as f64).powi(2) as f32;
|
||||||
let scale = (1.0f32 - y_off_sq / height as f32) * width as f32;
|
let scale = (1.0f32 - y_off_sq / height as f32) * width as f32;
|
||||||
(scale / 2.0f32).ceil() as i32
|
(scale / 2.0f32).ceil() as i32
|
||||||
}
|
}
|
||||||
|
|
||||||
fn height_dependent_radius_steep(
|
fn height_dependent_radius_steep(
|
||||||
&self,
|
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
y_off: i32,
|
y_off: i32,
|
||||||
height: i32,
|
height: i32,
|
||||||
@ -493,7 +486,7 @@ impl IcebergFeature {
|
|||||||
(scale / 2.0f32).ceil() as i32
|
(scale / 2.0f32).ceil() as i32
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_iceberg_state(id: BlockId) -> bool {
|
const fn is_iceberg_state(id: BlockId) -> bool {
|
||||||
matches!(
|
matches!(
|
||||||
id,
|
id,
|
||||||
BlockId::PACKED_ICE | BlockId::SNOW_BLOCK | BlockId::BLUE_ICE
|
BlockId::PACKED_ICE | BlockId::SNOW_BLOCK | BlockId::BLUE_ICE
|
||||||
|
|||||||
@ -5,14 +5,11 @@ use pumpkin_util::{
|
|||||||
random::{RandomGenerator, RandomImpl},
|
random::{RandomGenerator, RandomImpl},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct KelpFeature {
|
pub struct KelpFeature;
|
||||||
// No extra parameters
|
|
||||||
}
|
|
||||||
|
|
||||||
impl KelpFeature {
|
impl KelpFeature {
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
_height: u16,
|
_height: u16,
|
||||||
|
|||||||
@ -13,6 +13,7 @@ pub struct LakeFeature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl LakeFeature {
|
impl LakeFeature {
|
||||||
|
#[expect(clippy::too_many_lines)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
block_registry: &dyn WorldPortalExt,
|
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 place_pos = origin.add(xx as i32, yyx as i32, zz as i32);
|
||||||
let current_state =
|
let current_state =
|
||||||
GenerationCache::get_block_state(chunk, &place_pos.0).to_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;
|
let place_air = yyx >= 4;
|
||||||
chunk.set_block_state(
|
chunk.set_block_state(
|
||||||
&place_pos.0,
|
&place_pos.0,
|
||||||
@ -156,7 +157,7 @@ impl LakeFeature {
|
|||||||
{
|
{
|
||||||
let current_state =
|
let current_state =
|
||||||
GenerationCache::get_block_state(chunk, &freeze_pos.0).to_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);
|
chunk.set_block_state(&freeze_pos.0, Block::ICE.default_state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -167,7 +168,7 @@ impl LakeFeature {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
fn can_replace_block(&self, state: &BlockState) -> bool {
|
fn can_replace_block(state: &BlockState) -> bool {
|
||||||
!state
|
!state
|
||||||
.id
|
.id
|
||||||
.to_block_id()
|
.to_block_id()
|
||||||
|
|||||||
@ -17,12 +17,12 @@ const DUNGEON_MOBS: [&str; 4] = [
|
|||||||
"minecraft:spider",
|
"minecraft:spider",
|
||||||
];
|
];
|
||||||
|
|
||||||
pub struct DungeonFeature {}
|
pub struct DungeonFeature;
|
||||||
|
|
||||||
impl DungeonFeature {
|
impl DungeonFeature {
|
||||||
/// Generate a monster room (dungeon) at `pos`.
|
/// Generate a monster room (dungeon) at `pos`.
|
||||||
|
#[expect(clippy::too_many_lines)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
_height: u16,
|
_height: u16,
|
||||||
@ -143,7 +143,7 @@ impl DungeonFeature {
|
|||||||
.copied();
|
.copied();
|
||||||
|
|
||||||
// Build the chest state: face away from the wall.
|
// 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::{
|
use pumpkin_data::block_properties::{
|
||||||
BlockProperties, ChestLikeProperties,
|
BlockProperties, ChestLikeProperties,
|
||||||
};
|
};
|
||||||
@ -151,9 +151,7 @@ impl DungeonFeature {
|
|||||||
props.facing = dir.opposite();
|
props.facing = dir.opposite();
|
||||||
let state_id = props.to_state_id(&Block::CHEST);
|
let state_id = props.to_state_id(&Block::CHEST);
|
||||||
pumpkin_data::BlockState::from_id(state_id)
|
pumpkin_data::BlockState::from_id(state_id)
|
||||||
} else {
|
});
|
||||||
Block::CHEST.default_state
|
|
||||||
};
|
|
||||||
|
|
||||||
chunk.set_block_state(&chest_pos, chest_state);
|
chunk.set_block_state(&chest_pos, chest_state);
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct MultifaceGrowthFeature {
|
pub struct MultifaceGrowthFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ impl NetherForestVegetationFeature {
|
|||||||
- random.next_bounded_i32(self.spread_width),
|
- 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);
|
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.
|
// Only place if the spot is air, above the bottom, and the block can survive here.
|
||||||
|
|||||||
@ -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 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 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 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;
|
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_arguments)]
|
||||||
|
#[expect(clippy::too_many_lines)]
|
||||||
fn generate_vein_part<T: GenerationCache>(
|
fn generate_vein_part<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct ReplaceSingleBlockFeature {
|
pub struct ReplaceSingleBlockFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -32,7 +32,7 @@ impl SculkPatchFeature {
|
|||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
if !self.can_spread_from(chunk, pos) {
|
if !Self::can_spread_from(chunk, pos) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ impl SculkPatchFeature {
|
|||||||
true
|
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 state = GenerationCache::get_block_state(chunk, &pos.0);
|
||||||
let block_id = state.to_block_id();
|
let block_id = state.to_block_id();
|
||||||
if is_sculk_behaviour(block_id) {
|
if is_sculk_behaviour(block_id) {
|
||||||
|
|||||||
@ -20,7 +20,7 @@ impl SimpleBlockFeature {
|
|||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
) -> bool {
|
) -> 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 = Block::from_state_id(state.id);
|
||||||
let block_accessor: &dyn BlockAccessor = chunk;
|
let block_accessor: &dyn BlockAccessor = chunk;
|
||||||
if !block_registry.can_place_at(block, state, block_accessor, &pos) {
|
if !block_registry.can_place_at(block, state, block_accessor, &pos) {
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
pub struct AlterGroundTreeDecorator {}
|
pub struct AlterGroundTreeDecorator;
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
pub struct AttachedToLeavesTreeDecorator {}
|
pub struct AttachedToLeavesTreeDecorator;
|
||||||
|
|||||||
@ -4,8 +4,8 @@ use pumpkin_util::{
|
|||||||
random::{RandomGenerator, RandomImpl},
|
random::{RandomGenerator, RandomImpl},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::generation::block_state_provider::BlockStateProvider;
|
|
||||||
use crate::generation::proto_chunk::GenerationCache;
|
use crate::generation::proto_chunk::GenerationCache;
|
||||||
|
use crate::{generation::block_state_provider::BlockStateProvider, world::WorldPortalExt};
|
||||||
|
|
||||||
pub struct AttachedToLogsTreeDecorator {
|
pub struct AttachedToLogsTreeDecorator {
|
||||||
pub probability: f32,
|
pub probability: f32,
|
||||||
@ -17,6 +17,7 @@ impl AttachedToLogsTreeDecorator {
|
|||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
|
block_registry: &dyn WorldPortalExt,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
log_positions: &[BlockPos],
|
log_positions: &[BlockPos],
|
||||||
) {
|
) {
|
||||||
@ -31,7 +32,10 @@ impl AttachedToLogsTreeDecorator {
|
|||||||
{
|
{
|
||||||
continue;
|
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),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
pub struct CocoaTreeDecorator {}
|
pub struct CocoaTreeDecorator;
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
pub struct CreakingHeartTreeDecorator {}
|
pub struct CreakingHeartTreeDecorator;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
|
||||||
use crate::generation::proto_chunk::GenerationCache;
|
use crate::{generation::proto_chunk::GenerationCache, world::WorldPortalExt};
|
||||||
use alter_ground::AlterGroundTreeDecorator;
|
use alter_ground::AlterGroundTreeDecorator;
|
||||||
use attached_to_leaves::AttachedToLeavesTreeDecorator;
|
use attached_to_leaves::AttachedToLeavesTreeDecorator;
|
||||||
use attached_to_logs::AttachedToLogsTreeDecorator;
|
use attached_to_logs::AttachedToLogsTreeDecorator;
|
||||||
@ -42,13 +42,16 @@ impl TreeDecorator {
|
|||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
|
block_registry: &dyn WorldPortalExt,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
root_positions: &[BlockPos],
|
root_positions: &[BlockPos],
|
||||||
log_positions: &[BlockPos],
|
log_positions: &[BlockPos],
|
||||||
foliage_positions: &[BlockPos],
|
foliage_positions: &[BlockPos],
|
||||||
) {
|
) {
|
||||||
match self {
|
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::LeaveVine(decorator) => decorator.generate(chunk, random, foliage_positions),
|
||||||
Self::PaleMoss(_decorator) => {}
|
Self::PaleMoss(_decorator) => {}
|
||||||
Self::CreakingHeart(_decorator) => {}
|
Self::CreakingHeart(_decorator) => {}
|
||||||
@ -56,11 +59,11 @@ impl TreeDecorator {
|
|||||||
Self::Beehive(_decorator) => {}
|
Self::Beehive(_decorator) => {}
|
||||||
Self::AlterGround(_decorator) => {}
|
Self::AlterGround(_decorator) => {}
|
||||||
Self::PlaceOnGround(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::AttachedToLeaves(_decorator) => {}
|
||||||
Self::AttachedToLogs(decorator) => {
|
Self::AttachedToLogs(decorator) => {
|
||||||
decorator.generate(chunk, random, log_positions);
|
decorator.generate(chunk, block_registry, random, log_positions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
pub struct PaleMossTreeDecorator {}
|
pub struct PaleMossTreeDecorator;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
use super::TreeDecorator;
|
use super::TreeDecorator;
|
||||||
use crate::generation::block_state_provider::BlockStateProvider;
|
|
||||||
use crate::generation::proto_chunk::GenerationCache;
|
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_data::{Block, tag::Block::MINECRAFT_LEAVES};
|
||||||
use pumpkin_util::{
|
use pumpkin_util::{
|
||||||
math::{block_box::BlockBox, position::BlockPos},
|
math::{block_box::BlockBox, position::BlockPos},
|
||||||
@ -18,6 +18,7 @@ impl PlaceOnGroundTreeDecorator {
|
|||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
|
block_registry: &dyn WorldPortalExt,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
root_positions: &[BlockPos],
|
root_positions: &[BlockPos],
|
||||||
log_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.y, block_box.max.y),
|
||||||
random.next_inbetween_i32(block_box.min.z, block_box.max.z),
|
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>(
|
fn generate_decoration<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
|
block_registry: &dyn WorldPortalExt,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
) {
|
) {
|
||||||
@ -72,7 +74,11 @@ impl PlaceOnGroundTreeDecorator {
|
|||||||
&& !state.to_block_id().has_tag(MINECRAFT_LEAVES)
|
&& !state.to_block_id().has_tag(MINECRAFT_LEAVES)
|
||||||
// TODO: using heightmap seems not to work
|
// 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),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,6 @@ pub struct TrunkVineTreeDecorator;
|
|||||||
|
|
||||||
impl TrunkVineTreeDecorator {
|
impl TrunkVineTreeDecorator {
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
log_positions: &[BlockPos],
|
log_positions: &[BlockPos],
|
||||||
|
|||||||
@ -56,7 +56,7 @@ impl AcaciaFoliagePlacer {
|
|||||||
foliage_positions
|
foliage_positions
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const fn get_random_height(&self, _random: &mut RandomGenerator) -> i32 {
|
pub const fn get_random_height(_random: &mut RandomGenerator) -> i32 {
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,7 +25,6 @@ impl DarkOakFoliagePlacer {
|
|||||||
let mut foliage_positions = Vec::new();
|
let mut foliage_positions = Vec::new();
|
||||||
let pos = node.center.up_height(offset);
|
let pos = node.center.up_height(offset);
|
||||||
let is_giant = node.giant_trunk;
|
let is_giant = node.giant_trunk;
|
||||||
if is_giant {
|
|
||||||
FoliagePlacer::generate_square(
|
FoliagePlacer::generate_square(
|
||||||
&mut foliage_positions,
|
&mut foliage_positions,
|
||||||
self,
|
self,
|
||||||
@ -37,6 +36,7 @@ impl DarkOakFoliagePlacer {
|
|||||||
node.giant_trunk,
|
node.giant_trunk,
|
||||||
foliage_provider,
|
foliage_provider,
|
||||||
);
|
);
|
||||||
|
if is_giant {
|
||||||
FoliagePlacer::generate_square(
|
FoliagePlacer::generate_square(
|
||||||
&mut foliage_positions,
|
&mut foliage_positions,
|
||||||
self,
|
self,
|
||||||
@ -73,17 +73,6 @@ impl DarkOakFoliagePlacer {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
FoliagePlacer::generate_square(
|
|
||||||
&mut foliage_positions,
|
|
||||||
self,
|
|
||||||
chunk,
|
|
||||||
random,
|
|
||||||
pos,
|
|
||||||
radius + 2,
|
|
||||||
-1,
|
|
||||||
node.giant_trunk,
|
|
||||||
foliage_provider,
|
|
||||||
);
|
|
||||||
FoliagePlacer::generate_square(
|
FoliagePlacer::generate_square(
|
||||||
&mut foliage_positions,
|
&mut foliage_positions,
|
||||||
self,
|
self,
|
||||||
@ -99,7 +88,7 @@ impl DarkOakFoliagePlacer {
|
|||||||
foliage_positions
|
foliage_positions
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const fn get_random_height(&self, _random: &mut RandomGenerator) -> i32 {
|
pub const fn get_random_height(_random: &mut RandomGenerator) -> i32 {
|
||||||
4
|
4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -264,6 +264,7 @@ pub enum FoliageType {
|
|||||||
|
|
||||||
impl FoliageType {
|
impl FoliageType {
|
||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
|
#[expect(clippy::too_many_lines)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
@ -382,12 +383,12 @@ impl FoliageType {
|
|||||||
Self::Blob(blob) => blob.get_random_height(random),
|
Self::Blob(blob) => blob.get_random_height(random),
|
||||||
Self::Spruce(spruce) => spruce.get_random_height(random, trunk_height),
|
Self::Spruce(spruce) => spruce.get_random_height(random, trunk_height),
|
||||||
Self::Pine(pine) => pine.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::Bush(bush) => bush.get_random_height(random),
|
||||||
Self::Fancy(fancy) => fancy.get_random_height(random),
|
Self::Fancy(fancy) => fancy.get_random_height(random),
|
||||||
Self::Jungle(jungle) => jungle.get_random_height(random, trunk_height),
|
Self::Jungle(jungle) => jungle.get_random_height(random, trunk_height),
|
||||||
Self::MegaPine(mega_pine) => mega_pine.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) => {
|
Self::RandomSpread(random_spread) => {
|
||||||
random_spread.get_random_height(random, trunk_height)
|
random_spread.get_random_height(random, trunk_height)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,6 +59,7 @@ impl TreeFeature {
|
|||||||
for decorator in &self.decorators {
|
for decorator in &self.decorators {
|
||||||
decorator.generate(
|
decorator.generate(
|
||||||
chunk,
|
chunk,
|
||||||
|
block_registry,
|
||||||
random,
|
random,
|
||||||
&root_positions,
|
&root_positions,
|
||||||
&log_positions,
|
&log_positions,
|
||||||
@ -105,7 +106,7 @@ impl TreeFeature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let root_positions = if let Some(placer) = &self.root_placer {
|
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,
|
Some(positions) => positions,
|
||||||
None => return (vec![], vec![], vec![]),
|
None => return (vec![], vec![], vec![]),
|
||||||
}
|
}
|
||||||
@ -113,7 +114,7 @@ impl TreeFeature {
|
|||||||
Vec::new()
|
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(
|
let (nodes, logs) = self.trunk_placer.generate(
|
||||||
block_registry,
|
block_registry,
|
||||||
@ -131,7 +132,9 @@ impl TreeFeature {
|
|||||||
.get_random_height(random, height as i32);
|
.get_random_height(random, height as i32);
|
||||||
let base_height = height as i32 - foliage_height;
|
let base_height = height as i32 - foliage_height;
|
||||||
let foliage_radius = self.foliage_placer.get_random_radius(random, base_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();
|
let mut foliage_positions = Vec::new();
|
||||||
for node in nodes {
|
for node in nodes {
|
||||||
foliage_positions.extend(self.foliage_placer.generate(
|
foliage_positions.extend(self.foliage_placer.generate(
|
||||||
|
|||||||
@ -4,9 +4,9 @@ use pumpkin_util::{
|
|||||||
random::{RandomGenerator, RandomImpl},
|
random::{RandomGenerator, RandomImpl},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::generation::block_state_provider::BlockStateProvider;
|
|
||||||
use crate::generation::feature::features::tree::TreeFeature;
|
use crate::generation::feature::features::tree::TreeFeature;
|
||||||
use crate::generation::proto_chunk::GenerationCache;
|
use crate::generation::proto_chunk::GenerationCache;
|
||||||
|
use crate::{generation::block_state_provider::BlockStateProvider, world::WorldPortalExt};
|
||||||
|
|
||||||
pub struct AboveRootPlacement {
|
pub struct AboveRootPlacement {
|
||||||
pub above_root_provider: BlockStateProvider,
|
pub above_root_provider: BlockStateProvider,
|
||||||
@ -37,6 +37,7 @@ impl MangroveRootPlacer {
|
|||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
|
block_registry: &dyn WorldPortalExt,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
trunk_pos: BlockPos,
|
trunk_pos: BlockPos,
|
||||||
@ -65,7 +66,7 @@ impl MangroveRootPlacer {
|
|||||||
|
|
||||||
let mut placed: Vec<BlockPos> = Vec::new();
|
let mut placed: Vec<BlockPos> = Vec::new();
|
||||||
for root_pos in roots {
|
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);
|
placed.push(root_pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -147,6 +148,7 @@ impl MangroveRootPlacer {
|
|||||||
fn place_roots<T: GenerationCache>(
|
fn place_roots<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
|
block_registry: &dyn WorldPortalExt,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
@ -156,10 +158,12 @@ impl MangroveRootPlacer {
|
|||||||
.muddy_roots_in
|
.muddy_roots_in
|
||||||
.contains(&existing_id.as_u16())
|
.contains(&existing_id.as_u16())
|
||||||
{
|
{
|
||||||
let state = self
|
let state = self.mangrove_root_placement.muddy_roots_provider.get(
|
||||||
.mangrove_root_placement
|
random,
|
||||||
.muddy_roots_provider
|
pos,
|
||||||
.get(random, pos);
|
chunk,
|
||||||
|
block_registry,
|
||||||
|
);
|
||||||
let state = Self::apply_waterlogging(chunk, pos, state);
|
let state = Self::apply_waterlogging(chunk, pos, state);
|
||||||
chunk.set_block_state(&pos.0, state);
|
chunk.set_block_state(&pos.0, state);
|
||||||
return true;
|
return true;
|
||||||
@ -167,13 +171,16 @@ impl MangroveRootPlacer {
|
|||||||
if !self.can_grow_through(chunk, pos) {
|
if !self.can_grow_through(chunk, pos) {
|
||||||
return false;
|
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);
|
let state = Self::apply_waterlogging(chunk, pos, state);
|
||||||
chunk.set_block_state(&pos.0, state);
|
chunk.set_block_state(&pos.0, state);
|
||||||
if let Some(above) = &self.above_root_placement {
|
if let Some(above) = &self.above_root_placement {
|
||||||
let above_pos = pos.up();
|
let above_pos = pos.up();
|
||||||
if random.next_f32() < above.above_root_placement_chance && chunk.is_air(&above_pos.0) {
|
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);
|
let above_state = Self::apply_waterlogging(chunk, above_pos, above_state);
|
||||||
chunk.set_block_state(&above_pos.0, above_state);
|
chunk.set_block_state(&above_pos.0, above_state);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
use mangrove::MangroveRootPlacer;
|
use mangrove::MangroveRootPlacer;
|
||||||
use pumpkin_util::{math::position::BlockPos, random::RandomGenerator};
|
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;
|
pub mod mangrove;
|
||||||
|
|
||||||
@ -19,12 +19,13 @@ impl RootPlacer {
|
|||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
|
block_registry: &dyn WorldPortalExt,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
trunk_pos: BlockPos,
|
trunk_pos: BlockPos,
|
||||||
) -> Option<Vec<BlockPos>> {
|
) -> Option<Vec<BlockPos>> {
|
||||||
match self {
|
match self {
|
||||||
Self::Mangrove(p) => p.generate(chunk, random, pos, trunk_pos),
|
Self::Mangrove(p) => p.generate(chunk, block_registry, random, pos, trunk_pos),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,7 @@ impl BendingTrunkPlacer {
|
|||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
placer: &TrunkPlacer,
|
_placer: &TrunkPlacer,
|
||||||
height: u32,
|
height: u32,
|
||||||
start_pos: BlockPos,
|
start_pos: BlockPos,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
@ -36,7 +36,7 @@ impl BendingTrunkPlacer {
|
|||||||
let log_height = height as i32 - 1;
|
let log_height = height as i32 - 1;
|
||||||
let mut pos = start_pos;
|
let mut pos = start_pos;
|
||||||
|
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
@ -52,7 +52,7 @@ impl BendingTrunkPlacer {
|
|||||||
pos = pos.offset(direction.to_offset());
|
pos = pos.offset(direction.to_offset());
|
||||||
}
|
}
|
||||||
|
|
||||||
if placer.place(chunk, &pos, trunk_block) {
|
if TrunkPlacer::place(chunk, &pos, trunk_block) {
|
||||||
trunk_poses.push(pos);
|
trunk_poses.push(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ impl BendingTrunkPlacer {
|
|||||||
let dir_length = self.bend_length.get(random);
|
let dir_length = self.bend_length.get(random);
|
||||||
|
|
||||||
for _ in 0..=dir_length {
|
for _ in 0..=dir_length {
|
||||||
if placer.place(chunk, &pos, trunk_block) {
|
if TrunkPlacer::place(chunk, &pos, trunk_block) {
|
||||||
trunk_poses.push(pos);
|
trunk_poses.push(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -11,10 +11,10 @@ use crate::world::WorldPortalExt;
|
|||||||
use pumpkin_data::block_properties::Axis;
|
use pumpkin_data::block_properties::Axis;
|
||||||
|
|
||||||
pub struct CherryTrunkPlacer {
|
pub struct CherryTrunkPlacer {
|
||||||
pub branch_count: IntProvider,
|
pub count: IntProvider,
|
||||||
pub branch_horizontal_length: IntProvider,
|
pub horizontal_length: IntProvider,
|
||||||
pub branch_start_offset_from_top: UniformIntProvider,
|
pub start_offset_from_top: UniformIntProvider,
|
||||||
pub branch_end_offset_from_top: IntProvider,
|
pub end_offset_from_top: IntProvider,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CherryTrunkPlacer {
|
impl CherryTrunkPlacer {
|
||||||
@ -30,7 +30,7 @@ impl CherryTrunkPlacer {
|
|||||||
below_trunk_provider: &BlockStateProvider,
|
below_trunk_provider: &BlockStateProvider,
|
||||||
trunk_state: &BlockState,
|
trunk_state: &BlockState,
|
||||||
) -> (Vec<TreeNode>, Vec<BlockPos>) {
|
) -> (Vec<TreeNode>, Vec<BlockPos>) {
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
@ -41,10 +41,10 @@ impl CherryTrunkPlacer {
|
|||||||
let mut logs = Vec::new();
|
let mut logs = Vec::new();
|
||||||
|
|
||||||
let first_branch_offset =
|
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(
|
let second_branch_start_offset_from_top = UniformIntProvider::new(
|
||||||
self.branch_start_offset_from_top.min_inclusive,
|
self.start_offset_from_top.min_inclusive,
|
||||||
self.branch_start_offset_from_top.max_inclusive - 1,
|
self.start_offset_from_top.max_inclusive - 1,
|
||||||
);
|
);
|
||||||
let mut second_branch_offset =
|
let mut second_branch_offset =
|
||||||
(height as i32 - 1 + second_branch_start_offset_from_top.get(random)).max(0);
|
(height as i32 - 1 + second_branch_start_offset_from_top.get(random)).max(0);
|
||||||
@ -53,7 +53,7 @@ impl CherryTrunkPlacer {
|
|||||||
second_branch_offset += 1;
|
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_middle_branch = branch_count == 3;
|
||||||
let has_both_side_branches = branch_count >= 2;
|
let has_both_side_branches = branch_count >= 2;
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ impl CherryTrunkPlacer {
|
|||||||
|
|
||||||
for y in 0..trunk_height {
|
for y in 0..trunk_height {
|
||||||
let pos = start_pos.up_height(y as i32);
|
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);
|
logs.push(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@ impl CherryTrunkPlacer {
|
|||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
fn generate_branch<T: GenerationCache>(
|
fn generate_branch<T: GenerationCache>(
|
||||||
&self,
|
&self,
|
||||||
placer: &TrunkPlacer,
|
_placer: &TrunkPlacer,
|
||||||
tree_height: u32,
|
tree_height: u32,
|
||||||
origin: BlockPos,
|
origin: BlockPos,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
@ -139,12 +139,11 @@ impl CherryTrunkPlacer {
|
|||||||
let mut logs = Vec::new();
|
let mut logs = Vec::new();
|
||||||
let mut log_pos = origin.up_height(offset_from_origin);
|
let mut log_pos = origin.up_height(offset_from_origin);
|
||||||
|
|
||||||
let branch_end_pos_offset =
|
let branch_end_pos_offset = tree_height as i32 - 1 + self.end_offset_from_top.get(random);
|
||||||
tree_height as i32 - 1 + self.branch_end_offset_from_top.get(random);
|
|
||||||
let extend_branch_away_from_trunk =
|
let extend_branch_away_from_trunk =
|
||||||
middle_continues_upwards || branch_end_pos_offset < offset_from_origin;
|
middle_continues_upwards || branch_end_pos_offset < offset_from_origin;
|
||||||
let distance_to_trunk =
|
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
|
let branch_end_pos = origin
|
||||||
.add(
|
.add(
|
||||||
@ -161,11 +160,11 @@ impl CherryTrunkPlacer {
|
|||||||
} else {
|
} else {
|
||||||
Axis::Z
|
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 {
|
for _ in 0..steps_horizontally {
|
||||||
log_pos = log_pos.add(branch_direction.0.x, 0, branch_direction.0.z);
|
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);
|
logs.push(log_pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -196,19 +195,19 @@ impl CherryTrunkPlacer {
|
|||||||
|
|
||||||
if grow_vertically {
|
if grow_vertically {
|
||||||
log_pos = log_pos.up_height(vertical_direction);
|
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);
|
logs.push(log_pos);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log_pos = log_pos.add(branch_direction.0.x, 0, branch_direction.0.z);
|
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);
|
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);
|
let block = Block::from_state_id(trunk_state.id);
|
||||||
if let Some(props_source) = block.properties(trunk_state.id) {
|
if let Some(props_source) = block.properties(trunk_state.id) {
|
||||||
let mut props = props_source.to_props();
|
let mut props = props_source.to_props();
|
||||||
|
|||||||
@ -19,7 +19,7 @@ impl DarkOakTrunkPlacer {
|
|||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
placer: &TrunkPlacer,
|
_placer: &TrunkPlacer,
|
||||||
height: u32,
|
height: u32,
|
||||||
start_pos: BlockPos,
|
start_pos: BlockPos,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
@ -28,22 +28,22 @@ impl DarkOakTrunkPlacer {
|
|||||||
trunk_block: &BlockState,
|
trunk_block: &BlockState,
|
||||||
) -> (Vec<TreeNode>, Vec<BlockPos>) {
|
) -> (Vec<TreeNode>, Vec<BlockPos>) {
|
||||||
let below = start_pos.down();
|
let below = start_pos.down();
|
||||||
placer.set_dirt(block_registry, chunk, random, &below, below_trunk_provider);
|
TrunkPlacer::set_dirt(block_registry, chunk, random, &below, below_trunk_provider);
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
&below.east(),
|
&below.east(),
|
||||||
below_trunk_provider,
|
below_trunk_provider,
|
||||||
);
|
);
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
&below.south(),
|
&below.south(),
|
||||||
below_trunk_provider,
|
below_trunk_provider,
|
||||||
);
|
);
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
@ -75,16 +75,16 @@ impl DarkOakTrunkPlacer {
|
|||||||
// Check if air or leaves at the main 2x2 position
|
// Check if air or leaves at the main 2x2 position
|
||||||
let state = GenerationCache::get_block_state(chunk, &pos.0);
|
let state = GenerationCache::get_block_state(chunk, &pos.0);
|
||||||
if TreeFeature::is_air_or_leaves(state.to_state(), state.to_block_id()) {
|
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);
|
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());
|
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());
|
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());
|
trunk_poses.push(pos.east().south());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -110,7 +110,7 @@ impl DarkOakTrunkPlacer {
|
|||||||
ey - branch_y - 1,
|
ey - branch_y - 1,
|
||||||
start_pos.0.z + oz,
|
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);
|
trunk_poses.push(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,7 +25,7 @@ impl FancyTrunkPlacer {
|
|||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
placer: &TrunkPlacer,
|
_placer: &TrunkPlacer,
|
||||||
height: u32,
|
height: u32,
|
||||||
start_pos: BlockPos,
|
start_pos: BlockPos,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
@ -36,7 +36,7 @@ impl FancyTrunkPlacer {
|
|||||||
let j = height as i32 + 2;
|
let j = height as i32 + 2;
|
||||||
let k = ((j as f64) * 0.618).floor() as i32;
|
let k = ((j as f64) * 0.618).floor() as i32;
|
||||||
|
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
|
|||||||
@ -15,7 +15,7 @@ impl ForkingTrunkPlacer {
|
|||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
placer: &TrunkPlacer,
|
_placer: &TrunkPlacer,
|
||||||
height: u32,
|
height: u32,
|
||||||
start_pos: BlockPos,
|
start_pos: BlockPos,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
@ -23,7 +23,7 @@ impl ForkingTrunkPlacer {
|
|||||||
below_trunk_provider: &BlockStateProvider,
|
below_trunk_provider: &BlockStateProvider,
|
||||||
trunk_state: &BlockState,
|
trunk_state: &BlockState,
|
||||||
) -> (Vec<TreeNode>, Vec<BlockPos>) {
|
) -> (Vec<TreeNode>, Vec<BlockPos>) {
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
@ -53,7 +53,7 @@ impl ForkingTrunkPlacer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let pos = BlockPos::new(current_tx, yy, current_tz);
|
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);
|
logs.push(pos);
|
||||||
last_y = Some(yy + 1);
|
last_y = Some(yy + 1);
|
||||||
}
|
}
|
||||||
@ -84,7 +84,7 @@ impl ForkingTrunkPlacer {
|
|||||||
branch_tx += offset.x;
|
branch_tx += offset.x;
|
||||||
branch_tz += offset.z;
|
branch_tz += offset.z;
|
||||||
let pos = BlockPos::new(branch_tx, yyx, branch_tz);
|
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);
|
logs.push(pos);
|
||||||
branch_last_y = Some(yyx + 1);
|
branch_last_y = Some(yyx + 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,7 @@ impl GiantTrunkPlacer {
|
|||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
placer: &TrunkPlacer,
|
_placer: &TrunkPlacer,
|
||||||
height: u32,
|
height: u32,
|
||||||
start_pos: BlockPos,
|
start_pos: BlockPos,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
@ -25,22 +25,22 @@ impl GiantTrunkPlacer {
|
|||||||
trunk_block: &BlockState,
|
trunk_block: &BlockState,
|
||||||
) -> (Vec<TreeNode>, Vec<BlockPos>) {
|
) -> (Vec<TreeNode>, Vec<BlockPos>) {
|
||||||
let pos = start_pos.down();
|
let pos = start_pos.down();
|
||||||
placer.set_dirt(block_registry, chunk, random, &pos, below_trunk_provider);
|
TrunkPlacer::set_dirt(block_registry, chunk, random, &pos, below_trunk_provider);
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
&pos.east(),
|
&pos.east(),
|
||||||
below_trunk_provider,
|
below_trunk_provider,
|
||||||
);
|
);
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
&pos.south(),
|
&pos.south(),
|
||||||
below_trunk_provider,
|
below_trunk_provider,
|
||||||
);
|
);
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
@ -50,20 +50,20 @@ impl GiantTrunkPlacer {
|
|||||||
|
|
||||||
let mut trunk_poses = Vec::new();
|
let mut trunk_poses = Vec::new();
|
||||||
for y in 0..height {
|
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));
|
trunk_poses.push(pos.up_height(y as i32));
|
||||||
}
|
}
|
||||||
if y >= height - 1 {
|
if y >= height - 1 {
|
||||||
continue;
|
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));
|
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));
|
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));
|
trunk_poses.push(pos.south().up_height(y as i32));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,7 +56,7 @@ impl MegaJungleTrunkPlacer {
|
|||||||
|
|
||||||
let block_pos = start_pos.add(j_val, i - 3 + l / 2, k_val);
|
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);
|
trunk_poses.push(block_pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -42,7 +42,6 @@ impl TrunkPlacer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_dirt<T: GenerationCache>(
|
pub fn set_dirt<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
@ -56,7 +55,6 @@ impl TrunkPlacer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn place<T: GenerationCache>(
|
pub fn place<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
pos: &BlockPos,
|
pos: &BlockPos,
|
||||||
trunk_block: &BlockState,
|
trunk_block: &BlockState,
|
||||||
@ -70,14 +68,13 @@ impl TrunkPlacer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn try_place<T: GenerationCache>(
|
pub fn try_place<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
pos: &BlockPos,
|
pos: &BlockPos,
|
||||||
trunk_block: &BlockState,
|
trunk_block: &BlockState,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
let block = GenerationCache::get_block_state(chunk, &pos.0);
|
let block = GenerationCache::get_block_state(chunk, &pos.0);
|
||||||
if TreeFeature::can_replace_or_log(block.to_state(), block.to_block_id()) {
|
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
|
false
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,7 +14,7 @@ impl StraightTrunkPlacer {
|
|||||||
#[expect(clippy::too_many_arguments)]
|
#[expect(clippy::too_many_arguments)]
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
block_registry: &dyn WorldPortalExt,
|
block_registry: &dyn WorldPortalExt,
|
||||||
placer: &TrunkPlacer,
|
_placer: &TrunkPlacer,
|
||||||
height: u32,
|
height: u32,
|
||||||
start_pos: BlockPos,
|
start_pos: BlockPos,
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
@ -22,7 +22,7 @@ impl StraightTrunkPlacer {
|
|||||||
below_trunk_provider: &BlockStateProvider,
|
below_trunk_provider: &BlockStateProvider,
|
||||||
trunk_state: &BlockState,
|
trunk_state: &BlockState,
|
||||||
) -> (Vec<TreeNode>, Vec<BlockPos>) {
|
) -> (Vec<TreeNode>, Vec<BlockPos>) {
|
||||||
placer.set_dirt(
|
TrunkPlacer::set_dirt(
|
||||||
block_registry,
|
block_registry,
|
||||||
chunk,
|
chunk,
|
||||||
random,
|
random,
|
||||||
@ -32,7 +32,7 @@ impl StraightTrunkPlacer {
|
|||||||
let mut logs = Vec::new();
|
let mut logs = Vec::new();
|
||||||
for i in 0..height {
|
for i in 0..height {
|
||||||
let pos = start_pos.up_height(i as i32);
|
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);
|
logs.push(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,7 +22,7 @@ impl TwistingVinesFeature {
|
|||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
if self.is_invalid_location(chunk, &pos) {
|
if Self::is_invalid_location(chunk, &pos) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ impl TwistingVinesFeature {
|
|||||||
let mut mutable_pos = pos.add(offset_x, offset_y, offset_z);
|
let mut mutable_pos = pos.add(offset_x, offset_y, offset_z);
|
||||||
|
|
||||||
if self.find_target_y(chunk, &mut mutable_pos)
|
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;
|
let mut height = random.next_bounded_i32(self.max_height) + 1;
|
||||||
if random.next_bounded_i32(6) == 0 {
|
if random.next_bounded_i32(6) == 0 {
|
||||||
@ -49,7 +49,7 @@ impl TwistingVinesFeature {
|
|||||||
height = 1;
|
height = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.generate_column(chunk, random, &mutable_pos, height);
|
Self::generate_column(chunk, random, &mutable_pos, height);
|
||||||
placed = true;
|
placed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,7 +58,6 @@ impl TwistingVinesFeature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn generate_column<T: GenerationCache>(
|
fn generate_column<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
random: &mut RandomGenerator,
|
random: &mut RandomGenerator,
|
||||||
pos: &BlockPos,
|
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)
|
if !GenerationCache::get_block_state(chunk, &pos.0)
|
||||||
.to_state()
|
.to_state()
|
||||||
.is_air()
|
.is_air()
|
||||||
|
|||||||
@ -47,7 +47,7 @@ impl UnderwaterMagmaFeature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Check if a block can host magma
|
/// 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
|
// Reject water/air or unsupported blocks
|
||||||
let target_id = GenerationCache::get_block_state(chunk, &target.0).to_block_id();
|
let target_id = GenerationCache::get_block_state(chunk, &target.0).to_block_id();
|
||||||
if target_id == Block::WATER || target_id == Block::AIR {
|
if target_id == Block::WATER || target_id == Block::AIR {
|
||||||
@ -84,9 +84,8 @@ impl UnderwaterMagmaFeature {
|
|||||||
pos: BlockPos,
|
pos: BlockPos,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
// Locate floor; abort if none
|
// Locate floor; abort if none
|
||||||
let floor_y = match self.get_floor_y(chunk, pos) {
|
let Some(floor_y) = self.get_floor_y(chunk, pos) else {
|
||||||
Some(y) => y,
|
return false;
|
||||||
None => return false,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let floor_pos = BlockPos::new(pos.0.x, floor_y, pos.0.z);
|
let floor_pos = BlockPos::new(pos.0.x, floor_y, pos.0.z);
|
||||||
@ -105,7 +104,7 @@ impl UnderwaterMagmaFeature {
|
|||||||
let target_pos =
|
let target_pos =
|
||||||
BlockPos::new(floor_pos.0.x + dx, floor_pos.0.y + dy, floor_pos.0.z + dz);
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -173,7 +173,9 @@ impl VegetationPatchFeature {
|
|||||||
depth: i32,
|
depth: i32,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
for i in 0..depth {
|
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 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;
|
let state_block_id = pumpkin_data::Block::from_state_id(state_to_place.id).id;
|
||||||
|
|||||||
@ -7,9 +7,7 @@ use crate::world::WorldPortalExt;
|
|||||||
pub struct VinesFeature;
|
pub struct VinesFeature;
|
||||||
|
|
||||||
impl VinesFeature {
|
impl VinesFeature {
|
||||||
#[expect(clippy::too_many_arguments)]
|
|
||||||
pub fn generate<T: GenerationCache>(
|
pub fn generate<T: GenerationCache>(
|
||||||
&self,
|
|
||||||
chunk: &mut T,
|
chunk: &mut T,
|
||||||
_block_registry: &dyn WorldPortalExt,
|
_block_registry: &dyn WorldPortalExt,
|
||||||
_min_y: i8,
|
_min_y: i8,
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct VoidStartPlatformFeature {
|
pub struct VoidStartPlatformFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,3 +1 @@
|
|||||||
pub struct WeepingVinesFeature {
|
pub struct WeepingVinesFeature; // TODO
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user