Add CallbackValue
This commit is contained in:
parent
4cca142617
commit
e45fa6ab9a
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -25,10 +25,15 @@ public class NativeCallbacks extends NativeCallbackToRustChannelSupport {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void doRegisterCallback(
|
public void registerEventCallback(
|
||||||
@NotNull Listener listener,
|
@NotNull Listener listener,
|
||||||
@NotNull Plugin plugin
|
@NotNull Plugin plugin
|
||||||
) {
|
) {
|
||||||
doCallback(new Object[] { listener, plugin });
|
doCallback(
|
||||||
|
new CallbackValue(
|
||||||
|
"REGISTER_EVENT_CALLBACK",
|
||||||
|
new Object[] { listener, plugin }
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -98,7 +98,7 @@ public class PatchBukkitPluginManager implements PluginManager {
|
|||||||
@NotNull Listener listener,
|
@NotNull Listener listener,
|
||||||
@NotNull Plugin plugin
|
@NotNull Plugin plugin
|
||||||
) {
|
) {
|
||||||
NativeCallbacks.getInstance().doRegisterCallback(listener, plugin);
|
NativeCallbacks.getInstance().registerEventCallback(listener, plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -81,16 +81,25 @@ async fn on_load_inner(plugin: &mut PatchBukkitPlugin, server: Arc<Context>) ->
|
|||||||
let r = jvm.init_callback_channel(&i).unwrap();
|
let r = jvm.init_callback_channel(&i).unwrap();
|
||||||
|
|
||||||
std::thread::spawn(move || {
|
std::thread::spawn(move || {
|
||||||
if let Err(e) = Jvm::attach_thread() {
|
let jvm = match Jvm::attach_thread() {
|
||||||
log::error!("Failed to attach callback thread to JVM: {}", e);
|
Ok(jvm) => jvm,
|
||||||
return;
|
Err(e) => {
|
||||||
}
|
log::error!("Failed to attach callback thread to JVM: {}", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match r.rx().recv() {
|
match r.rx().recv() {
|
||||||
Ok(ret) => {
|
Ok(ret) => {
|
||||||
plugin.plugin_manager.add_listener();
|
let result = jvm
|
||||||
log::info!("Received callback: {:?}", ret.class_name());
|
.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) => {
|
Err(e) => {
|
||||||
log::error!("Callback channel closed: {}", e);
|
log::error!("Callback channel closed: {}", e);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user