diff --git a/java/patchbukkit/src/main/java/org/patchbukkit/CallbackValue.java b/java/patchbukkit/src/main/java/org/patchbukkit/CallbackValue.java new file mode 100644 index 0000000..54352de --- /dev/null +++ b/java/patchbukkit/src/main/java/org/patchbukkit/CallbackValue.java @@ -0,0 +1,24 @@ +package org.patchbukkit; + +public class CallbackValue { + + public String callbackName; + public Object[] args; + + public CallbackValue(String callbackName, Object[] args) { + this.callbackName = callbackName; + this.args = args; + } + + public Object getArg(int arg) { + return args[arg]; + } + + public Object argLength() { + return args.length; + } + + public String getCallbackName() { + return callbackName; + } +} diff --git a/java/patchbukkit/src/main/java/org/patchbukkit/NativeCallbacks.java b/java/patchbukkit/src/main/java/org/patchbukkit/NativeCallbacks.java index 054d71f..003f117 100644 --- a/java/patchbukkit/src/main/java/org/patchbukkit/NativeCallbacks.java +++ b/java/patchbukkit/src/main/java/org/patchbukkit/NativeCallbacks.java @@ -25,10 +25,15 @@ public class NativeCallbacks extends NativeCallbackToRustChannelSupport { return instance; } - public void doRegisterCallback( + public void registerEventCallback( @NotNull Listener listener, @NotNull Plugin plugin ) { - doCallback(new Object[] { listener, plugin }); + doCallback( + new CallbackValue( + "REGISTER_EVENT_CALLBACK", + new Object[] { listener, plugin } + ) + ); } } diff --git a/java/patchbukkit/src/main/java/org/patchbukkit/PatchBukkitPluginManager.java b/java/patchbukkit/src/main/java/org/patchbukkit/PatchBukkitPluginManager.java index a5fc251..aedf611 100644 --- a/java/patchbukkit/src/main/java/org/patchbukkit/PatchBukkitPluginManager.java +++ b/java/patchbukkit/src/main/java/org/patchbukkit/PatchBukkitPluginManager.java @@ -98,7 +98,7 @@ public class PatchBukkitPluginManager implements PluginManager { @NotNull Listener listener, @NotNull Plugin plugin ) { - NativeCallbacks.getInstance().doRegisterCallback(listener, plugin); + NativeCallbacks.getInstance().registerEventCallback(listener, plugin); } @Override diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 68669b3..4f9c31f 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -81,16 +81,25 @@ async fn on_load_inner(plugin: &mut PatchBukkitPlugin, server: Arc) -> let r = jvm.init_callback_channel(&i).unwrap(); std::thread::spawn(move || { - if let Err(e) = Jvm::attach_thread() { - log::error!("Failed to attach callback thread to JVM: {}", e); - return; - } + let jvm = match Jvm::attach_thread() { + Ok(jvm) => jvm, + Err(e) => { + log::error!("Failed to attach callback thread to JVM: {}", e); + return; + } + }; loop { match r.rx().recv() { Ok(ret) => { - plugin.plugin_manager.add_listener(); - log::info!("Received callback: {:?}", ret.class_name()); + let result = jvm + .invoke(&ret, "getCallbackName", InvocationArg::empty()) + .unwrap(); + + let callback_name: String = jvm.to_rust(result).unwrap(); + match callback_name { + _ => log::warn!("Received unknown callback: {:?}", callback_name), + } } Err(e) => { log::error!("Callback channel closed: {}", e);