use crate::client_api::client_advancement_done;
use crate::client_api::client_tag_items;
use crate::globals::API_TABLE;
use crate::globals::JAVA_VM;
use crate::jni_util::guard;
use crate::logging::host_log;
use crate::mod_loading::load_mods;
use jni::JNIEnv;
use jni::objects::JClass;
use jni::objects::JString;
use std::path::Path;
use yog_abi::YogApi;
#[unsafe(no_mangle)]
pub extern "system" fn Java_dev_yog_NativeBridge_nativeInit<'l>(
mut env: JNIEnv<'l>,
_class: JClass<'l>,
mods_dir: JString<'l>,
) {
if let Ok(vm) = env.get_java_vm() {
let _ = JAVA_VM.set(vm);
}
yog_logging::set_sink(host_log);
let dir = env
.get_string(&mods_dir)
.map(String::from)
.unwrap_or_default();
let api: &'static YogApi = &API_TABLE;
crate::bus::register_duties();
crate::bus::install_caller();
yog_book::set_unlocked(client_advancement_done);
yog_book::set_tag_items(client_tag_items);
guard("mod loading", || {
load_mods(Path::new(&dir), api);
});
#[cfg(feature = "dev")]
crate::control_socket::start_if_requested();
yog_logging::info!("runtime initialised — the gate is open.");
}