#include "de_mrbesen_cppplugins_CppPlugin.h" #include "de_mrbesen_cppplugins_CppPlugin_CppListener.h" #include #include //dynamic linking #include "cppplugin.h" //plugin definitions //jfieldID DATAFIELDID = 0; jclass CPPPLUGINCLASS = 0; CppPlugin* plugin = 0; /* void setData(CppPlugin* d, JNIEnv* env, jobject thisobj) { std::cout << "set data: " << DATAFIELDID << std::endl; env->SetLongField(thisobj, DATAFIELDID, reinterpret_cast(d)); } CppPlugin* getData(JNIEnv* env, jobject thisobj) { std::cout << "get data: " << DATAFIELDID << std::endl; return reinterpret_cast(env->GetLongField(thisobj, DATAFIELDID)); }*/ JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_init_1(JNIEnv* env, jobject thisobj) { std::cout << "init!! aus cpp!!!" << std::endl; CPPPLUGINCLASS = env->FindClass("de/mrbesen/cppplugins/CppPlugin"); std::cout << "findclass: " << (!CPPPLUGINCLASS) << std::endl; //DATAFIELDID = env->GetFieldID(CPPPLUGINCLASS, "data", "J"); //std::cout << "findfield " << (!DATAFIELDID) << std::endl; return true; } /** * Class: de_mrbesen_cppplugins_CppPlugin * Method: loadPlugin * Signature: (Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_loadPlugin(JNIEnv* env, jobject thisobj, jstring path) { const char* cpath = env->GetStringUTFChars(path, 0); //open plugin std::cout << "open plugin " << cpath << std::endl; void* handle = dlopen(cpath, RTLD_LAZY); if (!handle) return false; //throw std::string("Error: plugin could not be opend. ") + dlerror(); //load function pointer initfptr initf = (initfptr) dlsym(handle, "init"); if(!initf) { std::cout << "Could not find function init" << std::endl; dlclose(handle); return false; } plugin = initf(); //store data //setData(data, env, thisobj); return true; } /* * Class: de_mrbesen_cppplugins_CppPlugin * Method: onLoad * Signature: ()V */ JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onLoad(JNIEnv* env, jobject thisobj) { //TODO std::cout << "lib::onLoad()" << std::endl; plugin->onLoad(); } /* * Class: de_mrbesen_cppplugins_CppPlugin * Method: onEnable_ * Signature: ()V */ JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onEnable_1(JNIEnv* env, jobject thisobj) { //TODO std::cout << "lib::onEnable()" << std::endl; plugin->onEnable(); } /* * Class: de_mrbesen_cppplugins_CppPlugin * Method: onDisable_ * Signature: ()V */ JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onDisable_1(JNIEnv* env, jobject thisobj) { //TODO std::cout << "lib::onDisable()" << std::endl; plugin->onDisable(); } /* * Class: de_mrbesen_cppplugins_CppPlugin * Method: fireEvent * Signature: (Lde/mrbesen/cppplugins/CppEvent;I)Lde/mrbesen/cppplugins/CppEvent; */ JNIEXPORT jobject JNICALL Java_de_mrbesen_cppplugins_CppPlugin_fireEvent(JNIEnv* env, jobject thisobj, jobject event, jint functionid) { //TODO return event; } /* * Class: de_mrbesen_cppplugins_CppPlugin * Method: onCmd * Signature: (Lorg/bukkit/command/CommandSender;Lorg/bukkit/command/Command;Ljava/lang/String;[Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onCmd(JNIEnv* env, jobject thisobj, jobject sender, jobject cmd, jstring label, jobjectArray args) { //TODO return false; } /* * Class: de_mrbesen_cppplugins_CppPlugin * Method: getListener * Signature: ()[Lde/mrbesen/cppplugins/CppPlugin/CppListener; */ JNIEXPORT jobjectArray JNICALL Java_de_mrbesen_cppplugins_CppPlugin_getListener(JNIEnv* env, jobject thisobj) { jclass clas = env->FindClass("de/mrbesen/cppplugins/CppPlugin/CppListener"); jobjectArray arr = env->NewObjectArray(0, clas, 0); return arr; }