From 83fe8fd1582fbdb3662b11e279e8232ebf8dff4b Mon Sep 17 00:00:00 2001 From: Nora Schiffer Date: Fri, 6 Mar 2026 20:39:55 +0100 Subject: [PATCH 1/4] Update dependencies --- Cargo.lock | 194 +++++++++++++++++-------------------- crates/resource/Cargo.toml | 2 +- 2 files changed, 90 insertions(+), 106 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b04830c..f941d65 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -75,9 +75,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "autocfg" @@ -93,15 +93,15 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" [[package]] name = "byteorder" @@ -117,9 +117,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "cc" -version = "1.2.51" +version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ "find-msvc-tools", "jobserver", @@ -141,9 +141,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clap" -version = "4.5.54" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", @@ -151,9 +151,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.54" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", @@ -164,9 +164,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ "heck", "proc-macro2", @@ -176,9 +176,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] name = "cobs" @@ -333,19 +333,19 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", - "libz-rs-sys", "miniz_oxide", + "zlib-rs", ] [[package]] @@ -365,15 +365,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", @@ -382,21 +382,20 @@ dependencies = [ [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-core", "futures-macro", "futures-task", "pin-project-lite", - "pin-utils", "slab", ] @@ -434,9 +433,9 @@ dependencies = [ [[package]] name = "glam" -version = "0.30.10" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9" +checksum = "f70749695b063ecbf6b62949ccccde2e733ec3ecbbd71d467dca4e5c6c97cca0" [[package]] name = "hashbrown" @@ -503,11 +502,11 @@ dependencies = [ [[package]] name = "inotify" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" +checksum = "bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "inotify-sys", "libc", ] @@ -580,24 +579,15 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.180" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" - -[[package]] -name = "libz-rs-sys" -version = "0.5.5" +version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c10501e7805cee23da17c7790e59df2870c0d4043ec6d03f67d31e2b53e77415" -dependencies = [ - "zlib-rs", -] +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "lock_api" @@ -625,9 +615,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "minedmap" @@ -739,7 +729,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "fsevent-sys", "inotify", "kqueue", @@ -753,9 +743,12 @@ dependencies = [ [[package]] name = "notify-types" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" +checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" +dependencies = [ + "bitflags 2.11.0", +] [[package]] name = "nu-ansi-term" @@ -874,15 +867,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" @@ -892,11 +879,11 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "png" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "crc32fast", "fdeflate", "flate2", @@ -917,21 +904,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.105" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "pxfm" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" -dependencies = [ - "num-traits", -] +checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" [[package]] name = "quick-error" @@ -941,9 +925,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quote" -version = "1.0.43" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -980,14 +964,14 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -997,9 +981,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -1008,9 +992,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "rustc-hash" @@ -1020,11 +1004,11 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustix" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys", @@ -1122,15 +1106,15 @@ checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" @@ -1146,9 +1130,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.114" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -1167,18 +1151,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", @@ -1216,9 +1200,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.49.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "parking_lot", "pin-project-lite", @@ -1283,9 +1267,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "utf8parse" @@ -1317,9 +1301,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ "wit-bindgen", ] @@ -1424,21 +1408,21 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "zlib-rs" -version = "0.5.5" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" +checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" [[package]] name = "zmij" -version = "1.0.12" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc5a66a20078bf1251bde995aa2fdcc4b800c70b5d92dd2c62abc5c60f679f8" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zstd" diff --git a/crates/resource/Cargo.toml b/crates/resource/Cargo.toml index 64226a4..8af6a65 100644 --- a/crates/resource/Cargo.toml +++ b/crates/resource/Cargo.toml @@ -9,5 +9,5 @@ repository.workspace = true [dependencies] enumflags2 = { version = "0.7.7", features = ["serde"] } -glam = "0.30.0" +glam = "0.32.0" serde = { version = "1.0.183", features = ["derive"] } From 4fc61011ec40921dff611a8711d1ce182220c335 Mon Sep 17 00:00:00 2001 From: Nora Schiffer Date: Fri, 6 Mar 2026 20:57:56 +0100 Subject: [PATCH 2/4] core: remove thread configuration from Config struct Move configuration out of Config that we need before generation. --- src/core/common.rs | 13 ------------- src/core/mod.rs | 13 ++++++++++--- src/core/tile_renderer.rs | 2 +- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/core/common.rs b/src/core/common.rs index 8cb9219..baddb46 100644 --- a/src/core/common.rs +++ b/src/core/common.rs @@ -132,10 +132,6 @@ pub enum TileKind { /// Common configuration based on command line arguments #[derive(Debug)] pub struct Config { - /// Number of threads for parallel processing - pub num_threads: usize, - /// Number of threads for initial parallel processing - pub num_threads_initial: usize, /// Path of input region directory pub region_dir: PathBuf, /// Path of input `level.dat` file @@ -165,13 +161,6 @@ pub struct Config { impl Config { /// Crates a new [Config] from [command line arguments](super::Args) pub fn new(args: &super::Args) -> Result { - let num_threads = match args.jobs { - Some(0) => num_cpus::get(), - Some(threads) => threads, - None => 1, - }; - let num_threads_initial = args.jobs_initial.unwrap_or(num_threads); - let region_dir = [&args.input_dir, Path::new("region")].iter().collect(); let level_dat_path = [&args.input_dir, Path::new("level.dat")].iter().collect(); let level_dat_old_path = [&args.input_dir, Path::new("level.dat_old")] @@ -190,8 +179,6 @@ impl Config { Self::sign_transforms(args).context("Failed to parse sign transforms")?; Ok(Config { - num_threads, - num_threads_initial, region_dir, level_dat_path, level_dat_old_path, diff --git a/src/core/mod.rs b/src/core/mod.rs index fce2cb5..576c3ab 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -187,7 +187,14 @@ pub fn cli() -> Result<()> { .with_target(false) .init(); - let mut pool = setup_threads(config.num_threads_initial)?; + let num_threads = match args.jobs { + Some(0) => num_cpus::get(), + Some(threads) => threads, + None => 1, + }; + let num_threads_initial = args.jobs_initial.unwrap_or(num_threads); + + let mut pool = setup_threads(num_threads_initial)?; let rt = tokio::runtime::Builder::new_current_thread() .build() @@ -202,8 +209,8 @@ pub fn cli() -> Result<()> { return Ok(()); }; - if config.num_threads != config.num_threads_initial { - pool = setup_threads(config.num_threads)?; + if num_threads != num_threads_initial { + pool = setup_threads(num_threads)?; } pool.install(move || { loop { diff --git a/src/core/tile_renderer.rs b/src/core/tile_renderer.rs index 1409aa7..81a7672 100644 --- a/src/core/tile_renderer.rs +++ b/src/core/tile_renderer.rs @@ -78,7 +78,7 @@ impl<'a> TileRenderer<'a> { regions: &'a [TileCoords], ) -> Self { let region_cache = Mutex::new(LruCache::new( - NonZeroUsize::new(6 + 6 * config.num_threads).unwrap(), + NonZeroUsize::new(6 + 6 * rayon::current_num_threads()).unwrap(), )); let region_set = regions.iter().copied().collect(); TileRenderer { From eba0ed4249d006ec142eb656a640fd5ae6540792 Mon Sep 17 00:00:00 2001 From: Nora Schiffer Date: Fri, 6 Mar 2026 21:09:42 +0100 Subject: [PATCH 3/4] core: build Config per generation run --- src/core/mod.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/core/mod.rs b/src/core/mod.rs index 576c3ab..6ee3dce 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -115,12 +115,14 @@ fn setup_threads(num_threads: usize) -> Result { } /// Runs all MinedMap generation steps, updating all tiles as needed -fn generate(config: &Config, rt: &Runtime) -> Result<()> { - let regions = RegionProcessor::new(config).run()?; - TileRenderer::new(config, rt, ®ions).run()?; - let tiles = TileMipmapper::new(config, ®ions).run()?; - EntityCollector::new(config, ®ions).run()?; - MetadataWriter::new(config, &tiles).run() +fn generate(args: &Args, rt: &Runtime) -> Result<()> { + let config = Config::new(args)?; + + let regions = RegionProcessor::new(&config).run()?; + TileRenderer::new(&config, rt, ®ions).run()?; + let tiles = TileMipmapper::new(&config, ®ions).run()?; + EntityCollector::new(&config, ®ions).run()?; + MetadataWriter::new(&config, &tiles).run() } /// Creates a file watcher for the @@ -176,7 +178,6 @@ fn wait_watcher(args: &Args, watch_channel: &Receiver<()>) -> Result<()> { /// MinedMap CLI main function pub fn cli() -> Result<()> { let args = Args::parse(); - let config = Config::new(&args)?; tracing_subscriber::fmt() .with_max_level(if args.verbose { @@ -202,7 +203,7 @@ pub fn cli() -> Result<()> { let watch = args.watch.then(|| create_watcher(&args)).transpose()?; - pool.install(|| generate(&config, &rt))?; + pool.install(|| generate(&args, &rt))?; let Some((_watcher, watch_channel)) = watch else { // watch mode disabled @@ -215,7 +216,7 @@ pub fn cli() -> Result<()> { pool.install(move || { loop { wait_watcher(&args, &watch_channel)?; - generate(&config, &rt)?; + generate(&args, &rt)?; } }) } From a645e09ea42ac50e9185a7e9a8bcc073e75e7fdb Mon Sep 17 00:00:00 2001 From: Nora Schiffer Date: Fri, 6 Mar 2026 21:19:11 +0100 Subject: [PATCH 4/4] core: add support for Minecraft 26.1 region directory Try the 26.1 directory first and fall back to the old one if it does not exist and contain valid region files. --- src/core/common.rs | 13 ++++++- src/core/region_processor.rs | 70 ++++++++++++++++++++---------------- 2 files changed, 52 insertions(+), 31 deletions(-) diff --git a/src/core/common.rs b/src/core/common.rs index baddb46..013db40 100644 --- a/src/core/common.rs +++ b/src/core/common.rs @@ -12,6 +12,7 @@ use regex::{Regex, RegexSet}; use serde::{Deserialize, Serialize}; use crate::{ + core::region_processor, io::fs::FileMetaVersion, resource::Biome, types::*, @@ -161,7 +162,17 @@ pub struct Config { impl Config { /// Crates a new [Config] from [command line arguments](super::Args) pub fn new(args: &super::Args) -> Result { - let region_dir = [&args.input_dir, Path::new("region")].iter().collect(); + let mut region_dir: PathBuf = [ + &args.input_dir, + Path::new("dimensions/minecraft/overworld/region"), + ] + .iter() + .collect(); + + if !region_processor::has_regions(®ion_dir) { + region_dir = [&args.input_dir, Path::new("region")].iter().collect(); + } + let level_dat_path = [&args.input_dir, Path::new("level.dat")].iter().collect(); let level_dat_old_path = [&args.input_dir, Path::new("level.dat_old")] .iter() diff --git a/src/core/region_processor.rs b/src/core/region_processor.rs index a86033c..6d9d47c 100644 --- a/src/core/region_processor.rs +++ b/src/core/region_processor.rs @@ -1,6 +1,11 @@ //! The [RegionProcessor] and related functions -use std::{ffi::OsStr, path::PathBuf, sync::mpsc, time::SystemTime}; +use std::{ + ffi::OsStr, + path::{Path, PathBuf}, + sync::mpsc, + time::SystemTime, +}; use anyhow::{Context, Result}; use enum_map::{Enum, EnumMap}; @@ -30,6 +35,39 @@ fn parse_region_filename(file_name: &OsStr) -> Option { }) } +/// Builds an iterator over the regions of input Minecraft save data +fn region_iterator(region_dir: &Path) -> Result> { + Ok(region_dir + .read_dir() + .with_context(|| format!("Failed to read directory {}", region_dir.display()))? + .filter_map(|entry| entry.ok()) + .filter(|entry| { + (|| { + // We are only interested in regular files + let file_type = entry.file_type().ok()?; + if !file_type.is_file() { + return None; + } + + let metadata = entry.metadata().ok()?; + if metadata.len() == 0 { + return None; + } + Some(()) + })() + .is_some() + }) + .filter_map(|entry| parse_region_filename(&entry.file_name()))) +} + +/// Determines whether the given directory contains any Minecraft region files +pub fn has_regions(region_dir: &Path) -> bool { + let Ok(mut iter) = region_iterator(region_dir) else { + return false; + }; + iter.next().is_some() +} + /// [RegionProcessor::process_region] return values #[derive(Debug, Clone, Copy, PartialEq, Eq, Enum)] enum RegionProcessorStatus { @@ -351,35 +389,7 @@ impl<'a> RegionProcessor<'a> { /// Generates a list of all regions of the input Minecraft save data fn collect_regions(&self) -> Result> { - Ok(self - .config - .region_dir - .read_dir() - .with_context(|| { - format!( - "Failed to read directory {}", - self.config.region_dir.display() - ) - })? - .filter_map(|entry| entry.ok()) - .filter(|entry| { - (|| { - // We are only interested in regular files - let file_type = entry.file_type().ok()?; - if !file_type.is_file() { - return None; - } - - let metadata = entry.metadata().ok()?; - if metadata.len() == 0 { - return None; - } - Some(()) - })() - .is_some() - }) - .filter_map(|entry| parse_region_filename(&entry.file_name())) - .collect()) + Ok(region_iterator(&self.config.region_dir)?.collect()) } /// Processes a single region file