aboutsummaryrefslogtreecommitdiff
path: root/src/serverobject.h
Commit message (Expand)AuthorAge
* Fix invisible player when the attached entity is removedTeTpaAka2015-07-18
* Fix some issues with animations, and allow non-looped animations to be definedMirceaKitsune2015-06-22
* Fix typo in variable nameKahrl2015-05-28
* Add some missing getter functions to the lua APITeTpaAka2015-05-28
* Consistent const string paramsest312015-05-27
* Remove Queue class which uses std::list and use native std::queueLoic Blot2015-03-05
* SAO: re-add old ActiveObjectTypes for a future migration layerLoic Blot2015-02-17
* SAO work: ActiveObject types & SAO cleanup * Replace u8 types with ActiveObje...Loic Blot2015-02-17
* Replace setting unlimited_player_transfer_distance with player_transfer_distanceSmallJoker2014-11-08
* Remove remenants of mob codePavel Puchkin2014-10-23
* Allow modifying movement speed, jump height and gravity per-player via the Lu...MirceaKitsune2013-04-05
* Migrate to STL containers/algorithms.Ilya Zhuravlev2013-03-11
* Update Copyright YearsSfan52013-02-24
* Change Minetest-c55 to MinetestPilzAdam2013-02-24
* Full protocol 13 compatibility on server sidePerttu Ahola2012-11-29
* A bunch of fixesMirceaKitsune2012-11-25
* Update attachments at the ending of the addToScene function for parents. And ...MirceaKitsune2012-11-25
* Framework for the attachment system, new object property which allows changin...MirceaKitsune2012-11-25
* Get the new animation framework properly workingMirceaKitsune2012-11-25
* Add dtime_s to entity activationPerttu Ahola2012-09-09
* Optimize headersPerttu Ahola2012-06-17
* Properly and efficiently use split utility headersPerttu Ahola2012-06-17
* Switch the license to be LGPLv2/later, with small parts still remaining as GP...Perttu Ahola2012-06-05
* ObjectRef:set_armor_groups() and ObjectRef:set_properties() - works on player...Perttu Ahola2012-03-30
* Add GenericCAO and player armor groups, but don't use them yetPerttu Ahola2012-03-29
* added PlayerSAO and RemotePlayer, removed ServerRemotePlayerKahrl2012-03-29
* Entity damage system WIP; Remove C++ mobsPerttu Ahola2012-03-10
* Fix some warnings on some compilersGiuseppe Bilotta2012-02-02
* The huge item definition and item namespace unification patch (itemdef), see ...Kahrl2012-01-12
* Make players be again visible from a long distancePerttu Ahola2011-12-02
* Players are more like objects + related stuffPerttu Ahola2011-12-01
* Player-is-SAO WIPPerttu Ahola2011-12-01
* Add ServerActiveObject::removingFromEnvironment()Perttu Ahola2011-12-01
* CraftItem rework and Lua interfaceKahrl2011-11-29
* Create framework for getting rid of global definitions of node/tool/item/what...Perttu Ahola2011-11-29
* Scripting WIP: dynamic object stuffPerttu Ahola2011-11-29
* ServerRemotePlayer implements ServerActiveObjectPerttu Ahola2011-11-29
* Scripting WIPPerttu Ahola2011-11-29
* Scripting WIPPerttu Ahola2011-11-29
* Scripting WIPPerttu Ahola2011-11-29
* Scripting WIPPerttu Ahola2011-11-29
* Add peaceful / not peaceful distinction in mobs and the only_peaceful_mobs se...Perttu Ahola2011-10-16
* Improve mobv2Perttu Ahola2011-10-15
* Rats are now eatable. Also made their selection box move smoothly.Perttu Ahola2011-07-30
* reorganized a lot of stuff and modified mapgen and objects slightly while doi...Perttu Ahola2011-06-26
* Preliminary "active block" stuff + set up test code to grow grass.Perttu Ahola2011-05-22
* Some work-in-progress in hp and mobs and a frightening amount of random fixes.Perttu Ahola2011-04-21
* better support for old mapsPerttu Ahola2011-04-10
* new-style rats are now generated in the mapPerttu Ahola2011-04-10
* implemented rats in new system to verify that it worksPerttu Ahola2011-04-10
class="hl kwc">std::endl; retval = -1; } porting::cleanupAndroid(); infostream << "Shutting down." << std::endl; exit(retval); } /** * Handler for finished message box input * Intentionally NOT in namespace porting * ToDo: this doesn't work as expected, there's a workaround for it right now */ extern "C" { JNIEXPORT void JNICALL Java_net_minetest_minetest_GameActivity_putMessageBoxResult( JNIEnv *env, jclass thiz, jstring text) { errorstream << "Java_net_minetest_minetest_GameActivity_putMessageBoxResult got: " << std::string((const char*) env->GetStringChars(text, nullptr)) << std::endl; } } namespace porting { android_app *app_global; JNIEnv *jnienv; jclass nativeActivity; jclass findClass(const std::string &classname) { if (jnienv == nullptr) return nullptr; jclass nativeactivity = jnienv->FindClass("android/app/NativeActivity"); jmethodID getClassLoader = jnienv->GetMethodID( nativeactivity, "getClassLoader", "()Ljava/lang/ClassLoader;"); jobject cls = jnienv->CallObjectMethod( app_global->activity->clazz, getClassLoader); jclass classLoader = jnienv->FindClass("java/lang/ClassLoader"); jmethodID findClass = jnienv->GetMethodID(classLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); jstring strClassName = jnienv->NewStringUTF(classname.c_str()); return (jclass) jnienv->CallObjectMethod(cls, findClass, strClassName); } void initAndroid() { porting::jnienv = nullptr; JavaVM *jvm = app_global->activity->vm; JavaVMAttachArgs lJavaVMAttachArgs; lJavaVMAttachArgs.version = JNI_VERSION_1_6; lJavaVMAttachArgs.name = PROJECT_NAME_C "NativeThread"; lJavaVMAttachArgs.group = nullptr; if (jvm->AttachCurrentThread(&porting::jnienv, &lJavaVMAttachArgs) == JNI_ERR) { errorstream << "Failed to attach native thread to jvm" << std::endl; exit(-1); } nativeActivity = findClass("net/minetest/minetest/GameActivity"); if (nativeActivity == nullptr) errorstream << "porting::initAndroid unable to find java native activity class" << std::endl; #ifdef GPROF // in the start-up code __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME_C, "Initializing GPROF profiler"); monstartup("libMinetest.so"); #endif } void cleanupAndroid() { #ifdef GPROF errorstream << "Shutting down GPROF profiler" << std::endl; setenv("CPUPROFILE", (path_user + DIR_DELIM + "gmon.out").c_str(), 1); moncleanup(); #endif JavaVM *jvm = app_global->activity->vm; jvm->DetachCurrentThread(); } static std::string javaStringToUTF8(jstring js) { std::string str; // Get string as a UTF-8 c-string const char *c_str = jnienv->GetStringUTFChars(js, nullptr); // Save it str = c_str; // And free the c-string jnienv->ReleaseStringUTFChars(js, c_str); return str; } // Calls static method if obj is NULL static std::string getAndroidPath( jclass cls, jobject obj, jmethodID mt_getAbsPath, const char *getter) { // Get getter method jmethodID mt_getter; if (obj) mt_getter = jnienv->GetMethodID(cls, getter, "()Ljava/io/File;"); else mt_getter = jnienv->GetStaticMethodID(cls, getter, "()Ljava/io/File;"); // Call getter jobject ob_file; if (obj) ob_file = jnienv->CallObjectMethod(obj, mt_getter); else ob_file = jnienv->CallStaticObjectMethod(cls, mt_getter); // Call getAbsolutePath auto js_path = (jstring) jnienv->CallObjectMethod(ob_file, mt_getAbsPath); return javaStringToUTF8(js_path); } void initializePathsAndroid() { // Get Environment class jclass cls_Env = jnienv->FindClass("android/os/Environment"); // Get File class jclass cls_File = jnienv->FindClass("java/io/File"); // Get getAbsolutePath method jmethodID mt_getAbsPath = jnienv->GetMethodID(cls_File, "getAbsolutePath", "()Ljava/lang/String;"); std::string path_storage = getAndroidPath(cls_Env, nullptr, mt_getAbsPath, "getExternalStorageDirectory"); path_user = path_storage + DIR_DELIM + PROJECT_NAME_C; path_share = path_storage + DIR_DELIM + PROJECT_NAME_C; path_cache = getAndroidPath(nativeActivity, app_global->activity->clazz, mt_getAbsPath, "getCacheDir"); migrateCachePath(); } void showInputDialog(const std::string &acceptButton, const std::string &hint, const std::string &current, int editType) { jmethodID showdialog = jnienv->GetMethodID(nativeActivity, "showDialog", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V"); FATAL_ERROR_IF(showdialog == nullptr, "porting::showInputDialog unable to find java show dialog method"); jstring jacceptButton = jnienv->NewStringUTF(acceptButton.c_str()); jstring jhint = jnienv->NewStringUTF(hint.c_str()); jstring jcurrent = jnienv->NewStringUTF(current.c_str()); jint jeditType = editType; jnienv->CallVoidMethod(app_global->activity->clazz, showdialog, jacceptButton, jhint, jcurrent, jeditType); } void openURIAndroid(const std::string &url) { jmethodID url_open = jnienv->GetMethodID(nativeActivity, "openURI", "(Ljava/lang/String;)V"); FATAL_ERROR_IF(url_open == nullptr, "porting::openURIAndroid unable to find java openURI method"); jstring jurl = jnienv->NewStringUTF(url.c_str()); jnienv->CallVoidMethod(app_global->activity->clazz, url_open, jurl); } int getInputDialogState() { jmethodID dialogstate = jnienv->GetMethodID(nativeActivity, "getDialogState", "()I"); FATAL_ERROR_IF(dialogstate == nullptr, "porting::getInputDialogState unable to find java dialog state method"); return jnienv->CallIntMethod(app_global->activity->clazz, dialogstate); } std::string getInputDialogValue() { jmethodID dialogvalue = jnienv->GetMethodID(nativeActivity, "getDialogValue", "()Ljava/lang/String;"); FATAL_ERROR_IF(dialogvalue == nullptr, "porting::getInputDialogValue unable to find java dialog value method"); jobject result = jnienv->CallObjectMethod(app_global->activity->clazz, dialogvalue); const char *javachars = jnienv->GetStringUTFChars((jstring) result, nullptr); std::string text(javachars); jnienv->ReleaseStringUTFChars((jstring) result, javachars); return text; } #ifndef SERVER float getDisplayDensity() { static bool firstrun = true; static float value = 0; if (firstrun) { jmethodID getDensity = jnienv->GetMethodID(nativeActivity, "getDensity", "()F"); FATAL_ERROR_IF(getDensity == nullptr, "porting::getDisplayDensity unable to find java getDensity method"); value = jnienv->CallFloatMethod(app_global->activity->clazz, getDensity); firstrun = false; } return value; } v2u32 getDisplaySize() { static bool firstrun = true; static v2u32 retval; if (firstrun) { jmethodID getDisplayWidth = jnienv->GetMethodID(nativeActivity, "getDisplayWidth", "()I"); FATAL_ERROR_IF(getDisplayWidth == nullptr, "porting::getDisplayWidth unable to find java getDisplayWidth method"); retval.X = jnienv->CallIntMethod(app_global->activity->clazz, getDisplayWidth); jmethodID getDisplayHeight = jnienv->GetMethodID(nativeActivity, "getDisplayHeight", "()I"); FATAL_ERROR_IF(getDisplayHeight == nullptr, "porting::getDisplayHeight unable to find java getDisplayHeight method"); retval.Y = jnienv->CallIntMethod(app_global->activity->clazz, getDisplayHeight); firstrun = false; } return retval; } #endif // ndef SERVER }