真正的整合包: 在原版安装包里面加插件!
本贴直播做一个整合一个插件到原版。
作用是当爆炸发生时,在聊天栏输出"爆炸是不允许的",并且阻止爆炸发生。
原料准备:
MT管理器2;
MCPE安装包;
一份插件的so;
libsubstrate.so或者libmcpelauncher_tinysubstrate.so;
作用是当爆炸发生时,在聊天栏输出"爆炸是不允许的",并且阻止爆炸发生。
原料准备:
MT管理器2;
MCPE安装包;
一份插件的so;
libsubstrate.so或者libmcpelauncher_tinysubstrate.so;
下一步 写好原生插件代码后编译
这是源代码
#include "Substrate.h"
#include <jni.h>
#include <string>
void* mcClient;
void (*_minecraftclient_init_)(void*);
void _minecraftclient_init(void*thiz)
{
_minecraftclient_init_(mcClient=thiz);
}
void* (*getGuiData)(void*);
void (*displayClientMessage)(void*,std::string const&);
void explode_replace(void*)
{
void* guiData=getGuiData(mcClient);
displayClientMessage(guiData,"爆炸是禁止的哦!");
}
JNIEXPORT jint JNI_OnLoad(JavaVM*,void*)
{
void * image = dlopen("libminecraftpe.so",RTLD_LAZY);
MSHookFunction(dlsym(image,"_ZN9Explosion7explodeEv"),(void*)&explode_replace);
MSHookFunction(dlsym(image,"_ZN15MinecraftClient4initEv"),(void*)&_minecraftclient_init,(void**)&_minecraftclient_init_);
getGuiData=(void*(*)(void*)) dlsym(image,"_ZN15MinecraftClient10getGuiDataEv");
displayClientMessage= (void(*)(void*,std::string const&)) dlsym(image,"_ZN7GuiData20displayClientMessageERKSs");
return JNI_VERSION_1_6;
}
这是源代码
#include "Substrate.h"
#include <jni.h>
#include <string>
void* mcClient;
void (*_minecraftclient_init_)(void*);
void _minecraftclient_init(void*thiz)
{
_minecraftclient_init_(mcClient=thiz);
}
void* (*getGuiData)(void*);
void (*displayClientMessage)(void*,std::string const&);
void explode_replace(void*)
{
void* guiData=getGuiData(mcClient);
displayClientMessage(guiData,"爆炸是禁止的哦!");
}
JNIEXPORT jint JNI_OnLoad(JavaVM*,void*)
{
void * image = dlopen("libminecraftpe.so",RTLD_LAZY);
MSHookFunction(dlsym(image,"_ZN9Explosion7explodeEv"),(void*)&explode_replace);
MSHookFunction(dlsym(image,"_ZN15MinecraftClient4initEv"),(void*)&_minecraftclient_init,(void**)&_minecraftclient_init_);
getGuiData=(void*(*)(void*)) dlsym(image,"_ZN15MinecraftClient10getGuiDataEv");
displayClientMessage= (void(*)(void*,std::string const&)) dlsym(image,"_ZN7GuiData20displayClientMessageERKSs");
return JNI_VERSION_1_6;
}
然后在如图所示位置粘贴两次 。
如果同时整合两个插件就粘贴三次
同时整合四个就粘贴五次
注意,一定是如图所示的位置!!!
一定在const-string v1 "minecraftpe"
invoke-static {v1} Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
的后面!
位置一定不可以错!
如果同时整合两个插件就粘贴三次
同时整合四个就粘贴五次
注意,一定是如图所示的位置!!!
一定在const-string v1 "minecraftpe"
invoke-static {v1} Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
的后面!
位置一定不可以错!