diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index bc548e2..3ae1a7d 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -74,7 +74,7 @@ jobs: - run: rustup component add clippy - uses: Swatinem/rust-cache@v2 - name: Download JAR - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: patchbukkit-jar path: java/patchbukkit/build/libs/ @@ -170,7 +170,7 @@ jobs: Windows) cp rust/target/release/*.dll "dist/patchbukkit-${{ runner.arch }}-${{ runner.os }}.dll" ;; esac - name: Export artifacts - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: patchbukkit-${{ runner.arch }}-${{ runner.os }} compression-level: 9 diff --git a/rust/Cargo.lock b/rust/Cargo.lock index ca35ef9..e00bf3a 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1794,9 +1794,9 @@ checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "granit-parser" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c92814c286f45b5ed1498ce9547bc9637b473eba7037f8aee6a4d5a3c1e051c" +checksum = "4ccd1be9ebf2bd5520dbfcfb72b70ef492f654061299a097056f3e73410e38ec" dependencies = [ "arraydeque", "smallvec", @@ -4266,9 +4266,9 @@ dependencies = [ [[package]] name = "serde-saphyr" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2c6921c8ce48fb1b052b457619d008834039d80325992ed3bc55bbe6c155ad" +checksum = "a1ec1f5cac0eb96063c64b28705255a7ed6e7d77f95c1d25e9f8b8c928006ce1" dependencies = [ "annotate-snippets", "base64 0.23.1", @@ -5136,9 +5136,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.24.0" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" +checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9" dependencies = [ "getrandom 0.4.3", "js-sys", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 06575ee..c31f9ea 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -27,11 +27,11 @@ walkdir = "2" zip = "8.6" anyhow = "1.0" -uuid = "1.24.0" +uuid = "1.24.1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -serde-saphyr = "1.0.1" +serde-saphyr = "1.1.0" rand = { git = "https://github.com/rust-random/rand"} prost = "0.14" diff --git a/rust/src/directories.rs b/rust/src/directories.rs index 9a929e5..4045ec9 100644 --- a/rust/src/directories.rs +++ b/rust/src/directories.rs @@ -32,8 +32,19 @@ pub fn setup_directories(server: &Context) -> Result impl Iterator .canonicalize() .map_err(|e| tracing::error!("Canonicalize error: {e:?}")) .ok()?; - if path.components().any(|c| c.as_os_str() == "patchbukkit-libs") { + if path + .components() + .any(|c| c.as_os_str() == "patchbukkit-libs") + { None } else { Some(path) @@ -71,53 +74,53 @@ pub fn read_libraries_from_jar>(jar_path: P) -> Vec { // 1. paper-libraries.json if let Ok(mut file) = archive.by_name("paper-libraries.json") { let mut content = String::new(); - if file.read_to_string(&mut content).is_ok() { - if let Ok(val) = serde_json::from_str::(&content) { - if let Some(repos) = val.get("repositories") { - if let Some(map) = repos.as_object() { - for (_, v) in map { - if let Some(url) = v.as_str() { - let repo_entry = format!("repo:{url}"); - if !libraries.contains(&repo_entry) { - libraries.push(repo_entry); - } + if file.read_to_string(&mut content).is_ok() + && let Ok(val) = serde_json::from_str::(&content) + { + if let Some(repos) = val.get("repositories") { + if let Some(map) = repos.as_object() { + for (_, v) in map { + if let Some(url) = v.as_str() { + let repo_entry = format!("repo:{url}"); + if !libraries.contains(&repo_entry) { + libraries.push(repo_entry); } } - } else if let Some(arr) = repos.as_array() { - for item in arr { - if let Some(url) = item.as_str() { - let repo_entry = format!("repo:{url}"); - if !libraries.contains(&repo_entry) { - libraries.push(repo_entry); - } - } else if let Some(obj) = item.as_object() { - if let Some(url) = obj.get("url").and_then(|u| u.as_str()) { - let repo_entry = format!("repo:{url}"); - if !libraries.contains(&repo_entry) { - libraries.push(repo_entry); - } - } + } + } else if let Some(arr) = repos.as_array() { + for item in arr { + if let Some(url) = item.as_str() { + let repo_entry = format!("repo:{url}"); + if !libraries.contains(&repo_entry) { + libraries.push(repo_entry); + } + } else if let Some(obj) = item.as_object() + && let Some(url) = obj.get("url").and_then(|u| u.as_str()) + { + let repo_entry = format!("repo:{url}"); + if !libraries.contains(&repo_entry) { + libraries.push(repo_entry); } } } } + } - if let Some(deps) = val.get("dependencies") { - if let Some(arr) = deps.as_array() { - for item in arr { - if let Some(s) = item.as_str() { - if !libraries.contains(&s.to_string()) { - libraries.push(s.to_string()); - } - } + if let Some(deps) = val.get("dependencies") { + if let Some(arr) = deps.as_array() { + for item in arr { + if let Some(s) = item.as_str() + && !libraries.contains(&s.to_string()) + { + libraries.push(s.to_string()); } - } else if let Some(map) = deps.as_object() { - for (k, v) in map { - if let Some(ver) = v.as_str() { - let coord = format!("{k}:{ver}"); - if !libraries.contains(&coord) { - libraries.push(coord); - } + } + } else if let Some(map) = deps.as_object() { + for (k, v) in map { + if let Some(ver) = v.as_str() { + let coord = format!("{k}:{ver}"); + if !libraries.contains(&coord) { + libraries.push(coord); } } } @@ -132,10 +135,11 @@ pub fn read_libraries_from_jar>(jar_path: P) -> Vec { if file.read_to_string(&mut content).is_ok() { for line in content.lines() { let trimmed = line.trim(); - if !trimmed.is_empty() && !trimmed.starts_with('#') { - if !libraries.contains(&trimmed.to_string()) { - libraries.push(trimmed.to_string()); - } + if !trimmed.is_empty() + && !trimmed.starts_with('#') + && !libraries.contains(&trimmed.to_string()) + { + libraries.push(trimmed.to_string()); } } } @@ -159,7 +163,8 @@ mod tests { let file = File::create(&jar_path).unwrap(); let mut zip = zip::ZipWriter::new(file); - zip.start_file("paper-libraries.json", SimpleFileOptions::default()).unwrap(); + zip.start_file("paper-libraries.json", SimpleFileOptions::default()) + .unwrap(); let json = r#"{ "repositories": { "miraculixx": "https://repo.miraculixx.de" diff --git a/rust/src/java/native_callbacks/command.rs b/rust/src/java/native_callbacks/command.rs index 139fd1b..775a334 100644 --- a/rust/src/java/native_callbacks/command.rs +++ b/rust/src/java/native_callbacks/command.rs @@ -1,9 +1,6 @@ use pumpkin_util::permission::{Permission, PermissionDefault}; -use crate::{ - commands::init_java_command, - proto::patchbukkit::command::RegisterCommandRequest, -}; +use crate::{commands::init_java_command, proto::patchbukkit::command::RegisterCommandRequest}; pub fn ffi_native_bridge_register_command_impl(request: RegisterCommandRequest) -> Option<()> { let context = super::CALLBACK_CONTEXT.get()?; @@ -37,12 +34,7 @@ pub fn ffi_native_bridge_register_command_impl(request: RegisterCommandRequest) } } - let node = init_java_command( - cmd_name.clone(), - command_tx, - names, - description, - ); + let node = init_java_command(cmd_name.clone(), command_tx, names, description); let clean_perm = cmd_name.trim_start_matches('/'); let permission = format!("patchbukkit:command.{clean_perm}"); diff --git a/rust/src/java/native_callbacks/entity.rs b/rust/src/java/native_callbacks/entity.rs index 673ef18..4c04a1b 100644 --- a/rust/src/java/native_callbacks/entity.rs +++ b/rust/src/java/native_callbacks/entity.rs @@ -157,9 +157,8 @@ pub fn ffi_native_bridge_is_op_impl( if !is_op { let op_config = tokio::task::block_in_place(|| { - ctx.runtime.block_on(async { - ctx.plugin_context.server.data.operator_config.read().await - }) + ctx.runtime + .block_on(async { ctx.plugin_context.server.data.operator_config.read().await }) }); if op_config.get_entry(&player_uuid).is_some() { is_op = true; @@ -170,13 +169,11 @@ pub fn ffi_native_bridge_is_op_impl( }) .unwrap_or_else(|| { let op_config = tokio::task::block_in_place(|| { - ctx.runtime.block_on(async { - ctx.plugin_context.server.data.operator_config.read().await - }) + ctx.runtime + .block_on(async { ctx.plugin_context.server.data.operator_config.read().await }) }); op_config.get_entry(&player_uuid).is_some() }); Some(crate::proto::patchbukkit::entity::IsOpResponse { is_op }) } - diff --git a/rust/src/java/native_callbacks/world.rs b/rust/src/java/native_callbacks/world.rs index b7ea0f9..b83c061 100644 --- a/rust/src/java/native_callbacks/world.rs +++ b/rust/src/java/native_callbacks/world.rs @@ -60,11 +60,7 @@ pub fn ffi_native_bridge_set_block_data_impl(request: SetBlockDataRequest) -> Op ctx.runtime.spawn(async move { world - .set_block_state( - &pos, - state_id, - pumpkin::world::BlockFlags::NOTIFY_ALL, - ) + .set_block_state(&pos, state_id, pumpkin::world::BlockFlags::NOTIFY_ALL) .await; }); diff --git a/rust/src/java/plugin/command_manager.rs b/rust/src/java/plugin/command_manager.rs index 79db34d..67c3bf3 100644 --- a/rust/src/java/plugin/command_manager.rs +++ b/rust/src/java/plugin/command_manager.rs @@ -163,7 +163,10 @@ impl CommandManager { ], ) { Ok(inst) => { - if jvm.invoke(&inst, "getName", InvocationArg::empty()).is_err() { + if jvm + .invoke(&inst, "getName", InvocationArg::empty()) + .is_err() + { tracing::error!( "Failed to create PluginCommand for {}: Java returned null", cmd_name diff --git a/rust/src/java/plugin/manager.rs b/rust/src/java/plugin/manager.rs index 727b938..567adb2 100644 --- a/rust/src/java/plugin/manager.rs +++ b/rust/src/java/plugin/manager.rs @@ -224,10 +224,10 @@ impl PluginManager { for item in arr { if let Some(s) = item.as_str() { libraries.push(format!("repo:{s}")); - } else if let Some(obj) = item.as_object() { - if let Some(u) = obj.get("url").and_then(|v| v.as_str()) { - libraries.push(format!("repo:{u}")); - } + } else if let Some(obj) = item.as_object() + && let Some(u) = obj.get("url").and_then(|v| v.as_str()) + { + libraries.push(format!("repo:{u}")); } } } else if let Some(map) = repos.as_object() { diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 15813cd..e0442e7 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -22,10 +22,7 @@ use tokio::sync::{ use crate::{ config::patchbukkit::PatchBukkitConfig, java::{ - jvm::{ - commands::JvmCommand, - worker::JvmWorker, - }, + jvm::{commands::JvmCommand, worker::JvmWorker}, resources::setup_j4rs, }, }; @@ -42,8 +39,6 @@ async fn on_load_inner(plugin: &PatchBukkitPlugin, server: Arc) -> Resu let config = PatchBukkitConfig::get_or_create(config_path) .map_err(|e| format!("Failed to setup PatchBukkit config: {e}"))?; - - // Manage embedded resources setup_j4rs(&dirs.j4rs).map_err(|e| format!("Failed to setup J4RS: {e}"))?;