summaryrefslogtreecommitdiffstats
path: root/jni/ToJava.h
diff options
context:
space:
mode:
authorfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-08-18 23:00:51 +0200
committerfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-08-18 23:00:51 +0200
commitb6138129e668681d2c16146dea3d66b0ea2f0381 (patch)
tree0888a6d4f115fd02ba1ea65c944a4daca1eda85e /jni/ToJava.h
parentChat packet handled in the new way; fixed missing packet sending for inventory slot. (diff)
downloadcuberite-b6138129e668681d2c16146dea3d66b0ea2f0381.tar
cuberite-b6138129e668681d2c16146dea3d66b0ea2f0381.tar.gz
cuberite-b6138129e668681d2c16146dea3d66b0ea2f0381.tar.bz2
cuberite-b6138129e668681d2c16146dea3d66b0ea2f0381.tar.lz
cuberite-b6138129e668681d2c16146dea3d66b0ea2f0381.tar.xz
cuberite-b6138129e668681d2c16146dea3d66b0ea2f0381.tar.zst
cuberite-b6138129e668681d2c16146dea3d66b0ea2f0381.zip
Diffstat (limited to 'jni/ToJava.h')
-rw-r--r--jni/ToJava.h26
1 files changed, 19 insertions, 7 deletions
diff --git a/jni/ToJava.h b/jni/ToJava.h
index 59dc4c366..bc10f01e3 100644
--- a/jni/ToJava.h
+++ b/jni/ToJava.h
@@ -3,7 +3,7 @@
#include <jni.h>
#include <android/log.h>
extern JNIEnv* g_CurrentJNIEnv;
-
+extern JavaVM* g_JavaVM;
extern jobject g_JavaThread;
//extern jobject g_JavaActivity;
@@ -11,6 +11,12 @@ extern jobject g_JavaThread;
static void CallJavaFunction_Void_String( jobject a_Object, const std::string & a_FunctionName, const std::string & a_StringParam )
{
+ JNIEnv * oldEnv = g_CurrentJNIEnv;
+ int status = g_JavaVM->AttachCurrentThread(&g_CurrentJNIEnv, NULL);
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "STATUS: %i old: %p new: %p", status, oldEnv, g_CurrentJNIEnv );
+ jstring str = g_CurrentJNIEnv->NewStringUTF( a_StringParam.c_str() );
+
+
//__android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object );
jclass cls = g_CurrentJNIEnv->GetObjectClass( a_Object );
//__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls );
@@ -18,26 +24,32 @@ static void CallJavaFunction_Void_String( jobject a_Object, const std::string &
//__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid );
if (mid != 0)
{
- //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() );
- g_CurrentJNIEnv->CallVoidMethod( a_Object, mid, g_CurrentJNIEnv->NewStringUTF( a_StringParam.c_str() ) );
+
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() );
+ g_CurrentJNIEnv->CallVoidMethod( a_Object, mid, str );
}
else
{
__android_log_print(ANDROID_LOG_ERROR,"MCServer", "It was 0, derp" );
}
+
+ if( oldEnv != g_CurrentJNIEnv )
+ {
+ g_JavaVM->DetachCurrentThread();
+ }
}
static void CallJavaFunction_Void_Void( jobject a_Object, const std::string & a_FunctionName )
{
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object );
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object );
jclass cls = g_CurrentJNIEnv->GetObjectClass( a_Object );
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls );
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls );
jmethodID mid = g_CurrentJNIEnv->GetMethodID( cls, a_FunctionName.c_str(), "()V"); // void a_FunctionName( String )
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid );
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid );
if (mid != 0)
{
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() );
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() );
g_CurrentJNIEnv->CallVoidMethod( a_Object, mid );
}
else