diff --git a/.cargo/config.toml b/.cargo/config_fast_builds
similarity index 100%
rename from .cargo/config.toml
rename to .cargo/config_fast_builds
diff --git a/.gitignore b/.gitignore
index c5b441e73..99c2e43ed 100755
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,9 @@
/doc
.vscode
+.cargo/config
+.cargo/config.toml
+
# created by azalea-auth/examples/auth, defined in the main .gitignore because
# the example could be run from anywhere
example_cache.json
diff --git a/Cargo.lock b/Cargo.lock
index 5e33e17f3..1b4f1e745 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -70,15 +70,15 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
[[package]]
name = "anstyle"
-version = "1.0.3"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
[[package]]
name = "anyhow"
-version = "1.0.75"
+version = "1.0.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+checksum = "c9d19de80eff169429ac1e9f48fffb163916b448a44e8e046186232046d9e1f9"
[[package]]
name = "as-any"
@@ -93,44 +93,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
dependencies = [
"concurrent-queue",
- "event-listener",
+ "event-listener 2.5.3",
"futures-core",
]
-[[package]]
-name = "async-compression"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc2d0cfb2a7388d34f590e76686704c494ed7aaceed62ee1ba35cbf363abc2a5"
-dependencies = [
- "flate2",
- "futures-core",
- "memchr",
- "pin-project-lite",
- "tokio",
-]
-
[[package]]
name = "async-executor"
-version = "1.5.4"
+version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499"
+checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c"
dependencies = [
"async-lock",
"async-task",
"concurrent-queue",
"fastrand 2.0.1",
- "futures-lite 1.13.0",
+ "futures-lite 2.1.0",
"slab",
]
[[package]]
name = "async-lock"
-version = "2.8.0"
+version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c"
dependencies = [
- "event-listener",
+ "event-listener 4.0.1",
+ "event-listener-strategy",
+ "pin-project-lite",
]
[[package]]
@@ -141,24 +130,24 @@ checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "async-task"
-version = "4.4.1"
+version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921"
+checksum = "e1d90cd0b264dfdd8eb5bad0a2c217c1f88fa96a8573f40e7b12de23fb468f46"
[[package]]
name = "async-trait"
-version = "0.1.74"
+version = "0.1.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+checksum = "fdf6721fb0140e4f897002dd086c06f6c27775df19cfe1fccb21181a48fd2c98"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
@@ -169,13 +158,14 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "azalea"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"anyhow",
"async-trait",
"azalea-auth",
"azalea-block",
"azalea-brigadier",
+ "azalea-buf",
"azalea-chat",
"azalea-client",
"azalea-core",
@@ -193,7 +183,7 @@ dependencies = [
"criterion",
"derive_more",
"futures",
- "futures-lite 2.0.1",
+ "futures-lite 2.1.0",
"nohash-hasher",
"num-traits",
"parking_lot",
@@ -208,13 +198,14 @@ dependencies = [
[[package]]
name = "azalea-auth"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-buf",
"azalea-crypto",
"base64",
"chrono",
"env_logger",
+ "md-5",
"num-bigint",
"once_cell",
"reqwest",
@@ -229,7 +220,7 @@ dependencies = [
[[package]]
name = "azalea-block"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-block-macros",
"azalea-buf",
@@ -238,16 +229,16 @@ dependencies = [
[[package]]
name = "azalea-block-macros"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "azalea-brigadier"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-buf",
"azalea-chat",
@@ -256,7 +247,7 @@ dependencies = [
[[package]]
name = "azalea-buf"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-buf-macros",
"byteorder",
@@ -269,28 +260,30 @@ dependencies = [
[[package]]
name = "azalea-buf-macros"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "azalea-chat"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-buf",
"azalea-language",
+ "azalea-registry",
"once_cell",
"serde",
"serde_json",
+ "simdnbt",
"tracing",
]
[[package]]
name = "azalea-client"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"anyhow",
"async-trait",
@@ -313,6 +306,7 @@ dependencies = [
"bevy_time",
"derive_more",
"futures",
+ "minecraft_folder_path",
"nohash-hasher",
"once_cell",
"parking_lot",
@@ -330,7 +324,7 @@ dependencies = [
[[package]]
name = "azalea-core"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-buf",
"azalea-inventory",
@@ -347,7 +341,7 @@ dependencies = [
[[package]]
name = "azalea-crypto"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"aes",
"azalea-buf",
@@ -364,7 +358,7 @@ dependencies = [
[[package]]
name = "azalea-entity"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-block",
"azalea-buf",
@@ -387,7 +381,7 @@ dependencies = [
[[package]]
name = "azalea-inventory"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-buf",
"azalea-inventory-macros",
@@ -397,16 +391,16 @@ dependencies = [
[[package]]
name = "azalea-inventory-macros"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "azalea-language"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"once_cell",
"serde",
@@ -415,7 +409,7 @@ dependencies = [
[[package]]
name = "azalea-physics"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-block",
"azalea-core",
@@ -434,10 +428,9 @@ dependencies = [
[[package]]
name = "azalea-protocol"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"anyhow",
- "async-compression",
"async-recursion",
"azalea-auth",
"azalea-block",
@@ -456,8 +449,9 @@ dependencies = [
"bytes",
"flate2",
"futures",
- "futures-lite 2.0.1",
+ "futures-lite 2.1.0",
"futures-util",
+ "log",
"once_cell",
"serde",
"serde_json",
@@ -474,16 +468,16 @@ dependencies = [
[[package]]
name = "azalea-protocol-macros"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "azalea-registry"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-buf",
"azalea-registry-macros",
@@ -493,16 +487,16 @@ dependencies = [
[[package]]
name = "azalea-registry-macros"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "azalea-world"
-version = "0.8.0"
+version = "0.9.0"
dependencies = [
"azalea-block",
"azalea-buf",
@@ -554,9 +548,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
[[package]]
name = "bevy_app"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "172d532ea812e5954fa814dae003c207f2a0b20c6e50431787c94a7159677ece"
+checksum = "d41731817993f92e4363dd3335558e779e290bc71eefc0b5547052b85810907e"
dependencies = [
"bevy_derive",
"bevy_ecs",
@@ -570,20 +564,20 @@ dependencies = [
[[package]]
name = "bevy_derive"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24bf40259be12a1a24d9fd536f5ff18d31eeb5665b77e2732899783be6edc5d6"
+checksum = "f484318350462c58ba3942a45a656c1fd6b6e484a6b6b7abc3a787ad1a51e500"
dependencies = [
"bevy_macro_utils",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "bevy_ecs"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae11a1f467c372b50e9d4b55e78370f5420c9db7416200cc441cc84f08174dd3"
+checksum = "7709fbd22f81fb681534cd913c41e1cd18b17143368743281195d7f024b61aea"
dependencies = [
"async-channel",
"bevy_ecs_macros",
@@ -592,7 +586,7 @@ dependencies = [
"bevy_tasks",
"bevy_utils",
"downcast-rs",
- "event-listener",
+ "event-listener 2.5.3",
"fixedbitset",
"rustc-hash",
"serde",
@@ -602,50 +596,50 @@ dependencies = [
[[package]]
name = "bevy_ecs_macros"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f642c2b67c4d0daf8edf15074f6351457eb487a34b3de1290c760d8f3ac9ec16"
+checksum = "a8843aa489f159f25cdcd9fee75cd7d221a7098a71eaa72cb2d6b40ac4e3f1ba"
dependencies = [
"bevy_macro_utils",
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "bevy_log"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "011417debf7868b45932bb97fc0d5bfdeaf9304e324aa94840e2f1e6deeed69d"
+checksum = "0dc10ba1d225a8477b9e80a1bf797d8a8b8274e83c9b24fb4d9351aec9229755"
dependencies = [
"android_log-sys",
"bevy_app",
"bevy_ecs",
"bevy_utils",
"console_error_panic_hook",
- "tracing-log 0.1.3",
+ "tracing-log 0.1.4",
"tracing-subscriber",
"tracing-wasm",
]
[[package]]
name = "bevy_macro_utils"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf6fba87c6d069fcbcd8a48625ca8ab4392ad40d2b260863ce7d641a0f42986d"
+checksum = "e566640c6b6dced73d2006c764c2cffebe1a82be4809486c4a5d7b4b50efed4d"
dependencies = [
"proc-macro2",
"quote",
"rustc-hash",
- "syn 2.0.39",
+ "syn 2.0.43",
"toml_edit",
]
[[package]]
name = "bevy_math"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "752764558a1f429c20704c3b836a019fa308961c43fdfef4f08e339d456c96be"
+checksum = "58ddc2b76783939c530178f88e5711a1b01044d7b02db4033e2eb8b43b6cf4ec"
dependencies = [
"glam",
"serde",
@@ -653,15 +647,15 @@ dependencies = [
[[package]]
name = "bevy_ptr"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "308a02679f6ce21ef71de20fae6d6a2016c07baa21d8e8d0558e6b7851e8adf2"
+checksum = "c77ec20c8fafcdc196508ef5ccb4f0400a8d193cb61f7b14a36ed9a25ad423cf"
[[package]]
name = "bevy_reflect"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdd56914a8ad57621d7a1a099f7e6b1f7482c9c76cedc9c3d4c175a203939c5d"
+checksum = "d7921f15fc944c9c8ad01d7dbcea6505b8909c6655cd9382bab1407181556038"
dependencies = [
"bevy_math",
"bevy_ptr",
@@ -678,22 +672,22 @@ dependencies = [
[[package]]
name = "bevy_reflect_derive"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25f627907c40ac552f798423447fc331fc1ddacd94c5f7a2a70942eb06bc8447"
+checksum = "b4a8c5475f216e751ef4452a1306b00711f33d2d04d9f149e4c845dfeb6753a0"
dependencies = [
"bevy_macro_utils",
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
"uuid",
]
[[package]]
name = "bevy_tasks"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a45be906618192515bc613e46546150089adbb4a82178dc462045acd1e89e92"
+checksum = "f4fefa7fe0da8923525f7500e274f1bd60dbd79918a25cf7d0dfa0a6ba15c1cf"
dependencies = [
"async-channel",
"async-executor",
@@ -705,9 +699,9 @@ dependencies = [
[[package]]
name = "bevy_time"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b29709cadf22d318a0b7c79f763e9c5ac414292bd0e850066fa935959021b276"
+checksum = "e6250d76eed3077128b6a3d004f9f198b01107800b9824051e32bb658054e837"
dependencies = [
"bevy_app",
"bevy_ecs",
@@ -719,14 +713,14 @@ dependencies = [
[[package]]
name = "bevy_utils"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8e75d4a34ef0b15dffd1ee9079ef1f0f5139527e192b9d5708b3e158777c753"
+checksum = "7915222f4a08ccc782e08d10b751b42e5f9d786e697d0cb3fd09333cb7e8b6ea"
dependencies = [
"ahash",
"bevy_utils_proc_macros",
"getrandom",
- "hashbrown 0.14.2",
+ "hashbrown 0.14.3",
"instant",
"nonmax",
"petgraph",
@@ -737,13 +731,13 @@ dependencies = [
[[package]]
name = "bevy_utils_proc_macros"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7dfd3735a61a1b681ed1e176afe4eae731bbb03e51ad871e9eb39e76a2d170e"
+checksum = "7aafecc952b6b8eb1a93c12590bd867d25df2f4ae1033a01dfdfc3c35ebccfff"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
@@ -870,18 +864,18 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.4.3"
+version = "4.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "84ed82781cea27b43c9b106a979fe450a13a31aab0500595fb3fc06616de08e6"
+checksum = "dcfab8ba68f3668e89f6ff60f5b205cea56aa7b769451a59f34b8682f51c056d"
dependencies = [
"clap_builder",
]
[[package]]
name = "clap_builder"
-version = "4.4.2"
+version = "4.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08"
+checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9"
dependencies = [
"anstyle",
"clap_lex",
@@ -889,15 +883,15 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "0.5.1"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
[[package]]
name = "concurrent-queue"
-version = "2.3.0"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363"
dependencies = [
"crossbeam-utils",
]
@@ -914,9 +908,9 @@ dependencies = [
[[package]]
name = "const-oid"
-version = "0.9.5"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
[[package]]
name = "convert_case"
@@ -926,9 +920,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
[[package]]
name = "core-foundation"
-version = "0.9.3"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
dependencies = [
"core-foundation-sys",
"libc",
@@ -936,15 +930,15 @@ dependencies = [
[[package]]
name = "core-foundation-sys"
-version = "0.8.4"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
[[package]]
name = "cpufeatures"
-version = "0.2.9"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
dependencies = [
"libc",
]
@@ -996,9 +990,9 @@ dependencies = [
[[package]]
name = "crossbeam-channel"
-version = "0.5.8"
+version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2"
dependencies = [
"cfg-if",
"crossbeam-utils",
@@ -1006,9 +1000,9 @@ dependencies = [
[[package]]
name = "crossbeam-deque"
-version = "0.8.3"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751"
dependencies = [
"cfg-if",
"crossbeam-epoch",
@@ -1017,22 +1011,20 @@ dependencies = [
[[package]]
name = "crossbeam-epoch"
-version = "0.9.15"
+version = "0.9.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+checksum = "0e3681d554572a651dda4186cd47240627c3d0114d45a95f6ad27f2f22e7548d"
dependencies = [
"autocfg",
"cfg-if",
"crossbeam-utils",
- "memoffset",
- "scopeguard",
]
[[package]]
name = "crossbeam-utils"
-version = "0.8.16"
+version = "0.8.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c"
dependencies = [
"cfg-if",
]
@@ -1049,9 +1041,9 @@ dependencies = [
[[package]]
name = "data-encoding"
-version = "2.4.0"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
[[package]]
name = "der"
@@ -1118,7 +1110,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
@@ -1151,12 +1143,12 @@ dependencies = [
[[package]]
name = "errno"
-version = "0.3.5"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
dependencies = [
"libc",
- "windows-sys",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -1165,6 +1157,27 @@ version = "2.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+[[package]]
+name = "event-listener"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84f2cdcf274580f2d63697192d744727b3198894b1bf02923643bf59e2c26712"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener-strategy"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3"
+dependencies = [
+ "event-listener 4.0.1",
+ "pin-project-lite",
+]
+
[[package]]
name = "fastrand"
version = "1.9.0"
@@ -1204,18 +1217,18 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "form_urlencoded"
-version = "1.2.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
dependencies = [
"percent-encoding",
]
[[package]]
name = "futures"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
dependencies = [
"futures-channel",
"futures-core",
@@ -1228,9 +1241,9 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
dependencies = [
"futures-core",
"futures-sink",
@@ -1238,15 +1251,15 @@ dependencies = [
[[package]]
name = "futures-core"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
[[package]]
name = "futures-executor"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
dependencies = [
"futures-core",
"futures-task",
@@ -1255,9 +1268,9 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
[[package]]
name = "futures-lite"
@@ -1276,46 +1289,45 @@ dependencies = [
[[package]]
name = "futures-lite"
-version = "2.0.1"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb"
+checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143"
dependencies = [
"fastrand 2.0.1",
"futures-core",
"futures-io",
- "memchr",
"parking",
"pin-project-lite",
]
[[package]]
name = "futures-macro"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "futures-sink"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
[[package]]
name = "futures-task"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
[[package]]
name = "futures-util"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
dependencies = [
"futures-channel",
"futures-core",
@@ -1341,9 +1353,9 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.10"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
dependencies = [
"cfg-if",
"js-sys",
@@ -1354,9 +1366,9 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.28.0"
+version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
[[package]]
name = "glam"
@@ -1370,9 +1382,9 @@ dependencies = [
[[package]]
name = "h2"
-version = "0.3.21"
+version = "0.3.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
+checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
dependencies = [
"bytes",
"fnv",
@@ -1380,7 +1392,7 @@ dependencies = [
"futures-sink",
"futures-util",
"http",
- "indexmap 1.9.3",
+ "indexmap 2.1.0",
"slab",
"tokio",
"tokio-util",
@@ -1401,9 +1413,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
-version = "0.14.2"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
dependencies = [
"ahash",
"allocator-api2",
@@ -1424,9 +1436,9 @@ checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
name = "http"
-version = "0.2.9"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
dependencies = [
"bytes",
"fnv",
@@ -1435,9 +1447,9 @@ dependencies = [
[[package]]
name = "http-body"
-version = "0.4.5"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
dependencies = [
"bytes",
"http",
@@ -1464,9 +1476,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
-version = "0.14.27"
+version = "0.14.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
dependencies = [
"bytes",
"futures-channel",
@@ -1479,7 +1491,7 @@ dependencies = [
"httpdate",
"itoa",
"pin-project-lite",
- "socket2 0.4.9",
+ "socket2",
"tokio",
"tower-service",
"tracing",
@@ -1488,9 +1500,9 @@ dependencies = [
[[package]]
name = "hyper-rustls"
-version = "0.24.1"
+version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
dependencies = [
"futures-util",
"http",
@@ -1510,6 +1522,16 @@ dependencies = [
"unicode-normalization",
]
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
[[package]]
name = "indexmap"
version = "1.9.3"
@@ -1527,7 +1549,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
dependencies = [
"equivalent",
- "hashbrown 0.14.2",
+ "hashbrown 0.14.3",
]
[[package]]
@@ -1553,19 +1575,19 @@ dependencies = [
[[package]]
name = "ipnet"
-version = "2.8.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
[[package]]
name = "is-terminal"
-version = "0.4.9"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455"
dependencies = [
"hermit-abi",
"rustix",
- "windows-sys",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -1579,15 +1601,15 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.9"
+version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
[[package]]
name = "js-sys"
-version = "0.3.64"
+version = "0.3.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"
dependencies = [
"wasm-bindgen",
]
@@ -1598,14 +1620,14 @@ version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
dependencies = [
- "spin",
+ "spin 0.5.2",
]
[[package]]
name = "libc"
-version = "0.2.150"
+version = "0.2.151"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
[[package]]
name = "libm"
@@ -1621,9 +1643,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "linux-raw-sys"
-version = "0.4.10"
+version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
[[package]]
name = "lock_api"
@@ -1660,19 +1682,20 @@ dependencies = [
]
[[package]]
-name = "memchr"
-version = "2.6.4"
+name = "md-5"
+version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if",
+ "digest",
+]
[[package]]
-name = "memoffset"
-version = "0.9.0"
+name = "memchr"
+version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
-dependencies = [
- "autocfg",
-]
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
[[package]]
name = "mime"
@@ -1680,6 +1703,12 @@ version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+[[package]]
+name = "minecraft_folder_path"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d60a6352e005f1f86008644a9fe336a66f74c94428182162cc69eb8c6fff458d"
+
[[package]]
name = "miniz_oxide"
version = "0.7.1"
@@ -1691,13 +1720,13 @@ dependencies = [
[[package]]
name = "mio"
-version = "0.8.9"
+version = "0.8.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
dependencies = [
"libc",
"wasi",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1708,9 +1737,9 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
[[package]]
name = "nonmax"
-version = "0.5.3"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99756f5493e135528f0cd660ac67b4c3a542bb65a3565efe92bb2c2317eb3669"
+checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51"
[[package]]
name = "nu-ansi-term"
@@ -1828,18 +1857,18 @@ dependencies = [
[[package]]
name = "object"
-version = "0.32.1"
+version = "0.32.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
-version = "1.18.0"
+version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "oorandom"
@@ -1879,10 +1908,10 @@ dependencies = [
"cfg-if",
"libc",
"petgraph",
- "redox_syscall 0.4.1",
+ "redox_syscall",
"smallvec",
"thread-id",
- "windows-targets",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -1896,9 +1925,9 @@ dependencies = [
[[package]]
name = "percent-encoding"
-version = "2.3.0"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "petgraph"
@@ -1989,9 +2018,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.69"
+version = "1.0.71"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8"
dependencies = [
"unicode-ident",
]
@@ -2037,9 +2066,9 @@ dependencies = [
[[package]]
name = "rayon"
-version = "1.7.0"
+version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
dependencies = [
"either",
"rayon-core",
@@ -2047,23 +2076,12 @@ dependencies = [
[[package]]
name = "rayon-core"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
dependencies = [
- "crossbeam-channel",
"crossbeam-deque",
"crossbeam-utils",
- "num_cpus",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-dependencies = [
- "bitflags 1.3.2",
]
[[package]]
@@ -2121,9 +2139,9 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]]
name = "reqwest"
-version = "0.11.22"
+version = "0.11.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41"
dependencies = [
"base64",
"bytes",
@@ -2176,24 +2194,23 @@ dependencies = [
[[package]]
name = "ring"
-version = "0.16.20"
+version = "0.17.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
dependencies = [
"cc",
+ "getrandom",
"libc",
- "once_cell",
- "spin",
+ "spin 0.9.8",
"untrusted",
- "web-sys",
- "winapi",
+ "windows-sys 0.48.0",
]
[[package]]
name = "rsa"
-version = "0.9.3"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86ef35bf3e7fe15a53c4ab08a998e42271eab13eb0db224126bc7bc4c4bad96d"
+checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc"
dependencies = [
"const-oid",
"digest",
@@ -2244,22 +2261,22 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.38.20"
+version = "0.38.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67ce50cb2e16c2903e30d1cbccfd8387a74b9d4c938b6a4c5ec6cc7556f7a8a0"
+checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316"
dependencies = [
"bitflags 2.4.1",
"errno",
"libc",
"linux-raw-sys",
- "windows-sys",
+ "windows-sys 0.52.0",
]
[[package]]
name = "rustls"
-version = "0.21.7"
+version = "0.21.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
+checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba"
dependencies = [
"log",
"ring",
@@ -2269,18 +2286,18 @@ dependencies = [
[[package]]
name = "rustls-pemfile"
-version = "1.0.3"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
dependencies = [
"base64",
]
[[package]]
name = "rustls-webpki"
-version = "0.101.6"
+version = "0.101.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
dependencies = [
"ring",
"untrusted",
@@ -2288,9 +2305,9 @@ dependencies = [
[[package]]
name = "ryu"
-version = "1.0.15"
+version = "1.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
[[package]]
name = "same-file"
@@ -2309,9 +2326,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "sct"
-version = "0.7.0"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
dependencies = [
"ring",
"untrusted",
@@ -2319,28 +2336,28 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.18"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
[[package]]
name = "serde"
-version = "1.0.192"
+version = "1.0.193"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.192"
+version = "1.0.193"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
@@ -2408,9 +2425,9 @@ dependencies = [
[[package]]
name = "signature"
-version = "2.1.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
dependencies = [
"digest",
"rand_core",
@@ -2418,9 +2435,8 @@ dependencies = [
[[package]]
name = "simdnbt"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89e3431666c99066308d860437da87ac1dfdf7225b80b551aa007cbd3a46a086"
+version = "0.3.0"
+source = "git+https://github.com/azalea-rs/simdnbt#c255ab673a7439c52dd299eac53ea59566cdda9d"
dependencies = [
"byteorder",
"flate2",
@@ -2431,13 +2447,12 @@ dependencies = [
[[package]]
name = "simdnbt-derive"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "840927b3f00258339cb4ccb4658a33f572409a1bf42e1b98a3f872a995894b4e"
+version = "0.3.0"
+source = "git+https://github.com/azalea-rs/simdnbt#c255ab673a7439c52dd299eac53ea59566cdda9d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
@@ -2463,9 +2478,9 @@ dependencies = [
[[package]]
name = "smallvec"
-version = "1.11.1"
+version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
dependencies = [
"serde",
]
@@ -2479,16 +2494,6 @@ dependencies = [
"serde",
]
-[[package]]
-name = "socket2"
-version = "0.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
-dependencies = [
- "libc",
- "winapi",
-]
-
[[package]]
name = "socket2"
version = "0.5.5"
@@ -2496,7 +2501,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
dependencies = [
"libc",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -2519,11 +2524,17 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
[[package]]
name = "spki"
-version = "0.7.2"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
dependencies = [
"base64ct",
"der",
@@ -2548,9 +2559,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.39"
+version = "2.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53"
dependencies = [
"proc-macro2",
"quote",
@@ -2580,41 +2591,40 @@ dependencies = [
[[package]]
name = "termcolor"
-version = "1.3.0"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
+checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
dependencies = [
"winapi-util",
]
[[package]]
name = "thiserror"
-version = "1.0.50"
+version = "1.0.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.50"
+version = "1.0.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "thread-id"
-version = "4.2.0"
+version = "4.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79474f573561cdc4871a0de34a51c92f7f5a56039113fbb5b9c9f96bdb756669"
+checksum = "f0ec81c46e9eb50deaa257be2f148adf052d1fb7701cfd55ccfab2525280b70b"
dependencies = [
"libc",
- "redox_syscall 0.2.16",
"winapi",
]
@@ -2655,9 +2665,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.34.0"
+version = "1.35.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
dependencies = [
"backtrace",
"bytes",
@@ -2667,9 +2677,9 @@ dependencies = [
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
- "socket2 0.5.5",
+ "socket2",
"tokio-macros",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -2680,7 +2690,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
@@ -2749,7 +2759,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
@@ -2764,12 +2774,12 @@ dependencies = [
[[package]]
name = "tracing-log"
-version = "0.1.3"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2"
dependencies = [
- "lazy_static",
"log",
+ "once_cell",
"tracing-core",
]
@@ -2826,7 +2836,7 @@ dependencies = [
"futures-channel",
"futures-io",
"futures-util",
- "idna",
+ "idna 0.4.0",
"ipnet",
"once_cell",
"rand",
@@ -2859,9 +2869,9 @@ dependencies = [
[[package]]
name = "try-lock"
-version = "0.2.4"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "typenum"
@@ -2871,9 +2881,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]]
name = "unicode-bidi"
-version = "0.3.13"
+version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416"
[[package]]
name = "unicode-ident"
@@ -2892,28 +2902,29 @@ dependencies = [
[[package]]
name = "untrusted"
-version = "0.7.1"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "url"
-version = "2.4.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
dependencies = [
"form_urlencoded",
- "idna",
+ "idna 0.5.0",
"percent-encoding",
]
[[package]]
name = "uuid"
-version = "1.5.0"
+version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc"
+checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
dependencies = [
"getrandom",
+ "md-5",
"serde",
]
@@ -2962,9 +2973,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.87"
+version = "0.2.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
@@ -2972,24 +2983,24 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.87"
+version = "0.2.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"
dependencies = [
"bumpalo",
"log",
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.37"
+version = "0.4.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12"
dependencies = [
"cfg-if",
"js-sys",
@@ -2999,9 +3010,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.87"
+version = "0.2.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -3009,28 +3020,28 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.87"
+version = "0.2.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.87"
+version = "0.2.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"
[[package]]
name = "web-sys"
-version = "0.3.64"
+version = "0.3.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -3038,9 +3049,9 @@ dependencies = [
[[package]]
name = "webpki-roots"
-version = "0.25.2"
+version = "0.25.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
[[package]]
name = "winapi"
@@ -3079,7 +3090,16 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
- "windows-targets",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
]
[[package]]
@@ -3088,13 +3108,28 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
]
[[package]]
@@ -3103,47 +3138,89 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
[[package]]
name = "windows_i686_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
[[package]]
name = "windows_i686_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
[[package]]
name = "winnow"
-version = "0.5.16"
+version = "0.5.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "037711d82167854aff2018dfd193aa0fef5370f456732f0d5a0c59b0f1b4b907"
+checksum = "97a4882e6b134d6c28953a387571f1acdd3496830d5e36c5e3a1075580ea641c"
dependencies = [
"memchr",
]
@@ -3155,31 +3232,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
dependencies = [
"cfg-if",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
name = "zerocopy"
-version = "0.7.26"
+version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.7.26"
+version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.39",
+ "syn 2.0.43",
]
[[package]]
name = "zeroize"
-version = "1.6.0"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
diff --git a/README.md b/README.md
index 603b0e34c..a110e76e7 100755
--- a/README.md
+++ b/README.md
@@ -9,20 +9,21 @@ A collection of Rust crates for making Minecraft bots, clients, and tools.
-*Currently supported Minecraft version: `1.20.2`.*
-> **Warning**
+_Currently supported Minecraft version: `1.20.4`._
+
+> [!WARNING]
> Azalea is still very unfinished, though most crates are in a somewhat useable state
## Features
-- [Accurate physics](https://github.com/azalea-rs/azalea/blob/main/azalea-physics/src/lib.rs) (but some features like entity collisions and water physics aren't yet implemented)
-- [Pathfinder](https://azalea.matdoes.dev/azalea/pathfinder/index.html)
-- [Swarms](https://azalea.matdoes.dev/azalea/swarm/index.html)
-- [Breaking blocks](https://azalea.matdoes.dev/azalea/struct.Client.html#method.mine)
-- [Block interactions & building](https://azalea.matdoes.dev/azalea/struct.Client.html#method.block_interact) (this doesn't predict the block interactions/placement on the client yet but it's usually fine)
-- [Inventories](https://azalea.matdoes.dev/azalea/struct.Client.html#impl-ContainerClientExt-for-Client)
-- [Attacking entities](https://azalea.matdoes.dev/azalea/struct.Client.html#method.attack) (but you can't get the entity at the crosshair yet)
+- [Accurate physics](https://github.com/azalea-rs/azalea/blob/main/azalea-physics/src/lib.rs) (but some features like entity collisions and water physics aren't yet implemented)
+- [Pathfinder](https://azalea.matdoes.dev/azalea/pathfinder/index.html)
+- [Swarms](https://azalea.matdoes.dev/azalea/swarm/index.html)
+- [Breaking blocks](https://azalea.matdoes.dev/azalea/struct.Client.html#method.mine)
+- [Block interactions & building](https://azalea.matdoes.dev/azalea/struct.Client.html#method.block_interact) (this doesn't predict the block interactions/placement on the client yet but it's usually fine)
+- [Inventories](https://azalea.matdoes.dev/azalea/struct.Client.html#impl-ContainerClientExt-for-Client)
+- [Attacking entities](https://azalea.matdoes.dev/azalea/struct.Client.html#method.attack) (but you can't get the entity at the crosshair yet)
## Docs
@@ -32,30 +33,27 @@ The "stable" documentation is available at [docs.rs/azalea](https://docs.rs/azal
If you'd like to chat about Azalea, you can join the Matrix space at [#azalea:matdoes.dev](https://matrix.to/#/#azalea:matdoes.dev) (recommended) or the Discord server at [discord.gg/FaRey6ytmC](https://discord.gg/FaRey6ytmC) (they're bridged so you don't need to join both).
-## Why
-
-For fun, mostly. I wasn't satisfied with the current state of Minecraft bot libraries, and this seemed like a good way to learn Rust.
-
## Goals
-- Do everything a vanilla client can do.
-- Be intuitive and easy to use.
-- Make it easy to have many bots working at the same time.
-- Don't trigger anticheats.
-- Support the latest Minecraft version.
-- Be fast and memory efficient.
+- Do everything a vanilla client can do.
+- Be intuitive and easy to use.
+- Make it easy to have many bots working at the same time.
+- Don't trigger anticheats.
+- Support the latest Minecraft version.
+- Be fast and memory efficient.
## Non-goals
-- Supporting several versions of Minecraft on the same branch.
-- Bedrock edition.
-- Graphics.
+- Supporting several versions of Minecraft on the same branch[\*](https://github.com/azalea-rs/azalea-viaversion).
+- Bedrock edition.
+- Graphics.
## Branches
There are several branches in the Azalea repository that target older Minecraft versions. It is not guaranteed that they will be up-to-date with the latest version of Azalea. If you'd like to update them or add more, please open a PR.
-- [1.20-1.20.1](https://github.com/azalea-rs/azalea/tree/1.20.1)
-- [1.19.4](https://github.com/azalea-rs/azalea/tree/1.19.4)
-- [1.19.3](https://github.com/azalea-rs/azalea/tree/1.19.3)
-- [1.19.2](https://github.com/azalea-rs/azalea/tree/1.19.2)
+- [1.20.2](https://github.com/azalea-rs/azalea/tree/1.20.2)
+- [1.20-1.20.1](https://github.com/azalea-rs/azalea/tree/1.20.1)
+- [1.19.4](https://github.com/azalea-rs/azalea/tree/1.19.4)
+- [1.19.3](https://github.com/azalea-rs/azalea/tree/1.19.3)
+- [1.19.2](https://github.com/azalea-rs/azalea/tree/1.19.2)
diff --git a/azalea-auth/Cargo.toml b/azalea-auth/Cargo.toml
index 3e25b6a43..82420abea 100644
--- a/azalea-auth/Cargo.toml
+++ b/azalea-auth/Cargo.toml
@@ -4,13 +4,13 @@ edition = "2021"
license = "MIT"
name = "azalea-auth"
repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-auth"
-version = "0.8.0"
+version = "0.9.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-azalea-buf = { path = "../azalea-buf", version = "0.8.0" }
-azalea-crypto = { path = "../azalea-crypto", version = "0.8.0" }
+azalea-buf = { path = "../azalea-buf", version = "0.9.0" }
+azalea-crypto = { path = "../azalea-crypto", version = "0.9.0" }
base64 = "0.21.5"
chrono = { version = "0.4.31", default-features = false, features = ["serde"] }
tracing = "0.1.40"
@@ -20,12 +20,13 @@ reqwest = { version = "0.11.22", default-features = false, features = [
"json",
"rustls-tls",
] }
-rsa = "0.9.3"
-serde = { version = "1.0.192", features = ["derive"] }
+rsa = "0.9.6"
+serde = { version = "1.0.193", features = ["derive"] }
serde_json = "1.0.108"
thiserror = "1.0.50"
tokio = { version = "1.34.0", features = ["fs"] }
-uuid = { version = "1.5.0", features = ["serde"] }
+uuid = { version = "1.6.1", features = ["serde", "v3"] }
+md-5 = "0.10.6"
[dev-dependencies]
env_logger = "0.10.1"
diff --git a/azalea-auth/src/auth.rs b/azalea-auth/src/auth.rs
index 0c3b98c67..67a45aa3c 100755
--- a/azalea-auth/src/auth.rs
+++ b/azalea-auth/src/auth.rs
@@ -58,7 +58,7 @@ pub enum AuthError {
///
/// If you want to use your own code to cache or show the auth code to the user
/// in a different way, use [`get_ms_link_code`], [`get_ms_auth_token`],
-/// [`get_minecraft_token`] and [`get_profile`] instead instead.
+/// [`get_minecraft_token`] and [`get_profile`] instead.
pub async fn auth(email: &str, opts: AuthOpts) -> Result {
let cached_account = if let Some(cache_file) = &opts.cache_file {
cache::get_account_in_cache(cache_file, email).await
@@ -84,7 +84,14 @@ pub async fn auth(email: &str, opts: AuthOpts) -> Result
};
if msa.is_expired() {
tracing::trace!("refreshing Microsoft auth token");
- msa = refresh_ms_auth_token(&client, &msa.data.refresh_token).await?;
+ match refresh_ms_auth_token(&client, &msa.data.refresh_token).await {
+ Ok(new_msa) => msa = new_msa,
+ Err(e) => {
+ // can't refresh, ask the user to auth again
+ tracing::error!("Error refreshing Microsoft auth token: {}", e);
+ msa = interactive_get_ms_auth_token(&client, email).await?;
+ }
+ }
}
let msa_token = &msa.data.access_token;
@@ -361,13 +368,15 @@ pub async fn interactive_get_ms_auth_token(
pub enum RefreshMicrosoftAuthTokenError {
#[error("Http error: {0}")]
Http(#[from] reqwest::Error),
+ #[error("Error parsing JSON: {0}")]
+ Json(#[from] serde_json::Error),
}
pub async fn refresh_ms_auth_token(
client: &reqwest::Client,
refresh_token: &str,
) -> Result, RefreshMicrosoftAuthTokenError> {
- let access_token_response = client
+ let access_token_response_text = client
.post("https://login.live.com/oauth20_token.srf")
.form(&vec![
("scope", "service::user.auth.xboxlive.com::MBI_SSL"),
@@ -377,8 +386,10 @@ pub async fn refresh_ms_auth_token(
])
.send()
.await?
- .json::()
+ .text()
.await?;
+ let access_token_response: AccessTokenResponse =
+ serde_json::from_str(&access_token_response_text)?;
let expires_at =
SystemTime::now() + std::time::Duration::from_secs(access_token_response.expires_in);
@@ -438,7 +449,7 @@ async fn auth_with_xbox_live(
Ok(ExpiringValue {
data: XboxLiveAuth {
token: res.token,
- user_hash: res.display_claims["xui"].get(0).unwrap()["uhs"].clone(),
+ user_hash: res.display_claims["xui"].first().unwrap()["uhs"].clone(),
},
expires_at,
})
@@ -511,7 +522,7 @@ pub enum CheckOwnershipError {
Http(#[from] reqwest::Error),
}
-async fn check_ownership(
+pub async fn check_ownership(
client: &reqwest::Client,
minecraft_access_token: &str,
) -> Result {
diff --git a/azalea-auth/src/lib.rs b/azalea-auth/src/lib.rs
index bd151eb32..1643bf04f 100755
--- a/azalea-auth/src/lib.rs
+++ b/azalea-auth/src/lib.rs
@@ -4,6 +4,7 @@ mod auth;
pub mod cache;
pub mod certs;
pub mod game_profile;
+pub mod offline;
pub mod sessionserver;
pub use auth::*;
diff --git a/azalea-auth/src/offline.rs b/azalea-auth/src/offline.rs
new file mode 100644
index 000000000..737555e86
--- /dev/null
+++ b/azalea-auth/src/offline.rs
@@ -0,0 +1,17 @@
+use md5::{Digest, Md5};
+use uuid::Uuid;
+
+pub fn generate_uuid(username: &str) -> Uuid {
+ uuid::Builder::from_md5_bytes(hash(format!("OfflinePlayer:{username}").as_bytes())).into_uuid()
+}
+
+fn hash(data: &[u8]) -> [u8; 16] {
+ let mut hasher = Md5::new();
+
+ hasher.update(data);
+
+ let mut bytes = [0; 16];
+ bytes.copy_from_slice(&hasher.finalize()[..16]);
+
+ bytes
+}
diff --git a/azalea-auth/src/sessionserver.rs b/azalea-auth/src/sessionserver.rs
index e6469cefe..9c73fbf0b 100755
--- a/azalea-auth/src/sessionserver.rs
+++ b/azalea-auth/src/sessionserver.rs
@@ -69,6 +69,15 @@ pub async fn join(
private_key,
));
+ join_with_server_id_hash(&client, access_token, uuid, &server_hash).await
+}
+
+pub async fn join_with_server_id_hash(
+ client: &reqwest::Client,
+ access_token: &str,
+ uuid: &Uuid,
+ server_hash: &str,
+) -> Result<(), ClientSessionServerError> {
let mut encode_buffer = Uuid::encode_buffer();
let undashed_uuid = uuid.simple().encode_lower(&mut encode_buffer);
diff --git a/azalea-block/.gitignore b/azalea-block/.gitignore
new file mode 100644
index 000000000..390f6fd52
--- /dev/null
+++ b/azalea-block/.gitignore
@@ -0,0 +1,3 @@
+# cargo expand generated -p azalea-block > azalea-block/out.rs
+/out.rs
+
diff --git a/azalea-block/Cargo.toml b/azalea-block/Cargo.toml
index f950e43fa..1f3a829f4 100644
--- a/azalea-block/Cargo.toml
+++ b/azalea-block/Cargo.toml
@@ -4,13 +4,13 @@ edition = "2021"
license = "MIT"
name = "azalea-block"
repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-block"
-version = "0.8.0"
+version = "0.9.0"
[lib]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-azalea-block-macros = { path = "./azalea-block-macros", version = "0.8.0" }
-azalea-buf = { path = "../azalea-buf", version = "0.8.0" }
-azalea-registry = { version = "0.8.0", path = "../azalea-registry" }
+azalea-block-macros = { path = "./azalea-block-macros", version = "0.9.0" }
+azalea-buf = { path = "../azalea-buf", version = "0.9.0" }
+azalea-registry = { version = "0.9.0", path = "../azalea-registry" }
diff --git a/azalea-block/azalea-block-macros/Cargo.toml b/azalea-block/azalea-block-macros/Cargo.toml
index b77b541e0..720e44804 100644
--- a/azalea-block/azalea-block-macros/Cargo.toml
+++ b/azalea-block/azalea-block-macros/Cargo.toml
@@ -4,7 +4,7 @@ edition = "2021"
license = "MIT"
name = "azalea-block-macros"
repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-block/azalea-block-macros"
-version = "0.8.0"
+version = "0.9.0"
[lib]
proc-macro = true
@@ -12,6 +12,6 @@ proc-macro = true
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-proc-macro2 = "1.0.69"
+proc-macro2 = "1.0.70"
quote = "1.0.33"
syn = "2.0.39"
diff --git a/azalea-block/azalea-block-macros/src/lib.rs b/azalea-block/azalea-block-macros/src/lib.rs
index 11510a0af..3b983fb43 100755
--- a/azalea-block/azalea-block-macros/src/lib.rs
+++ b/azalea-block/azalea-block-macros/src/lib.rs
@@ -10,40 +10,45 @@ use std::fmt::Write;
use syn::{
self, braced,
ext::IdentExt,
+ parenthesized,
parse::{Parse, ParseStream, Result},
parse_macro_input,
punctuated::Punctuated,
- Expr, Ident, LitStr, Token,
+ token, Expr, Ident, LitStr, Token,
};
use utils::{combinations_of, to_pascal_case};
enum PropertyType {
/// `Axis { X, Y, Z }`
Enum {
- type_name: Ident,
+ enum_name: Ident,
variants: Punctuated,
},
- /// `bool`
- Boolean,
+ /// `Snowy(bool)`
+ Boolean { struct_name: Ident },
}
-/// `"snowy" => bool`
+/// `"snowy" => Snowy(bool)`
struct PropertyDefinition {
name: LitStr,
property_type: PropertyType,
}
-/// Comma separated PropertyDefinitions (`"snowy" => bool,`)
+/// Comma separated PropertyDefinitions (`"snowy" => Snowy(bool),`)
struct PropertyDefinitions {
properties: Vec,
}
-/// `snowy: false` or `axis: properties::Axis::Y`
+/// `snowy: Snowy(false)` or `axis: properties::Axis::Y`
#[derive(Debug)]
struct PropertyWithNameAndDefault {
+ // "snowy" / "axis"
name: Ident,
+ // Snowy / Axis
property_type: Ident,
+ property_value_type: Ident,
is_enum: bool,
+ // false / properties::Axis::Y
default: proc_macro2::TokenStream,
}
@@ -59,31 +64,46 @@ struct BlockDefinition {
}
impl Parse for PropertyWithNameAndDefault {
fn parse(input: ParseStream) -> Result {
- // `snowy: false` or `axis: properties::Axis::Y`
+ // `snowy: Snowy(false)` or `axis: properties::Axis::Y`
let property_name = input.parse()?;
input.parse::()?;
let first_ident = input.call(Ident::parse_any)?;
- let first_ident_string = first_ident.to_string();
let mut property_default = quote! { #first_ident };
let property_type: Ident;
+ let property_value_type: Ident;
let mut is_enum = false;
if input.parse::().is_ok() {
+ // enum
is_enum = true;
- property_type = first_ident;
+ property_type = first_ident.clone();
+ property_value_type = first_ident;
let variant = input.parse::()?;
property_default = quote! { properties::#property_default::#variant };
- } else if first_ident_string == "true" || first_ident_string == "false" {
- property_type = Ident::new("bool", first_ident.span());
} else {
- return Err(input.error("Expected a boolean or an enum variant"));
+ // must be a unit struct if it's not an enum
+ let content;
+ let _paren_token: token::Paren = parenthesized!(content in input);
+ // we use this instead of .parse so it works with rust keywords like true and
+ // false
+ let unit_struct_inner = content.call(Ident::parse_any)?;
+ let unit_struct_inner_string = unit_struct_inner.to_string();
+
+ if matches!(unit_struct_inner_string.as_str(), "true" | "false") {
+ property_value_type = Ident::new("bool", first_ident.span());
+ property_type = first_ident;
+ property_default = quote! { #unit_struct_inner };
+ } else {
+ return Err(input.error("Expected a boolean or an enum variant"));
+ }
};
Ok(PropertyWithNameAndDefault {
name: property_name,
property_type,
+ property_value_type,
is_enum,
default: property_default,
})
@@ -100,20 +120,40 @@ struct MakeBlockStates {
impl Parse for PropertyType {
fn parse(input: ParseStream) -> Result {
- // like `Axis { X, Y, Z }` or `bool`
+ // like `Axis { X, Y, Z }` or `Waterlogged(bool)`
let keyword = Ident::parse(input)?;
- let keyword_string = keyword.to_string();
- if keyword_string == "bool" {
- Ok(Self::Boolean)
- } else {
+
+ fn parse_braced(input: ParseStream) -> Result> {
let content;
braced!(content in input);
let variants = content.parse_terminated(Ident::parse, Token![,])?;
+ Ok(variants)
+ }
+
+ fn parse_paren(input: ParseStream) -> Result {
+ let content;
+ parenthesized!(content in input);
+ let inner = content.parse::()?;
+ Ok(inner)
+ }
+
+ if let Ok(variants) = parse_braced(input) {
Ok(Self::Enum {
- type_name: keyword,
+ enum_name: keyword,
variants,
})
+ } else if let Ok(inner) = parse_paren(input) {
+ assert_eq!(
+ inner.to_string(),
+ "bool",
+ "Currently only bool unit structs are supported"
+ );
+ Ok(Self::Boolean {
+ struct_name: keyword,
+ })
+ } else {
+ Err(input.error("Expected a unit struct or an enum"))
}
}
}
@@ -227,6 +267,12 @@ impl Parse for MakeBlockStates {
}
}
+struct PropertyVariantData {
+ pub block_state_ids: Vec,
+ pub ident: Ident,
+ pub is_enum: bool,
+}
+
#[proc_macro]
pub fn make_block_states(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as MakeBlockStates);
@@ -238,21 +284,24 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
let mut state_id: u32 = 0;
for property in &input.property_definitions.properties {
- let property_type_name: Ident;
+ let property_struct_name: Ident;
+ // this is usually the same as property_struct_name except for bool
+ let property_value_name: Ident;
let mut property_variant_types = Vec::new();
match &property.property_type {
PropertyType::Enum {
- type_name,
+ enum_name,
variants,
} => {
let mut property_enum_variants = quote! {};
let mut property_from_number_variants = quote! {};
- property_type_name = type_name.clone();
+ property_value_name = enum_name.clone();
+ property_struct_name = enum_name.clone();
property_struct_names_to_names.insert(
- property_type_name.to_string(),
+ property_struct_name.to_string(),
property.name.clone().value(),
);
@@ -271,19 +320,19 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
// i_lit is used here instead of i because otherwise it says 0size
// in the expansion and that looks uglier
property_from_number_variants.extend(quote! {
- #i_lit => #property_type_name::#variant,
+ #i_lit => #property_struct_name::#variant,
});
property_variant_types.push(variant.to_string());
}
property_enums.extend(quote! {
- #[derive(Debug, Clone, Copy)]
- pub enum #property_type_name {
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
+ pub enum #property_struct_name {
#property_enum_variants
}
- impl From for #property_type_name {
+ impl From for #property_struct_name {
fn from(value: u32) -> Self {
match value {
#property_from_number_variants
@@ -293,15 +342,28 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
}
});
}
- PropertyType::Boolean => {
- property_type_name = Ident::new("bool", proc_macro2::Span::call_site());
- // property_type_name =
- // Ident::new(&property.name.value(), proc_macro2::Span::call_site());
+ PropertyType::Boolean { struct_name } => {
+ property_value_name = Ident::new("bool", proc_macro2::Span::call_site());
+ property_struct_name = struct_name.clone();
property_variant_types = vec!["true".to_string(), "false".to_string()];
+
+ property_enums.extend(quote! {
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
+ pub struct #property_struct_name(pub bool);
+
+ impl From for #property_struct_name {
+ fn from(value: u32) -> Self {
+ match value {
+ 0 => Self(false),
+ 1 => Self(true),
+ _ => panic!("Invalid property value: {}", value),
+ }
+ }
+ }
+ });
}
}
- properties_map.insert(property_type_name.to_string(), property_variant_types);
- // properties_map.insert(property.name.value(), property_variant_types);
+ properties_map.insert(property_value_name.to_string(), property_variant_types);
}
let mut block_state_enum_variants = quote! {};
@@ -312,14 +374,19 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
let mut from_registry_block_to_blockstate_match = quote! {};
let mut from_registry_block_to_blockstates_match = quote! {};
- // a list of block state ids that are waterlogged
- let mut waterlogged_state_ids: Vec = Vec::new();
+ // {
+ // Waterlogged: [
+ // [ vec of waterlogged = true state ids ],
+ // [ vec of waterlogged = false state ids ]
+ // }
+ // }
+ let mut properties_to_state_ids: HashMap> = HashMap::new();
for block in &input.block_definitions.blocks {
let block_property_names = &block
.properties_and_defaults
.iter()
- .map(|p| p.property_type.to_string())
+ .map(|p| p.property_value_type.to_string())
.collect::>();
let mut block_properties_vec = Vec::new();
for property_name in block_property_names {
@@ -373,6 +440,7 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
properties_with_name.push(PropertyWithNameAndDefault {
name: Ident::new(&property_name, proc_macro2::Span::call_site()),
property_type: property.property_type.clone(),
+ property_value_type: property.property_value_type.clone(),
is_enum: property.is_enum,
default: property.default.clone(),
});
@@ -388,7 +456,7 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
// pub has_bottle_2: HasBottle,
let mut block_struct_fields = quote! {};
for PropertyWithNameAndDefault {
- property_type: struct_name,
+ property_value_type,
name,
is_enum,
..
@@ -397,9 +465,9 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
// let property_name_snake =
// Ident::new(&property.to_string(), proc_macro2::Span::call_site());
block_struct_fields.extend(if *is_enum {
- quote! { pub #name: properties::#struct_name, }
+ quote! { pub #name: properties::#property_value_type, }
} else {
- quote! { pub #name: #struct_name, }
+ quote! { pub #name: #property_value_type, }
});
}
@@ -435,15 +503,15 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
for i in 0..properties_with_name.len() {
let property = &properties_with_name[i];
let property_name = &property.name;
- let property_struct_name_ident = &property.property_type;
+ let property_value_name_ident = &property.property_type;
let variant =
Ident::new(&combination[i].to_string(), proc_macro2::Span::call_site());
// this terrible code just gets the property default as a string
- let property_default_as_string = if let TokenTree::Ident(i) =
+ let property_default_as_string = if let TokenTree::Ident(ident) =
property.default.clone().into_iter().last().unwrap()
{
- i.to_string()
+ ident.to_string()
} else {
panic!()
};
@@ -451,20 +519,30 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
is_default = false;
}
- let property_value = if property.is_enum {
- quote! {properties::#property_struct_name_ident::#variant}
+ let property_variant = if property.is_enum {
+ quote! {properties::#property_value_name_ident::#variant}
} else {
quote! {#variant}
};
from_block_to_state_combination_match_inner.extend(quote! {
- #property_name: #property_value,
+ #property_name: #property_variant,
});
- // if "waterlogged" is a property and it's true for this state then add it to
- // waterlogged_state_ids
- if property_name == "waterlogged" && property_value.to_string() == "true" {
- waterlogged_state_ids.push(state_id)
+ // add to properties_to_state_ids
+ let property_variants = properties_to_state_ids
+ .entry(property_value_name_ident.to_string())
+ .or_default();
+ let property_variant_data =
+ property_variants.iter_mut().find(|v| v.ident == variant);
+ if let Some(property_variant_data) = property_variant_data {
+ property_variant_data.block_state_ids.push(state_id);
+ } else {
+ property_variants.push(PropertyVariantData {
+ block_state_ids: vec![state_id],
+ ident: variant,
+ is_enum: property.is_enum,
+ });
}
}
@@ -509,13 +587,14 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
let PropertyWithNameAndDefault {
property_type: property_struct_name_ident,
name: property_name,
+ property_value_type,
..
} = &properties_with_name[i];
let property_variants = &block_properties_vec[i];
let property_variants_count = property_variants.len() as u32;
let conversion_code = {
- if &property_struct_name_ident.to_string() == "bool" {
+ if &property_value_type.to_string() == "bool" {
assert_eq!(property_variants_count, 2);
// this is not a mistake, it starts with true for some reason
quote! {(b / #division) % #property_variants_count == 0}
@@ -611,8 +690,6 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
block_structs.extend(block_struct);
}
- let waterlogged_state_ids_match = quote! { #(#waterlogged_state_ids)|* };
-
let last_state_id = state_id - 1;
let mut generated = quote! {
impl BlockState {
@@ -622,21 +699,87 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
#last_state_id
}
- /// Whether the given block state is waterlogged. This checks for
- /// the `waterlogged` field, so it'll return false for water.
- pub fn waterlogged(&self) -> bool {
- matches!(self.id, #waterlogged_state_ids_match)
+ /// Get a property from this block state. Will be `None` if the block can't have the property.
+ ///
+ /// ```
+ /// fn is_waterlogged(block_state: azalea_block::BlockState) -> bool {
+ /// block_state.property::().unwrap_or_default()
+ /// }
+ /// ```
+ pub fn property(self) -> Option {
+ P::try_from_block_state(self)
}
}
+ };
+ // now impl Property for every property
+ // ```
+ // match state_id {
+ // // this is just an example of how it might look, these state ids are definitely not correct
+ // 0|3|6 => Some(Self::Axis::X),
+ // 1|4|7 => Some(Self::Axis::Y),
+ // 2|5|8 => Some(Self::Axis::Z),
+ // _ => None
+ // }
+ // ```
+ let mut property_impls = quote! {};
+ for (property_struct_name, property_values) in properties_to_state_ids {
+ let mut enum_inner_generated = quote! {};
+
+ let mut is_enum_ = false;
+
+ for PropertyVariantData {
+ block_state_ids,
+ ident,
+ is_enum,
+ } in property_values
+ {
+ enum_inner_generated.extend(if is_enum {
+ quote! {
+ #(#block_state_ids)|* => Some(Self::#ident),
+ }
+ } else {
+ quote! {
+ #(#block_state_ids)|* => Some(#ident),
+ }
+ });
+ is_enum_ = is_enum;
+ }
+ let is_enum = is_enum_;
+
+ let property_struct_name =
+ Ident::new(&property_struct_name, proc_macro2::Span::call_site());
+
+ let value = if is_enum {
+ quote! { Self }
+ } else {
+ quote! { bool }
+ };
+
+ let property_impl = quote! {
+ impl Property for #property_struct_name {
+ type Value = #value;
+
+ fn try_from_block_state(block_state: BlockState) -> Option {
+ match block_state.id {
+ #enum_inner_generated
+ _ => None
+ }
+ }
+ }
+ };
+ property_impls.extend(property_impl);
+ }
+
+ generated.extend(quote! {
pub mod properties {
use super::*;
#property_enums
+
+ #property_impls
}
- };
- generated.extend(quote! {
pub mod blocks {
use super::*;
diff --git a/azalea-block/src/generated.rs b/azalea-block/src/generated.rs
index e3f8fb9e3..97236b4ba 100755
--- a/azalea-block/src/generated.rs
+++ b/azalea-block/src/generated.rs
@@ -1,10 +1,10 @@
-use crate::{Block, BlockBehavior, BlockState, BlockStates};
+use crate::{Block, BlockBehavior, BlockState, BlockStates, Property};
use azalea_block_macros::make_block_states;
use std::fmt::Debug;
make_block_states! {
Properties => {
- "snowy" => bool,
+ "snowy" => Snowy(bool),
"stage" => OakSaplingStage {
_0,
_1,
@@ -40,12 +40,12 @@ make_block_states! {
_3,
_4,
},
- "hanging" => bool,
+ "hanging" => Hanging(bool),
"stage" => MangrovePropaguleStage {
_0,
_1,
},
- "waterlogged" => bool,
+ "waterlogged" => Waterlogged(bool),
"level" => WaterLevel {
_0,
_1,
@@ -108,7 +108,7 @@ make_block_states! {
_6,
_7,
},
- "persistent" => bool,
+ "persistent" => Persistent(bool),
"distance" => SpruceLeavesDistance {
_1,
_2,
@@ -198,7 +198,7 @@ make_block_states! {
Up,
Down,
},
- "triggered" => bool,
+ "triggered" => Triggered(bool),
"instrument" => Sound {
Harp,
Basedrum,
@@ -251,14 +251,14 @@ make_block_states! {
_23,
_24,
},
- "powered" => bool,
+ "powered" => Powered(bool),
"facing" => FacingCardinal {
North,
South,
West,
East,
},
- "occupied" => bool,
+ "occupied" => Occupied(bool),
"part" => Part {
Head,
Foot,
@@ -271,7 +271,7 @@ make_block_states! {
AscendingNorth,
AscendingSouth,
},
- "extended" => bool,
+ "extended" => Extended(bool),
"half" => Half {
Upper,
Lower,
@@ -280,14 +280,9 @@ make_block_states! {
Normal,
Sticky,
},
- "short" => bool,
- "unstable" => bool,
- "slot_0_occupied" => bool,
- "slot_1_occupied" => bool,
- "slot_2_occupied" => bool,
- "slot_3_occupied" => bool,
- "slot_4_occupied" => bool,
- "slot_5_occupied" => bool,
+ "short" => Short(bool),
+ "unstable" => Unstable(bool),
+ "slot_5_occupied" => TrueFalse(bool),
"age" => FireAge {
_0,
_1,
@@ -306,11 +301,11 @@ make_block_states! {
_14,
_15,
},
- "east" => bool,
- "north" => bool,
- "south" => bool,
- "up" => bool,
- "west" => bool,
+ "east" => East(bool),
+ "north" => North(bool),
+ "south" => South(bool),
+ "up" => Up(bool),
+ "west" => West(bool),
"half" => TopBottom {
Top,
Bottom,
@@ -385,7 +380,7 @@ make_block_states! {
_6,
_7,
},
- "lit" => bool,
+ "lit" => Lit(bool),
"rotation" => OakSignRotation {
_0,
_1,
@@ -552,7 +547,7 @@ make_block_states! {
Left,
Right,
},
- "open" => bool,
+ "open" => Open(bool),
"shape" => Shape {
NorthSouth,
EastWest,
@@ -565,7 +560,7 @@ make_block_states! {
NorthWest,
NorthEast,
},
- "attached" => bool,
+ "attached" => Attached(bool),
"rotation" => OakHangingSignRotation {
_0,
_1,
@@ -815,7 +810,7 @@ make_block_states! {
_14,
_15,
},
- "has_record" => bool,
+ "has_record" => HasRecord(bool),
"axis" => AxisXZ {
X,
Z,
@@ -835,8 +830,8 @@ make_block_states! {
_3,
_4,
},
- "locked" => bool,
- "down" => bool,
+ "locked" => Locked(bool),
+ "down" => Down(bool),
"age" => PumpkinStemAge {
_0,
_1,
@@ -857,19 +852,16 @@ make_block_states! {
_6,
_7,
},
- "down" => bool,
- "north" => bool,
- "south" => bool,
- "up" => bool,
- "west" => bool,
- "in_wall" => bool,
+ "in_wall" => InWall(bool),
"age" => NetherWartAge {
_0,
_1,
_2,
_3,
},
- "has_bottle" => bool,
+ "has_bottle" => HasBottle0(bool),
+ "has_bottle" => HasBottle1(bool),
+ "has_bottle" => HasBottle2(bool),
"level" => WaterCauldronLevel {
_1,
_2,
@@ -880,14 +872,14 @@ make_block_states! {
_2,
_3,
},
- "eye" => bool,
+ "eye" => Eye(bool),
"age" => CocoaAge {
_0,
_1,
_2,
},
- "disarmed" => bool,
- "conditional" => bool,
+ "disarmed" => Disarmed(bool),
+ "conditional" => Conditional(bool),
"east" => EastWall {
None,
Low,
@@ -1094,7 +1086,7 @@ make_block_states! {
Compare,
Subtract,
},
- "inverted" => bool,
+ "inverted" => Inverted(bool),
"power" => DaylightDetectorPower {
_0,
_1,
@@ -1113,7 +1105,7 @@ make_block_states! {
_14,
_15,
},
- "enabled" => bool,
+ "enabled" => Enabled(bool),
"facing" => Facing {
Down,
North,
@@ -1530,8 +1522,8 @@ make_block_states! {
_0,
_1,
},
- "drag" => bool,
- "bottom" => bool,
+ "drag" => Drag(bool),
+ "bottom" => Bottom(bool),
"distance" => ScaffoldingDistance {
_0,
_1,
@@ -1542,14 +1534,14 @@ make_block_states! {
_6,
_7,
},
- "has_book" => bool,
+ "has_book" => HasBook(bool),
"attachment" => Attachment {
Floor,
Ceiling,
SingleWall,
DoubleWall,
},
- "signal_fire" => bool,
+ "signal_fire" => SignalFire(bool),
"age" => SweetBerryBushAge {
_0,
_1,
@@ -1863,11 +1855,9 @@ make_block_states! {
_14,
_15,
},
- "south" => bool,
- "west" => bool,
- "bloom" => bool,
- "can_summon" => bool,
- "shrieking" => bool,
+ "bloom" => Bloom(bool),
+ "can_summon" => CanSummon(bool),
+ "shrieking" => Shrieking(bool),
"thickness" => Thickness {
TipMerge,
Tip,
@@ -1907,7 +1897,7 @@ make_block_states! {
_24,
_25,
},
- "berries" => bool,
+ "berries" => Berries(bool),
"flower_amount" => PinkPetalsAmount {
_1,
_2,
@@ -1920,12 +1910,21 @@ make_block_states! {
Partial,
Full,
},
- "axis" => CacheSize {
+ "axis" => Falling {
X,
Y,
Z,
},
- "cracked" => bool,
+ "cracked" => Cracked(bool),
+ "crafting" => Crafting(bool),
+ "trial_spawner_state" => State {
+ Inactive,
+ WaitingForPlayers,
+ Active,
+ WaitingForRewardEjection,
+ EjectingReward,
+ Cooldown,
+ },
},
Blocks => {
air => BlockBehavior::new(), {},
@@ -1937,12 +1936,12 @@ make_block_states! {
andesite => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
polished_andesite => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
grass_block => BlockBehavior::new().strength(0.6, 0.6), {
- snowy: false,
+ snowy: Snowy(false),
},
dirt => BlockBehavior::new().strength(0.5, 0.5), {},
coarse_dirt => BlockBehavior::new().strength(0.5, 0.5), {},
podzol => BlockBehavior::new().strength(0.5, 0.5), {
- snowy: false,
+ snowy: Snowy(false),
},
cobblestone => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {},
oak_planks => BlockBehavior::new().strength(2.0, 3.0), {},
@@ -1978,9 +1977,9 @@ make_block_states! {
},
mangrove_propagule => BlockBehavior::new(), {
age: MangrovePropaguleAge::_0,
- hanging: false,
+ hanging: Hanging(false),
stage: MangrovePropaguleStage::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
bedrock => BlockBehavior::new().strength(-1.0, 3600000.0), {},
water => BlockBehavior::new().strength(100.0, 100.0), {
@@ -2030,7 +2029,7 @@ make_block_states! {
axis: Axis::Y,
},
mangrove_roots => BlockBehavior::new().strength(0.7, 0.7), {
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
muddy_mangrove_roots => BlockBehavior::new().strength(0.7, 0.7), {
axis: Axis::Y,
@@ -2115,53 +2114,53 @@ make_block_states! {
},
oak_leaves => BlockBehavior::new().strength(0.2, 0.2), {
distance: OakLeavesDistance::_7,
- persistent: false,
- waterlogged: false,
+ persistent: Persistent(false),
+ waterlogged: Waterlogged(false),
},
spruce_leaves => BlockBehavior::new().strength(0.2, 0.2), {
distance: SpruceLeavesDistance::_7,
- persistent: false,
- waterlogged: false,
+ persistent: Persistent(false),
+ waterlogged: Waterlogged(false),
},
birch_leaves => BlockBehavior::new().strength(0.2, 0.2), {
distance: BirchLeavesDistance::_7,
- persistent: false,
- waterlogged: false,
+ persistent: Persistent(false),
+ waterlogged: Waterlogged(false),
},
jungle_leaves => BlockBehavior::new().strength(0.2, 0.2), {
distance: JungleLeavesDistance::_7,
- persistent: false,
- waterlogged: false,
+ persistent: Persistent(false),
+ waterlogged: Waterlogged(false),
},
acacia_leaves => BlockBehavior::new().strength(0.2, 0.2), {
distance: AcaciaLeavesDistance::_7,
- persistent: false,
- waterlogged: false,
+ persistent: Persistent(false),
+ waterlogged: Waterlogged(false),
},
cherry_leaves => BlockBehavior::new().strength(0.2, 0.2), {
distance: CherryLeavesDistance::_7,
- persistent: false,
- waterlogged: false,
+ persistent: Persistent(false),
+ waterlogged: Waterlogged(false),
},
dark_oak_leaves => BlockBehavior::new().strength(0.2, 0.2), {
distance: DarkOakLeavesDistance::_7,
- persistent: false,
- waterlogged: false,
+ persistent: Persistent(false),
+ waterlogged: Waterlogged(false),
},
mangrove_leaves => BlockBehavior::new().strength(0.2, 0.2), {
distance: MangroveLeavesDistance::_7,
- persistent: false,
- waterlogged: false,
+ persistent: Persistent(false),
+ waterlogged: Waterlogged(false),
},
azalea_leaves => BlockBehavior::new().strength(0.2, 0.2), {
distance: AzaleaLeavesDistance::_7,
- persistent: false,
- waterlogged: false,
+ persistent: Persistent(false),
+ waterlogged: Waterlogged(false),
},
flowering_azalea_leaves => BlockBehavior::new().strength(0.2, 0.2), {
distance: FloweringAzaleaLeavesDistance::_7,
- persistent: false,
- waterlogged: false,
+ persistent: Persistent(false),
+ waterlogged: Waterlogged(false),
},
sponge => BlockBehavior::new().strength(0.6, 0.6), {},
wet_sponge => BlockBehavior::new().strength(0.6, 0.6), {},
@@ -2171,7 +2170,7 @@ make_block_states! {
lapis_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 3.0), {},
dispenser => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 3.5), {
facing: FacingCubic::North,
- triggered: false,
+ triggered: Triggered(false),
},
sandstone => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.8, 0.8), {},
chiseled_sandstone => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.8, 0.8), {},
@@ -2179,104 +2178,104 @@ make_block_states! {
note_block => BlockBehavior::new().strength(0.8, 0.8), {
instrument: Sound::Harp,
note: NoteBlockNote::_0,
- powered: false,
+ powered: Powered(false),
},
white_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
orange_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
magenta_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
light_blue_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
yellow_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
lime_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
pink_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
gray_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
light_gray_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
cyan_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
purple_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
blue_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
brown_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
green_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
red_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
black_bed => BlockBehavior::new().strength(0.2, 0.2), {
facing: FacingCardinal::North,
- occupied: false,
+ occupied: Occupied(false),
part: Part::Foot,
},
powered_rail => BlockBehavior::new().strength(0.7, 0.7), {
- powered: false,
+ powered: Powered(false),
shape: RailShape::NorthSouth,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
detector_rail => BlockBehavior::new().strength(0.7, 0.7), {
- powered: false,
+ powered: Powered(false),
shape: RailShape::NorthSouth,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
sticky_piston => BlockBehavior::new().strength(1.5, 1.5), {
- extended: false,
+ extended: Extended(false),
facing: FacingCubic::North,
},
cobweb => BlockBehavior::new().requires_correct_tool_for_drops().strength(4.0, 4.0), {},
- grass => BlockBehavior::new(), {},
+ short_grass => BlockBehavior::new(), {},
fern => BlockBehavior::new(), {},
dead_bush => BlockBehavior::new(), {},
seagrass => BlockBehavior::new(), {},
@@ -2284,13 +2283,13 @@ make_block_states! {
half: Half::Lower,
},
piston => BlockBehavior::new().strength(1.5, 1.5), {
- extended: false,
+ extended: Extended(false),
facing: FacingCubic::North,
},
piston_head => BlockBehavior::new().strength(1.5, 1.5), {
kind: PistonType::Normal,
facing: FacingCubic::North,
- short: false,
+ short: Short(false),
},
white_wool => BlockBehavior::new().strength(0.8, 0.8), {},
orange_wool => BlockBehavior::new().strength(0.8, 0.8), {},
@@ -2332,17 +2331,17 @@ make_block_states! {
iron_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 6.0), {},
bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {},
tnt => BlockBehavior::new(), {
- unstable: false,
+ unstable: Unstable(false),
},
bookshelf => BlockBehavior::new().strength(1.5, 1.5), {},
chiseled_bookshelf => BlockBehavior::new().strength(1.5, 1.5), {
facing: FacingCardinal::North,
- slot_0_occupied: false,
- slot_1_occupied: false,
- slot_2_occupied: false,
- slot_3_occupied: false,
- slot_4_occupied: false,
- slot_5_occupied: false,
+ slot_0_occupied: TrueFalse(false),
+ slot_1_occupied: TrueFalse(false),
+ slot_2_occupied: TrueFalse(false),
+ slot_3_occupied: TrueFalse(false),
+ slot_4_occupied: TrueFalse(false),
+ slot_5_occupied: TrueFalse(false),
},
mossy_cobblestone => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {},
obsidian => BlockBehavior::new().requires_correct_tool_for_drops().strength(50.0, 1200.0), {},
@@ -2352,11 +2351,11 @@ make_block_states! {
},
fire => BlockBehavior::new(), {
age: FireAge::_0,
- east: false,
- north: false,
- south: false,
- up: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ up: Up(false),
+ west: West(false),
},
soul_fire => BlockBehavior::new(), {},
spawner => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 5.0), {},
@@ -2364,12 +2363,12 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
chest => BlockBehavior::new().strength(2.5, 2.5), {
kind: ChestType::Single,
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
redstone_wire => BlockBehavior::new(), {
east: WireEast::None,
@@ -2390,259 +2389,259 @@ make_block_states! {
},
furnace => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 3.5), {
facing: FacingCardinal::North,
- lit: false,
+ lit: Lit(false),
},
oak_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: OakSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
spruce_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: SpruceSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
birch_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: BirchSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
acacia_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: AcaciaSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cherry_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: CherrySignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
jungle_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: JungleSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
dark_oak_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: DarkOakSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mangrove_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: MangroveSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
bamboo_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: BambooSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
oak_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
ladder => BlockBehavior::new().strength(0.4, 0.4), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
rail => BlockBehavior::new().strength(0.7, 0.7), {
shape: Shape::NorthSouth,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cobblestone_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
oak_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
spruce_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
birch_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
acacia_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cherry_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
jungle_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
dark_oak_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mangrove_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
bamboo_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
oak_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: OakHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
spruce_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: SpruceHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
birch_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: BirchHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
acacia_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: AcaciaHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cherry_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: CherryHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
jungle_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: JungleHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
dark_oak_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: DarkOakHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
crimson_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: CrimsonHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
warped_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: WarpedHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mangrove_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: MangroveHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
bamboo_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
- attached: false,
+ attached: Attached(false),
rotation: BambooHangingSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
oak_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
spruce_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
birch_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
acacia_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cherry_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
jungle_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
dark_oak_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mangrove_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
crimson_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
warped_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
bamboo_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
lever => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
stone_pressure_plate => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
iron_door => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 5.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
oak_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
spruce_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
birch_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
jungle_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
acacia_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
cherry_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
dark_oak_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
mangrove_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
bamboo_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
redstone_ore => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 3.0), {
- lit: false,
+ lit: Lit(false),
},
deepslate_redstone_ore => BlockBehavior::new().requires_correct_tool_for_drops().strength(4.5, 3.0), {
- lit: false,
+ lit: Lit(false),
},
redstone_torch => BlockBehavior::new(), {
- lit: true,
+ lit: Lit(true),
},
redstone_wall_torch => BlockBehavior::new(), {
facing: FacingCardinal::North,
- lit: true,
+ lit: Lit(true),
},
stone_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
snow => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.1, 0.1), {
layers: SnowLayers::_1,
@@ -2657,16 +2656,15 @@ make_block_states! {
age: SugarCaneAge::_0,
},
jukebox => BlockBehavior::new().strength(2.0, 6.0), {
- has_record: false,
+ has_record: HasRecord(false),
},
oak_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
- pumpkin => BlockBehavior::new().strength(1.0, 1.0), {},
netherrack => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.4, 0.4), {},
soul_sand => BlockBehavior::new().strength(0.5, 0.5), {},
soul_soil => BlockBehavior::new().strength(0.5, 0.5), {},
@@ -2696,8 +2694,8 @@ make_block_states! {
repeater => BlockBehavior::new(), {
delay: RepeaterDelay::_1,
facing: FacingCardinal::North,
- locked: false,
- powered: false,
+ locked: Locked(false),
+ powered: Powered(false),
},
white_stained_glass => BlockBehavior::new().strength(0.3, 0.3), {},
orange_stained_glass => BlockBehavior::new().strength(0.3, 0.3), {},
@@ -2718,65 +2716,65 @@ make_block_states! {
oak_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
spruce_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
birch_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
jungle_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
acacia_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
cherry_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
dark_oak_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
mangrove_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
bamboo_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
stone_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
mossy_stone_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
@@ -2791,47 +2789,48 @@ make_block_states! {
infested_cracked_stone_bricks => BlockBehavior::new().strength(0.75, 0.75), {},
infested_chiseled_stone_bricks => BlockBehavior::new().strength(0.75, 0.75), {},
brown_mushroom_block => BlockBehavior::new().strength(0.2, 0.2), {
- down: true,
- east: true,
- north: true,
- south: true,
- up: true,
- west: true,
+ down: Down(true),
+ east: East(true),
+ north: North(true),
+ south: South(true),
+ up: Up(true),
+ west: West(true),
},
red_mushroom_block => BlockBehavior::new().strength(0.2, 0.2), {
- down: true,
- east: true,
- north: true,
- south: true,
- up: true,
- west: true,
+ down: Down(true),
+ east: East(true),
+ north: North(true),
+ south: South(true),
+ up: Up(true),
+ west: West(true),
},
mushroom_stem => BlockBehavior::new().strength(0.2, 0.2), {
- down: true,
- east: true,
- north: true,
- south: true,
- up: true,
- west: true,
+ down: Down(true),
+ east: East(true),
+ north: North(true),
+ south: South(true),
+ up: Up(true),
+ west: West(true),
},
iron_bars => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 6.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
chain => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 6.0), {
axis: Axis::Y,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
+ pumpkin => BlockBehavior::new().strength(1.0, 1.0), {},
melon => BlockBehavior::new().strength(1.0, 1.0), {},
attached_pumpkin_stem => BlockBehavior::new(), {
facing: FacingCardinal::North,
@@ -2846,71 +2845,71 @@ make_block_states! {
age: MelonStemAge::_0,
},
vine => BlockBehavior::new().strength(0.2, 0.2), {
- east: false,
- north: false,
- south: false,
- up: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ up: Up(false),
+ west: West(false),
},
glow_lichen => BlockBehavior::new().strength(0.2, 0.2), {
- down: false,
- east: false,
- north: false,
- south: false,
- up: false,
- waterlogged: false,
- west: false,
+ down: Down(false),
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ up: Up(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
oak_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
brick_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
stone_brick_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mud_brick_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mycelium => BlockBehavior::new().strength(0.6, 0.6), {
- snowy: false,
+ snowy: Snowy(false),
},
lily_pad => BlockBehavior::new(), {},
nether_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {},
nether_brick_fence => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
nether_brick_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
nether_wart => BlockBehavior::new(), {
age: NetherWartAge::_0,
},
enchanting_table => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 1200.0), {},
brewing_stand => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.5, 0.5), {
- has_bottle: false,
- has_bottle: false,
- has_bottle: false,
+ has_bottle: HasBottle0(false),
+ has_bottle: HasBottle1(false),
+ has_bottle: HasBottle2(false),
},
cauldron => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 2.0), {},
water_cauldron => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 2.0), {
@@ -2922,13 +2921,13 @@ make_block_states! {
},
end_portal => BlockBehavior::new().strength(-1.0, 3600000.0), {},
end_portal_frame => BlockBehavior::new().strength(-1.0, 3600000.0), {
- eye: false,
+ eye: Eye(false),
facing: FacingCardinal::North,
},
end_stone => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 9.0), {},
dragon_egg => BlockBehavior::new().strength(3.0, 9.0), {},
redstone_lamp => BlockBehavior::new().strength(0.3, 0.3), {
- lit: false,
+ lit: Lit(false),
},
cocoa => BlockBehavior::new().strength(0.2, 3.0), {
age: CocoaAge::_0,
@@ -2938,49 +2937,49 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
emerald_ore => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 3.0), {},
deepslate_emerald_ore => BlockBehavior::new().requires_correct_tool_for_drops().strength(4.5, 3.0), {},
ender_chest => BlockBehavior::new().requires_correct_tool_for_drops().strength(22.5, 600.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
tripwire_hook => BlockBehavior::new(), {
- attached: false,
+ attached: Attached(false),
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
tripwire => BlockBehavior::new(), {
- attached: false,
- disarmed: false,
- east: false,
- north: false,
- powered: false,
- south: false,
- west: false,
+ attached: Attached(false),
+ disarmed: Disarmed(false),
+ east: East(false),
+ north: North(false),
+ powered: Powered(false),
+ south: South(false),
+ west: West(false),
},
emerald_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 6.0), {},
spruce_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
birch_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
jungle_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
command_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(-1.0, 3600000.0), {
- conditional: false,
+ conditional: Conditional(false),
facing: FacingCubic::North,
},
beacon => BlockBehavior::new().strength(3.0, 3.0), {},
@@ -2988,16 +2987,16 @@ make_block_states! {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
mossy_cobblestone_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
flower_pot => BlockBehavior::new(), {},
@@ -3037,103 +3036,103 @@ make_block_states! {
oak_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
spruce_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
birch_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
jungle_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
acacia_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
cherry_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
dark_oak_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
mangrove_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
bamboo_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
skeleton_skull => BlockBehavior::new().strength(1.0, 1.0), {
- powered: false,
+ powered: Powered(false),
rotation: SkeletonSkullRotation::_0,
},
skeleton_wall_skull => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
wither_skeleton_skull => BlockBehavior::new().strength(1.0, 1.0), {
- powered: false,
+ powered: Powered(false),
rotation: WitherSkeletonSkullRotation::_0,
},
wither_skeleton_wall_skull => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
zombie_head => BlockBehavior::new().strength(1.0, 1.0), {
- powered: false,
+ powered: Powered(false),
rotation: ZombieHeadRotation::_0,
},
zombie_wall_head => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
player_head => BlockBehavior::new().strength(1.0, 1.0), {
- powered: false,
+ powered: Powered(false),
rotation: PlayerHeadRotation::_0,
},
player_wall_head => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
creeper_head => BlockBehavior::new().strength(1.0, 1.0), {
- powered: false,
+ powered: Powered(false),
rotation: CreeperHeadRotation::_0,
},
creeper_wall_head => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
dragon_head => BlockBehavior::new().strength(1.0, 1.0), {
- powered: false,
+ powered: Powered(false),
rotation: DragonHeadRotation::_0,
},
dragon_wall_head => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
piglin_head => BlockBehavior::new().strength(1.0, 1.0), {
- powered: false,
+ powered: Powered(false),
rotation: PiglinHeadRotation::_0,
},
piglin_wall_head => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
anvil => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 1200.0), {
facing: FacingCardinal::North,
@@ -3147,7 +3146,7 @@ make_block_states! {
trapped_chest => BlockBehavior::new().strength(2.5, 2.5), {
kind: ChestType::Single,
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
light_weighted_pressure_plate => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.5, 0.5), {
power: LightWeightedPressurePlatePower::_0,
@@ -3158,16 +3157,16 @@ make_block_states! {
comparator => BlockBehavior::new(), {
facing: FacingCardinal::North,
mode: ComparatorType::Compare,
- powered: false,
+ powered: Powered(false),
},
daylight_detector => BlockBehavior::new().strength(0.2, 0.2), {
- inverted: false,
+ inverted: Inverted(false),
power: DaylightDetectorPower::_0,
},
redstone_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 6.0), {},
nether_quartz_ore => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 3.0), {},
hopper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 4.8), {
- enabled: true,
+ enabled: Enabled(true),
facing: Facing::Down,
},
quartz_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.8, 0.8), {},
@@ -3179,16 +3178,16 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
activator_rail => BlockBehavior::new().strength(0.7, 0.7), {
- powered: false,
+ powered: Powered(false),
shape: RailShape::NorthSouth,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
dropper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 3.5), {
facing: FacingCubic::North,
- triggered: false,
+ triggered: Triggered(false),
},
white_terracotta => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.25, 4.2), {},
orange_terracotta => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.25, 4.2), {},
@@ -3207,167 +3206,167 @@ make_block_states! {
red_terracotta => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.25, 4.2), {},
black_terracotta => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.25, 4.2), {},
white_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
orange_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
magenta_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
light_blue_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
yellow_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
lime_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
pink_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
gray_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
light_gray_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
cyan_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
purple_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
blue_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
brown_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
green_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
red_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
black_stained_glass_pane => BlockBehavior::new().strength(0.3, 0.3), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
acacia_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cherry_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
dark_oak_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mangrove_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
bamboo_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
bamboo_mosaic_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
slime_block => BlockBehavior::new().friction(0.8), {},
barrier => BlockBehavior::new().strength(-1.0, 3600000.8), {
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
light => BlockBehavior::new().strength(-1.0, 3600000.8), {
level: LightLevel::_15,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
iron_trapdoor => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 5.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
prismarine => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
prismarine_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
@@ -3376,31 +3375,31 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
prismarine_brick_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
dark_prismarine_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
prismarine_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
prismarine_brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
dark_prismarine_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
sea_lantern => BlockBehavior::new().strength(0.3, 0.3), {},
hay_block => BlockBehavior::new().strength(0.5, 0.5), {
@@ -3546,103 +3545,103 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
oak_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
spruce_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
birch_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
jungle_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
acacia_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cherry_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
dark_oak_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mangrove_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
bamboo_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
bamboo_mosaic_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
stone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
smooth_stone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
sandstone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cut_sandstone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
petrified_oak_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cobblestone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
stone_brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mud_brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
nether_brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
quartz_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
red_sandstone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cut_red_sandstone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
purpur_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
smooth_stone => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {},
smooth_sandstone => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {},
@@ -3650,174 +3649,174 @@ make_block_states! {
smooth_red_sandstone => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {},
spruce_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
birch_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
jungle_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
acacia_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
cherry_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
dark_oak_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
mangrove_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
bamboo_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
spruce_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
birch_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
jungle_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
acacia_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
cherry_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
dark_oak_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
mangrove_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
bamboo_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
spruce_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
birch_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
jungle_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
acacia_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
cherry_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
dark_oak_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
mangrove_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
bamboo_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
end_rod => BlockBehavior::new(), {
facing: FacingCubic::Up,
},
chorus_plant => BlockBehavior::new().strength(0.4, 0.4), {
- down: false,
- east: false,
- north: false,
- south: false,
- up: false,
- west: false,
+ down: Down(false),
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ up: Up(false),
+ west: West(false),
},
chorus_flower => BlockBehavior::new().strength(0.4, 0.4), {
age: ChorusFlowerAge::_0,
@@ -3830,7 +3829,7 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
end_stone_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 9.0), {},
torchflower_crop => BlockBehavior::new(), {
@@ -3849,11 +3848,11 @@ make_block_states! {
dirt_path => BlockBehavior::new().strength(0.65, 0.65), {},
end_gateway => BlockBehavior::new().strength(-1.0, 3600000.0), {},
repeating_command_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(-1.0, 3600000.0), {
- conditional: false,
+ conditional: Conditional(false),
facing: FacingCubic::North,
},
chain_command_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(-1.0, 3600000.0), {
- conditional: false,
+ conditional: Conditional(false),
facing: FacingCubic::North,
},
frosted_ice => BlockBehavior::new().strength(0.5, 0.5).friction(0.98), {
@@ -3868,7 +3867,7 @@ make_block_states! {
structure_void => BlockBehavior::new(), {},
observer => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 3.0), {
facing: FacingCubic::South,
- powered: false,
+ powered: Powered(false),
},
shulker_box => BlockBehavior::new().strength(2.0, 2.0), {
facing: FacingCubic::Up,
@@ -4024,112 +4023,112 @@ make_block_states! {
fire_coral_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
horn_coral_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
dead_tube_coral => BlockBehavior::new().requires_correct_tool_for_drops(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_brain_coral => BlockBehavior::new().requires_correct_tool_for_drops(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_bubble_coral => BlockBehavior::new().requires_correct_tool_for_drops(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_fire_coral => BlockBehavior::new().requires_correct_tool_for_drops(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_horn_coral => BlockBehavior::new().requires_correct_tool_for_drops(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
tube_coral => BlockBehavior::new(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
brain_coral => BlockBehavior::new(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
bubble_coral => BlockBehavior::new(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
fire_coral => BlockBehavior::new(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
horn_coral => BlockBehavior::new(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_tube_coral_fan => BlockBehavior::new().requires_correct_tool_for_drops(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_brain_coral_fan => BlockBehavior::new().requires_correct_tool_for_drops(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_bubble_coral_fan => BlockBehavior::new().requires_correct_tool_for_drops(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_fire_coral_fan => BlockBehavior::new().requires_correct_tool_for_drops(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_horn_coral_fan => BlockBehavior::new().requires_correct_tool_for_drops(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
tube_coral_fan => BlockBehavior::new(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
brain_coral_fan => BlockBehavior::new(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
bubble_coral_fan => BlockBehavior::new(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
fire_coral_fan => BlockBehavior::new(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
horn_coral_fan => BlockBehavior::new(), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_tube_coral_wall_fan => BlockBehavior::new().requires_correct_tool_for_drops(), {
facing: FacingCardinal::North,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_brain_coral_wall_fan => BlockBehavior::new().requires_correct_tool_for_drops(), {
facing: FacingCardinal::North,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_bubble_coral_wall_fan => BlockBehavior::new().requires_correct_tool_for_drops(), {
facing: FacingCardinal::North,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_fire_coral_wall_fan => BlockBehavior::new().requires_correct_tool_for_drops(), {
facing: FacingCardinal::North,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
dead_horn_coral_wall_fan => BlockBehavior::new().requires_correct_tool_for_drops(), {
facing: FacingCardinal::North,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
tube_coral_wall_fan => BlockBehavior::new(), {
facing: FacingCardinal::North,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
brain_coral_wall_fan => BlockBehavior::new(), {
facing: FacingCardinal::North,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
bubble_coral_wall_fan => BlockBehavior::new(), {
facing: FacingCardinal::North,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
fire_coral_wall_fan => BlockBehavior::new(), {
facing: FacingCardinal::North,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
horn_coral_wall_fan => BlockBehavior::new(), {
facing: FacingCardinal::North,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
sea_pickle => BlockBehavior::new(), {
pickles: SeaPicklePickles::_1,
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
blue_ice => BlockBehavior::new().strength(2.8, 2.8).friction(0.989), {},
conduit => BlockBehavior::new().strength(3.0, 3.0), {
- waterlogged: true,
+ waterlogged: Waterlogged(true),
},
bamboo_sapling => BlockBehavior::new().strength(1.0, 1.0), {},
bamboo => BlockBehavior::new().strength(1.0, 1.0), {
@@ -4141,267 +4140,267 @@ make_block_states! {
void_air => BlockBehavior::new(), {},
cave_air => BlockBehavior::new(), {},
bubble_column => BlockBehavior::new(), {
- drag: true,
+ drag: Drag(true),
},
polished_granite_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
smooth_red_sandstone_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mossy_stone_brick_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_diorite_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mossy_cobblestone_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
end_stone_brick_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 9.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
stone_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
smooth_sandstone_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
smooth_quartz_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
granite_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
andesite_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
red_nether_brick_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_andesite_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
diorite_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_granite_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
smooth_red_sandstone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mossy_stone_brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_diorite_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
mossy_cobblestone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
end_stone_brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 9.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
smooth_sandstone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
smooth_quartz_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
granite_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
andesite_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
red_nether_brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_andesite_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
diorite_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
brick_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
prismarine_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
red_sandstone_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.8, 0.8), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
mossy_stone_brick_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
granite_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
stone_brick_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
mud_brick_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 3.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
nether_brick_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
andesite_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
red_nether_brick_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
sandstone_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.8, 0.8), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
end_stone_brick_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 9.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
diorite_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
scaffolding => BlockBehavior::new(), {
- bottom: false,
+ bottom: Bottom(false),
distance: ScaffoldingDistance::_7,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
loom => BlockBehavior::new().strength(2.5, 2.5), {
facing: FacingCardinal::North,
},
barrel => BlockBehavior::new().strength(2.5, 2.5), {
facing: FacingCubic::North,
- open: false,
+ open: Open(false),
},
smoker => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 3.5), {
facing: FacingCardinal::North,
- lit: false,
+ lit: Lit(false),
},
blast_furnace => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 3.5), {
facing: FacingCardinal::North,
- lit: false,
+ lit: Lit(false),
},
cartography_table => BlockBehavior::new().strength(2.5, 2.5), {},
fletching_table => BlockBehavior::new().strength(2.5, 2.5), {},
@@ -4411,8 +4410,8 @@ make_block_states! {
},
lectern => BlockBehavior::new().strength(2.5, 2.5), {
facing: FacingCardinal::North,
- has_book: false,
- powered: false,
+ has_book: HasBook(false),
+ powered: Powered(false),
},
smithing_table => BlockBehavior::new().strength(2.5, 2.5), {},
stonecutter => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 3.5), {
@@ -4421,27 +4420,27 @@ make_block_states! {
bell => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 5.0), {
attachment: Attachment::Floor,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
lantern => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 3.5), {
- hanging: false,
- waterlogged: false,
+ hanging: Hanging(false),
+ waterlogged: Waterlogged(false),
},
soul_lantern => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 3.5), {
- hanging: false,
- waterlogged: false,
+ hanging: Hanging(false),
+ waterlogged: Waterlogged(false),
},
campfire => BlockBehavior::new().strength(2.0, 2.0), {
facing: FacingCardinal::North,
- lit: true,
- signal_fire: false,
- waterlogged: false,
+ lit: Lit(true),
+ signal_fire: SignalFire(false),
+ waterlogged: Waterlogged(false),
},
soul_campfire => BlockBehavior::new().strength(2.0, 2.0), {
facing: FacingCardinal::North,
- lit: true,
- signal_fire: false,
- waterlogged: false,
+ lit: Lit(true),
+ signal_fire: SignalFire(false),
+ waterlogged: Waterlogged(false),
},
sweet_berry_bush => BlockBehavior::new(), {
age: SweetBerryBushAge::_0,
@@ -4491,109 +4490,109 @@ make_block_states! {
warped_planks => BlockBehavior::new().strength(2.0, 3.0), {},
crimson_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
warped_slab => BlockBehavior::new().strength(2.0, 3.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
crimson_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
warped_pressure_plate => BlockBehavior::new().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
crimson_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
warped_fence => BlockBehavior::new().strength(2.0, 3.0), {
- east: false,
- north: false,
- south: false,
- waterlogged: false,
- west: false,
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
crimson_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
warped_trapdoor => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
- open: false,
- powered: false,
- waterlogged: false,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
crimson_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
warped_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
- in_wall: false,
- open: false,
- powered: false,
+ in_wall: InWall(false),
+ open: Open(false),
+ powered: Powered(false),
},
crimson_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
warped_stairs => BlockBehavior::new().strength(2.0, 3.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
crimson_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
warped_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
crimson_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
warped_door => BlockBehavior::new().strength(3.0, 3.0), {
facing: FacingCardinal::North,
half: Half::Lower,
hinge: Hinge::Left,
- open: false,
- powered: false,
+ open: Open(false),
+ powered: Powered(false),
},
crimson_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: CrimsonSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
warped_sign => BlockBehavior::new().strength(1.0, 1.0), {
rotation: WarpedSignRotation::_0,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
crimson_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
warped_wall_sign => BlockBehavior::new().strength(1.0, 1.0), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
structure_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(-1.0, 3600000.0), {
mode: Mode::Load,
@@ -4633,19 +4632,19 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
blackstone_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
blackstone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_blackstone => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {},
polished_blackstone_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
@@ -4653,20 +4652,20 @@ make_block_states! {
chiseled_polished_blackstone => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
polished_blackstone_brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_blackstone_brick_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_blackstone_brick_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
gilded_blackstone => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
@@ -4674,26 +4673,26 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_blackstone_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_blackstone_pressure_plate => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.5, 0.5), {
- powered: false,
+ powered: Powered(false),
},
polished_blackstone_button => BlockBehavior::new().strength(0.5, 0.5), {
face: Face::Wall,
facing: FacingCardinal::North,
- powered: false,
+ powered: Powered(false),
},
polished_blackstone_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
chiseled_nether_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {},
@@ -4701,240 +4700,306 @@ make_block_states! {
quartz_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.8, 0.8), {},
candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: CandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
white_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: WhiteCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
orange_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: OrangeCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
magenta_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: MagentaCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
light_blue_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: LightBlueCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
yellow_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: YellowCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
lime_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: LimeCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
pink_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: PinkCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
gray_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: GrayCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
light_gray_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: LightGrayCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
cyan_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: CyanCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
purple_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: PurpleCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
blue_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: BlueCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
brown_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: BrownCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
green_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: GreenCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
red_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: RedCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
black_candle => BlockBehavior::new().strength(0.1, 0.1), {
candles: BlackCandleCandles::_1,
- lit: false,
- waterlogged: false,
+ lit: Lit(false),
+ waterlogged: Waterlogged(false),
},
candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
white_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
orange_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
magenta_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
light_blue_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
yellow_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
lime_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
pink_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
gray_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
light_gray_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
cyan_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
purple_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
blue_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
brown_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
green_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
red_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
black_candle_cake => BlockBehavior::new().strength(0.5, 0.5), {
- lit: false,
+ lit: Lit(false),
},
amethyst_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 1.5), {},
budding_amethyst => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 1.5), {},
amethyst_cluster => BlockBehavior::new().strength(1.5, 1.5), {
facing: FacingCubic::Up,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
large_amethyst_bud => BlockBehavior::new().strength(1.5, 1.5), {
facing: FacingCubic::Up,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
medium_amethyst_bud => BlockBehavior::new().strength(1.5, 1.5), {
facing: FacingCubic::Up,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
small_amethyst_bud => BlockBehavior::new().strength(1.5, 1.5), {
facing: FacingCubic::Up,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
tuff => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
+ tuff_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
+ kind: Type::Bottom,
+ waterlogged: Waterlogged(false),
+ },
+ tuff_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ shape: StairShape::Straight,
+ waterlogged: Waterlogged(false),
+ },
+ tuff_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
+ east: EastWall::None,
+ north: NorthWall::None,
+ south: SouthWall::None,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
+ west: WestWall::None,
+ },
+ polished_tuff => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
+ polished_tuff_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
+ kind: Type::Bottom,
+ waterlogged: Waterlogged(false),
+ },
+ polished_tuff_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ shape: StairShape::Straight,
+ waterlogged: Waterlogged(false),
+ },
+ polished_tuff_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
+ east: EastWall::None,
+ north: NorthWall::None,
+ south: SouthWall::None,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
+ west: WestWall::None,
+ },
+ chiseled_tuff => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
+ tuff_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
+ tuff_brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
+ kind: Type::Bottom,
+ waterlogged: Waterlogged(false),
+ },
+ tuff_brick_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ shape: StairShape::Straight,
+ waterlogged: Waterlogged(false),
+ },
+ tuff_brick_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {
+ east: EastWall::None,
+ north: NorthWall::None,
+ south: SouthWall::None,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
+ west: WestWall::None,
+ },
+ chiseled_tuff_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0), {},
calcite => BlockBehavior::new().requires_correct_tool_for_drops().strength(0.75, 0.75), {},
tinted_glass => BlockBehavior::new().strength(0.3, 0.3), {},
powder_snow => BlockBehavior::new().strength(0.25, 0.25), {},
sculk_sensor => BlockBehavior::new().strength(1.5, 1.5), {
power: SculkSensorPower::_0,
sculk_sensor_phase: Phase::Inactive,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
calibrated_sculk_sensor => BlockBehavior::new().strength(1.5, 1.5), {
facing: FacingCardinal::North,
power: CalibratedSculkSensorPower::_0,
sculk_sensor_phase: Phase::Inactive,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
sculk => BlockBehavior::new().strength(0.2, 0.2), {},
sculk_vein => BlockBehavior::new().strength(0.2, 0.2), {
- down: false,
- east: false,
- north: false,
- south: false,
- up: false,
- waterlogged: false,
- west: false,
+ down: Down(false),
+ east: East(false),
+ north: North(false),
+ south: South(false),
+ up: Up(false),
+ waterlogged: Waterlogged(false),
+ west: West(false),
},
sculk_catalyst => BlockBehavior::new().strength(3.0, 3.0), {
- bloom: false,
+ bloom: Bloom(false),
},
sculk_shrieker => BlockBehavior::new().strength(3.0, 3.0), {
- can_summon: false,
- shrieking: false,
- waterlogged: false,
+ can_summon: CanSummon(false),
+ shrieking: Shrieking(false),
+ waterlogged: Waterlogged(false),
},
- oxidized_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
- weathered_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
- exposed_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
copper_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ exposed_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ weathered_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ oxidized_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
copper_ore => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 3.0), {},
deepslate_copper_ore => BlockBehavior::new().requires_correct_tool_for_drops().strength(4.5, 3.0), {},
oxidized_cut_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
weathered_cut_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
exposed_cut_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
cut_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ oxidized_chiseled_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ weathered_chiseled_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ exposed_chiseled_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ chiseled_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ waxed_oxidized_chiseled_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ waxed_weathered_chiseled_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ waxed_exposed_chiseled_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
+ waxed_chiseled_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
oxidized_cut_copper_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
weathered_cut_copper_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
exposed_cut_copper_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cut_copper_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
oxidized_cut_copper_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
weathered_cut_copper_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
exposed_cut_copper_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cut_copper_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
waxed_copper_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
waxed_weathered_copper => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {},
@@ -4948,59 +5013,227 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
waxed_weathered_cut_copper_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
waxed_exposed_cut_copper_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
waxed_cut_copper_stairs => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
waxed_oxidized_cut_copper_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
waxed_weathered_cut_copper_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
waxed_exposed_cut_copper_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
waxed_cut_copper_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
+ },
+ copper_door => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: Half::Lower,
+ hinge: Hinge::Left,
+ open: Open(false),
+ powered: Powered(false),
+ },
+ exposed_copper_door => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: Half::Lower,
+ hinge: Hinge::Left,
+ open: Open(false),
+ powered: Powered(false),
+ },
+ oxidized_copper_door => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: Half::Lower,
+ hinge: Hinge::Left,
+ open: Open(false),
+ powered: Powered(false),
+ },
+ weathered_copper_door => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: Half::Lower,
+ hinge: Hinge::Left,
+ open: Open(false),
+ powered: Powered(false),
+ },
+ waxed_copper_door => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: Half::Lower,
+ hinge: Hinge::Left,
+ open: Open(false),
+ powered: Powered(false),
+ },
+ waxed_exposed_copper_door => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: Half::Lower,
+ hinge: Hinge::Left,
+ open: Open(false),
+ powered: Powered(false),
+ },
+ waxed_oxidized_copper_door => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: Half::Lower,
+ hinge: Hinge::Left,
+ open: Open(false),
+ powered: Powered(false),
+ },
+ waxed_weathered_copper_door => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: Half::Lower,
+ hinge: Hinge::Left,
+ open: Open(false),
+ powered: Powered(false),
+ },
+ copper_trapdoor => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
+ },
+ exposed_copper_trapdoor => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
+ },
+ oxidized_copper_trapdoor => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
+ },
+ weathered_copper_trapdoor => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
+ },
+ waxed_copper_trapdoor => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
+ },
+ waxed_exposed_copper_trapdoor => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
+ },
+ waxed_oxidized_copper_trapdoor => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
+ },
+ waxed_weathered_copper_trapdoor => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ facing: FacingCardinal::North,
+ half: TopBottom::Bottom,
+ open: Open(false),
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
+ },
+ copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ waterlogged: Waterlogged(false),
+ },
+ exposed_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ waterlogged: Waterlogged(false),
+ },
+ weathered_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ waterlogged: Waterlogged(false),
+ },
+ oxidized_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ waterlogged: Waterlogged(false),
+ },
+ waxed_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ waterlogged: Waterlogged(false),
+ },
+ waxed_exposed_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ waterlogged: Waterlogged(false),
+ },
+ waxed_weathered_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ waterlogged: Waterlogged(false),
+ },
+ waxed_oxidized_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ waterlogged: Waterlogged(false),
+ },
+ copper_bulb => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ lit: Lit(false),
+ powered: Powered(false),
+ },
+ exposed_copper_bulb => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ lit: Lit(false),
+ powered: Powered(false),
+ },
+ weathered_copper_bulb => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ lit: Lit(false),
+ powered: Powered(false),
+ },
+ oxidized_copper_bulb => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ lit: Lit(false),
+ powered: Powered(false),
+ },
+ waxed_copper_bulb => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ lit: Lit(false),
+ powered: Powered(false),
+ },
+ waxed_exposed_copper_bulb => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ lit: Lit(false),
+ powered: Powered(false),
+ },
+ waxed_weathered_copper_bulb => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ lit: Lit(false),
+ powered: Powered(false),
+ },
+ waxed_oxidized_copper_bulb => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
+ lit: Lit(false),
+ powered: Powered(false),
},
lightning_rod => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {
facing: FacingCubic::Up,
- powered: false,
- waterlogged: false,
+ powered: Powered(false),
+ waterlogged: Waterlogged(false),
},
pointed_dripstone => BlockBehavior::new().strength(1.5, 3.0), {
thickness: Thickness::Tip,
vertical_direction: TipDirection::Up,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
dripstone_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 1.0), {},
cave_vines => BlockBehavior::new(), {
age: CaveVinesAge::_0,
- berries: false,
+ berries: Berries(false),
},
cave_vines_plant => BlockBehavior::new(), {
- berries: false,
+ berries: Berries(false),
},
spore_blossom => BlockBehavior::new(), {},
azalea => BlockBehavior::new(), {},
@@ -5014,19 +5247,19 @@ make_block_states! {
big_dripleaf => BlockBehavior::new().strength(0.1, 0.1), {
facing: FacingCardinal::North,
tilt: Tilt::None,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
big_dripleaf_stem => BlockBehavior::new().strength(0.1, 0.1), {
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
small_dripleaf => BlockBehavior::new(), {
facing: FacingCardinal::North,
half: Half::Lower,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
hanging_roots => BlockBehavior::new(), {
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
rooted_dirt => BlockBehavior::new().strength(0.5, 0.5), {},
mud => BlockBehavior::new().strength(0.5, 0.5), {},
@@ -5038,18 +5271,18 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cobbled_deepslate_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
cobbled_deepslate_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
polished_deepslate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {},
@@ -5057,18 +5290,18 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_deepslate_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
polished_deepslate_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
deepslate_tiles => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {},
@@ -5076,18 +5309,18 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
deepslate_tile_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
deepslate_tile_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
deepslate_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {},
@@ -5095,25 +5328,25 @@ make_block_states! {
facing: FacingCardinal::North,
half: TopBottom::Bottom,
shape: StairShape::Straight,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
deepslate_brick_slab => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {
kind: Type::Bottom,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
},
deepslate_brick_wall => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {
east: EastWall::None,
north: NorthWall::None,
south: SouthWall::None,
- up: true,
- waterlogged: false,
+ up: Up(true),
+ waterlogged: Waterlogged(false),
west: WestWall::None,
},
chiseled_deepslate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {},
cracked_deepslate_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {},
cracked_deepslate_tiles => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.5, 6.0), {},
infested_deepslate => BlockBehavior::new().strength(1.5, 0.75), {
- axis: CacheSize::Y,
+ axis: Falling::Y,
},
smooth_basalt => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.25, 4.2), {},
raw_iron_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 6.0), {},
@@ -5133,9 +5366,18 @@ make_block_states! {
frogspawn => BlockBehavior::new(), {},
reinforced_deepslate => BlockBehavior::new().strength(55.0, 1200.0), {},
decorated_pot => BlockBehavior::new(), {
- cracked: false,
+ cracked: Cracked(false),
facing: FacingCardinal::North,
- waterlogged: false,
+ waterlogged: Waterlogged(false),
+ },
+ crafter => BlockBehavior::new().strength(1.5, 3.5), {
+ crafting: Crafting(false),
+ orientation: Orientation::NorthUp,
+ triggered: Triggered(false),
+ },
+ trial_spawner => BlockBehavior::new().requires_correct_tool_for_drops().strength(50.0, 50.0), {
+ trial_spawner_state: State::Inactive,
},
}
}
+
diff --git a/azalea-block/src/lib.rs b/azalea-block/src/lib.rs
index b67a6e763..983de5791 100755
--- a/azalea-block/src/lib.rs
+++ b/azalea-block/src/lib.rs
@@ -33,6 +33,12 @@ impl dyn Block {
}
}
+pub trait Property {
+ type Value;
+
+ fn try_from_block_state(state: BlockState) -> Option;
+}
+
/// A representation of a state a block can be in.
///
/// For example, a stone block only has one state but each possible stair
@@ -113,7 +119,10 @@ impl Default for FluidState {
impl From for FluidState {
fn from(state: BlockState) -> Self {
- if state.waterlogged() {
+ if state
+ .property::()
+ .unwrap_or_default()
+ {
Self {
fluid: azalea_registry::Fluid::Water,
height: 15,
@@ -158,6 +167,12 @@ impl From for BlockState {
}
}
+impl From for azalea_registry::Block {
+ fn from(value: BlockState) -> Self {
+ Box::::from(value).as_registry_block()
+ }
+}
+
#[cfg(test)]
mod tests {
use super::*;
diff --git a/azalea-block/src/range.rs b/azalea-block/src/range.rs
index 6ccf4152e..9b520d496 100644
--- a/azalea-block/src/range.rs
+++ b/azalea-block/src/range.rs
@@ -1,4 +1,7 @@
-use std::{collections::HashSet, ops::RangeInclusive};
+use std::{
+ collections::HashSet,
+ ops::{Add, RangeInclusive},
+};
use crate::BlockState;
@@ -31,3 +34,13 @@ impl BlockStates {
self.set.contains(state)
}
}
+
+impl Add for BlockStates {
+ type Output = Self;
+
+ fn add(self, rhs: Self) -> Self::Output {
+ Self {
+ set: self.set.union(&rhs.set).copied().collect(),
+ }
+ }
+}
diff --git a/azalea-brigadier/Cargo.toml b/azalea-brigadier/Cargo.toml
index c28f68a2a..d9bfa3637 100644
--- a/azalea-brigadier/Cargo.toml
+++ b/azalea-brigadier/Cargo.toml
@@ -4,13 +4,13 @@ edition = "2021"
license = "MIT"
name = "azalea-brigadier"
repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-brigadier"
-version = "0.8.0"
+version = "0.9.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-azalea-buf = { path = "../azalea-buf", version = "0.8.0", optional = true }
-azalea-chat = { path = "../azalea-chat", version = "0.8.0", optional = true }
+azalea-buf = { path = "../azalea-buf", version = "0.9.0", optional = true }
+azalea-chat = { path = "../azalea-chat", version = "0.9.0", optional = true }
parking_lot = "0.12.1"
[features]
diff --git a/azalea-brigadier/src/tree/mod.rs b/azalea-brigadier/src/tree/mod.rs
index a2b1f38a2..a982e82b3 100755
--- a/azalea-brigadier/src/tree/mod.rs
+++ b/azalea-brigadier/src/tree/mod.rs
@@ -294,7 +294,7 @@ impl PartialEq for CommandNode {
if let Some(selfexecutes) = &self.command {
// idk how to do this better since we can't compare `dyn Fn`s
if let Some(otherexecutes) = &other.command {
- #[allow(clippy::vtable_address_comparisons)]
+ #[allow(ambiguous_wide_pointer_comparisons)]
if !Arc::ptr_eq(selfexecutes, otherexecutes) {
return false;
}
diff --git a/azalea-buf/Cargo.toml b/azalea-buf/Cargo.toml
index dc25632b0..f15525b7a 100644
--- a/azalea-buf/Cargo.toml
+++ b/azalea-buf/Cargo.toml
@@ -4,18 +4,18 @@ edition = "2021"
license = "MIT"
name = "azalea-buf"
repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-buf"
-version = "0.8.0"
+version = "0.9.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-azalea-buf-macros = { path = "./azalea-buf-macros", version = "0.8.0" }
+simdnbt = { version = "0.3", git = "https://github.com/azalea-rs/simdnbt" }
+azalea-buf-macros = { path = "./azalea-buf-macros", version = "0.9.0" }
byteorder = "^1.5.0"
tracing = "0.1.40"
serde_json = { version = "^1.0", optional = true }
thiserror = "1.0.50"
-uuid = "^1.5.0"
-simdnbt = { version = "0.2.1" }
+uuid = "^1.6.1"
[features]
serde_json = ["dep:serde_json"]
diff --git a/azalea-buf/azalea-buf-macros/Cargo.toml b/azalea-buf/azalea-buf-macros/Cargo.toml
index 1cb410647..facc04b1e 100644
--- a/azalea-buf/azalea-buf-macros/Cargo.toml
+++ b/azalea-buf/azalea-buf-macros/Cargo.toml
@@ -4,13 +4,13 @@ edition = "2021"
license = "MIT"
name = "azalea-buf-macros"
repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-buf"
-version = "0.8.0"
+version = "0.9.0"
[lib]
proc-macro = true
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-proc-macro2 = "^1.0.69"
+proc-macro2 = "^1.0.70"
quote = "^1.0.33"
syn = { version = "^2.0.39", features = ["extra-traits"] }
diff --git a/azalea-buf/src/write.rs b/azalea-buf/src/write.rs
index 03d40d793..c8d1f9907 100755
--- a/azalea-buf/src/write.rs
+++ b/azalea-buf/src/write.rs
@@ -262,7 +262,7 @@ impl McBufWritable for simdnbt::owned::NbtTag {
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
let mut data = Vec::new();
self.write(&mut data);
- data.write_into(buf)
+ buf.write_all(&data)
}
}
@@ -270,7 +270,7 @@ impl McBufWritable for simdnbt::owned::NbtCompound {
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
let mut data = Vec::new();
simdnbt::owned::NbtTag::Compound(self.clone()).write(&mut data);
- data.write_into(buf)
+ buf.write_all(&data)
}
}
@@ -278,6 +278,6 @@ impl McBufWritable for simdnbt::owned::Nbt {
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
let mut data = Vec::new();
self.write_unnamed(&mut data);
- data.write_into(buf)
+ buf.write_all(&data)
}
}
diff --git a/azalea-chat/Cargo.toml b/azalea-chat/Cargo.toml
index 96b3da9f1..247285c51 100644
--- a/azalea-chat/Cargo.toml
+++ b/azalea-chat/Cargo.toml
@@ -4,19 +4,24 @@ edition = "2021"
license = "MIT"
name = "azalea-chat"
repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-chat"
-version = "0.8.0"
+version = "0.9.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
-default = ["azalea-buf"]
+default = []
+azalea-buf = ["dep:azalea-buf", "simdnbt"]
+numbers = ["dep:azalea-registry", "dep:simdnbt"]
+simdnbt = ["dep:simdnbt"]
[dependencies]
azalea-buf = { path = "../azalea-buf", features = [
"serde_json",
-], version = "^0.8.0", optional = true }
-azalea-language = { path = "../azalea-language", version = "0.8.0" }
+], version = "0.9.0", optional = true }
+azalea-language = { path = "../azalea-language", version = "0.9.0" }
+simdnbt = { version = "0.3", optional = true, git = "https://github.com/azalea-rs/simdnbt" }
tracing = "0.1.40"
once_cell = "1.18.0"
serde = { version = "^1.0", features = ["derive"] }
serde_json = "^1.0.108"
+azalea-registry = { path = "../azalea-registry", version = "0.9.0", optional = true }
diff --git a/azalea-chat/src/base_component.rs b/azalea-chat/src/base_component.rs
index dcc28ecc7..8f70ecb7f 100755
--- a/azalea-chat/src/base_component.rs
+++ b/azalea-chat/src/base_component.rs
@@ -19,6 +19,26 @@ impl BaseComponent {
}
}
+#[cfg(feature = "simdnbt")]
+impl simdnbt::Serialize for BaseComponent {
+ fn to_compound(self) -> simdnbt::owned::NbtCompound {
+ let mut compound = simdnbt::owned::NbtCompound::new();
+ if !self.siblings.is_empty() {
+ compound.insert(
+ "extra",
+ simdnbt::owned::NbtList::from(
+ self.siblings
+ .into_iter()
+ .map(|component| component.to_compound())
+ .collect::>(),
+ ),
+ );
+ }
+ compound.extend(self.style.to_compound());
+ compound
+ }
+}
+
impl Default for BaseComponent {
fn default() -> Self {
Self::new()
diff --git a/azalea-chat/src/component.rs b/azalea-chat/src/component.rs
index e80e7e4bc..807d0b1aa 100755
--- a/azalea-chat/src/component.rs
+++ b/azalea-chat/src/component.rs
@@ -8,11 +8,9 @@ use crate::{
use azalea_buf::{BufReadError, McBufReadable, McBufWritable};
use once_cell::sync::Lazy;
use serde::{de, Deserialize, Deserializer, Serialize};
-use std::{
- fmt::Display,
- io::{Cursor, Write},
-};
-use tracing::debug;
+#[cfg(feature = "simdnbt")]
+use simdnbt::{Deserialize as _, FromNbtTag as _, Serialize as _};
+use std::fmt::Display;
/// A chat component, basically anything you can see in chat.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Hash)]
@@ -52,20 +50,27 @@ impl FormattedText {
fn parse_separator(
json: &serde_json::Value,
) -> Result