Esempio n. 1
0
void exampleScreen() {
	// 버튼을 추가하기 위해 init, setupPositions, buttonClicked 세개를 Hook 합니다.
	// You should hook these functions to create button in the start menu: init(), setupPositions(), buttonClicked().
	mcpelauncher_hook((void *) &Touch::StartMenuScreen::init,		(void *) &Touch::StartMenuScreen::init_hook,			(void **) &Touch::StartMenuScreen::init_real);
	mcpelauncher_hook((void *) &Touch::StartMenuScreen::setupPositions,	(void *) &Touch::StartMenuScreen::setupPositions_hook,		(void **) &Touch::StartMenuScreen::setupPositions_real);
	mcpelauncher_hook((void *) &Touch::StartMenuScreen::buttonClicked,	(void *) &Touch::StartMenuScreen::buttonClicked_hook,		(void **) &Touch::StartMenuScreen::buttonClicked_real);
}
Esempio n. 2
0
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
    //this gets called after the library's happily loaded and the Dalvik VM is ready
    __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "starting\n");

    void* inputTick = dlsym(RTLD_DEFAULT, "_ZN16TouchscreenInput4tickEP6Player");
    mcpelauncher_hook(inputTick, &zhuoweisprint_tickHook, &zhuoweisprint_TouchScreenInput_tick_real);

    void* walkingSpeed = dlsym(RTLD_DEFAULT, "_ZN6Player23getWalkingSpeedModifierEv");
    mcpelauncher_hook(walkingSpeed, &zhuoweisprint_getWalkingSpeedModifierHook, &zhuoweisprint_Player_getWalkingSpeedModifier_real);

    return JNI_VERSION_1_2;
}
Esempio n. 3
0
	void mod_init() 
	{
		mcpelauncher_hook((void*) &MinecraftClient::init, (void*) &MinecraftClient$init, (void**) &_MinecraftClient$init);
		mcpelauncher_hook((void*) &Block::initBlocks, (void*) &Block$initBlocks, (void**) &_Block$initBlocks);
		//mcpelauncher_hook((void*) &BlockEntity::initBlockEntities, (void*) &BlockEntity$initBlockEntities, (void**) &_BlockEntity$initBlockEntities);
		mcpelauncher_hook((void*) &Item::initItems, (void*) &Item$initItems, (void**) &_Item$initItems);
		mcpelauncher_hook((void*) &Item::initCreativeItems, (void*) &Item$initCreativeItems, (void**) &_Item$initCreativeItems);
		//mcpelauncher_hook((void*) &Recipies::initRecipies, (void*) &Recipies$initRecipies, (void**) &_Recipies$initRecipies);
		
		//mcpelauncher_hook((void*) &I18n::get, (void*) &I18n$get, (void**) &_I18n$get);

		//mcpelauncher_hook((void*) &BlockEntityFactory::createBlockEntity, (void*) &BlockEntityFactory$createBlockEntity, (void**) &_BlockEntityFactory$createBlockEntity);
	}
Esempio n. 4
0
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
	// hook the methods we need for this
	// since we're porting a mod, they already specified which methods to hook.
	// hmmmmmmmmmmmmmmmmmm
	void* mcpelibhandle = dlopen("libminecraftpe.so", RTLD_LAZY);
	// clear any errors from the dynamic linker
	dlerror();
	// ask the linker to give us a handle to the lib.
	// these are all standard unix methods: Google is your friend
	Entity_remove = dlsym(mcpelibhandle, "_ZN6Entity6removeEv");
	// I've replayed Final Countdown a few times now as motivational music
	// :D
	// 500ise Can't Copy and Paste: the Movie
	Level_explode = dlsym(mcpelibhandle, "_ZN5Level7explodeEP6Entityffff");
	
	void* arrowTick = dlsym(mcpelibhandle, "_ZN5Arrow10normalTickEv");
	// replace the arrow::tick method with a call to our own Arrow_tick_hook method
	// store a pointer to a copy of the original method in Arrow_tick_real so we can 
	// call it in our hook
	mcpelauncher_hook(arrowTick, &Arrow_normalTick_hook, (void**) &Arrow_normalTick_real);
	void* levelPlaySound = dlsym(mcpelibhandle, "_ZN5Level9playSoundEP6EntityRKSsff");
	// aren't you bored yet?
	mcpelauncher_hook(levelPlaySound, &Level_playSound_hook, (void**) &Level_playSound_real);
	__android_log_print(ANDROID_LOG_INFO, TAG, "playsound %x %x", (int) levelPlaySound,
		(int) Level_playSound_real);
	// now we need to grab those method names
	// and to write the hooked methods
	// :( sigh. * starts playing intense focus music
	// you know how to get an unmangled objdump symbols output, right?
	// if not, YouTube/Google/manpages is your friend
	
	const char* error = dlerror(); // is there an error?
	if (error) {
		__android_log_print(ANDROID_LOG_INFO, TAG, "dlerror: %s", error); // print the error to the log
	}
	
	return JNI_VERSION_1_2;
}
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
	//this gets called after the library's happily loaded and the Dalvik VM is ready
	__android_log_print(ANDROID_LOG_INFO, "zhuoweixray", "starting\n");

	void* shouldRenderFace = dlsym(RTLD_DEFAULT, "_ZN4Tile16shouldRenderFaceEP11LevelSourceiiii");
	mcpelauncher_hook(shouldRenderFace, &zhuoweixray_shouldRenderFaceXray, &zhuoweixray_Tile_shouldRenderFace_real);
	void* getBrightness = dlsym(RTLD_DEFAULT, "_ZN4Tile13getBrightnessEP11LevelSourceiii");
	mcpelauncher_hook(getBrightness, &zhuoweixray_getBrightnessXray, &zhuoweixray_Tile_getBrightness_real);

	soinfo2* mcpelibhandle = (soinfo2*) dlopen("libminecraftpe.so", RTLD_LAZY);
	__android_log_print(ANDROID_LOG_INFO, "zhuoweixray", "base%x\n", mcpelibhandle->base);
	void* swordUseFn = (void*) (mcpelibhandle->base + 0x1301be + 1);
	//mcpelauncher_hook(swordUseFn, &zhuoweixray_swordBreakBlock, &zhuoweixray_WeaponItem_mineBlock_real);
	//int* coalUseFn = (int*) (mcpelibhandle->base + 0x1c9ca0 + 14);
	
	//(*coalUseFn) = &zhuoweixray_coalItemUse;
	for (int i = 0; i < 0x100; i++) {
		zhuoweixray_renderInXrayMode[i] = 0;
	}
	zhuoweixray_renderInXrayMode[14] = zhuoweixray_renderInXrayMode[15] = zhuoweixray_renderInXrayMode[16] = 1;
	zhuoweixray_renderInXrayMode[54] = zhuoweixray_renderInXrayMode[56] = zhuoweixray_renderInXrayMode[73] = 1;
	zhuoweixray_renderInXrayMode[21] = 1;
	return JNI_VERSION_1_2;
}
void bl_renderManager_init(void* mcpelibhandle) {
	bl_EntityRenderDispatcher_getRenderer = (EntityRenderer* (*) (void*, int))
		dlsym(mcpelibhandle, "_ZN22EntityRenderDispatcher11getRendererE16EntityRendererId");
	bl_EntityRenderDispatcher_getInstance = (void* (*)())
		dlsym(mcpelibhandle, "_ZN22EntityRenderDispatcher11getInstanceEv");
	bl_MeshBuffer_reset = (void (*)(void*))
		dlsym(mcpelibhandle, "_ZN10MeshBuffer5resetEv");
	bl_EntityRenderDispatcher_assign = (void (*)(void*, int, EntityRenderer*))
		dlsym(mcpelibhandle, "_ZN22EntityRenderDispatcher6assignE16EntityRendererIdP14EntityRenderer");
	bl_HumanoidModel_HumanoidModel = (void (*)(HumanoidModel*, float, float))
		dlsym(mcpelibhandle, "_ZN13HumanoidModelC1Eff");
	bl_HumanoidMobRenderer_HumanoidMobRenderer = (void (*)(MobRenderer*, HumanoidModel*, float))
		dlsym(mcpelibhandle, "_ZN19HumanoidMobRendererC1EP13HumanoidModelf");
	void* getRenderer = dlsym(mcpelibhandle, "_ZN22EntityRenderDispatcher11getRendererEP6Entity");
	mcpelauncher_hook(getRenderer, (void*) bl_EntityRenderDispatcher_getRenderer_hook, 
		(void**) &bl_EntityRenderDispatcher_getRenderer_real);
}
Esempio n. 7
0
JNIEXPORT void JNICALL Java_net_zhuoweizhang_mcpelauncher_ScriptManager_nativeSetupHooks
  (JNIEnv *env, jclass clazz, jint versionCode) {
	if (bl_hasinit_script) return;
	//edit the vtables of the GameMode implementations
	bl_GameMode_useItemOn_real = dlsym(RTLD_DEFAULT, "_ZN8GameMode9useItemOnEP6PlayerP5LevelP12ItemInstanceiiiiRK4Vec3");
	int *creativeVtable = (int*) dlsym(RTLD_DEFAULT, "_ZTV12CreativeMode");
	creativeVtable[GAMEMODE_VTABLE_OFFSET_USE_ITEM_ON] = (int) &bl_GameMode_useItemOn_hook;
	int *survivalVtable = (int*) dlsym(RTLD_DEFAULT, "_ZTV12SurvivalMode");
	survivalVtable[GAMEMODE_VTABLE_OFFSET_USE_ITEM_ON] = (int) &bl_GameMode_useItemOn_hook;

	bl_GameMode_attack_real = dlsym(RTLD_DEFAULT, "_ZN8GameMode6attackEP6PlayerP6Entity");
	creativeVtable[GAMEMODE_VTABLE_OFFSET_ATTACK] = (int) &bl_GameMode_attack_hook;
	survivalVtable[GAMEMODE_VTABLE_OFFSET_ATTACK] = (int) &bl_GameMode_attack_hook;
	bl_GameMode_tick_real = dlsym(RTLD_DEFAULT, "_ZN8GameMode4tickEv");
	creativeVtable[GAMEMODE_VTABLE_OFFSET_TICK] = (int) &bl_GameMode_tick_hook;
	survivalVtable[GAMEMODE_VTABLE_OFFSET_TICK] = (int) &bl_GameMode_tick_hook;

	bl_GameMode_initPlayer_real = dlsym(RTLD_DEFAULT, "_ZN8GameMode10initPlayerEP6Player");
	creativeVtable[GAMEMODE_VTABLE_OFFSET_INIT_PLAYER] = (int) &bl_GameMode_initPlayer_hook;
	survivalVtable[GAMEMODE_VTABLE_OFFSET_INIT_PLAYER] = (int) &bl_GameMode_initPlayer_hook;

	//edit the vtable of NinecraftApp to get a callback when levels are switched
	bl_Minecraft_setLevel_real = dlsym(RTLD_DEFAULT, "_ZN9Minecraft8setLevelEP5LevelRKSsP11LocalPlayer");
	int *minecraftVtable = (int*) dlsym(RTLD_DEFAULT, "_ZTV12NinecraftApp");
	minecraftVtable[21] = (int) &bl_Minecraft_setLevel_hook;

	void* selectLevel = dlsym(RTLD_DEFAULT, "_ZN9Minecraft11selectLevelERKSsS1_RK13LevelSettings");
	mcpelauncher_hook(selectLevel, &bl_Minecraft_selectLevel_hook, (void**) &bl_Minecraft_selectLevel_real);

	void* destroyBlock = dlsym(RTLD_DEFAULT, "_ZN8GameMode12destroyBlockEiiii");
	mcpelauncher_hook(destroyBlock, &bl_GameMode_destroyBlock_hook, (void**) &bl_GameMode_destroyBlock_real);

	void* mobDie = dlsym(RTLD_DEFAULT, "_ZN3Mob3dieEP6Entity");
	mcpelauncher_hook(mobDie, &bl_Mob_die_hook, (void**) &bl_Mob_die_real);

	//get a callback when the level is exited
	void* leaveGame = dlsym(RTLD_DEFAULT, "_ZN9Minecraft9leaveGameEb");
	mcpelauncher_hook(leaveGame, &bl_Minecraft_leaveGame_hook, (void**) &bl_Minecraft_leaveGame_real);

	void* getFov = dlsym(RTLD_DEFAULT, "_ZN12GameRenderer6getFovEfb");
	//mcpelauncher_hook(getFov, &bl_GameRenderer_getFov_hook, (void**) &bl_GameRenderer_getFov_real);

	//get the level set block method. In future versions this might link against libminecraftpe itself
	bl_Level_setTileAndData = dlsym(RTLD_DEFAULT, "_ZN5Level14setTileAndDataEiiiiii");
	if (bl_Level_setTileAndData == NULL) {
		__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "Failed to get setTileAndData: %s\n", dlerror());
	}

	bl_Level_getData = dlsym(RTLD_DEFAULT, "_ZN5Level7getDataEiii");

	bl_Player_getCarriedItem = dlsym(RTLD_DEFAULT, "_ZN6Player14getCarriedItemEv");
	bl_Player_ride = dlsym(RTLD_DEFAULT, "_ZN6Player4rideEP6Entity");
	bl_Entity_setPos = dlsym(RTLD_DEFAULT, "_ZN6Entity6setPosEfff");
	bl_Level_explode = dlsym(RTLD_DEFAULT, "_ZN5Level7explodeEP6Entityffffb");
	bl_Inventory_add = dlsym(RTLD_DEFAULT, "_ZN9Inventory3addEP12ItemInstance");
	//bl_MobFactory_getStaticTestMob = dlsym(RTLD_DEFAULT, "_ZN10MobFactory16getStaticTestMobEiP5Level");
	bl_Level_addEntity = dlsym(RTLD_DEFAULT, "_ZN5Level9addEntityEP6Entity");
	bl_Level_getTile = dlsym(RTLD_DEFAULT, "_ZN5Level7getTileEiii");
	bl_Level_setNightMode = dlsym(RTLD_DEFAULT, "_ZN5Level12setNightModeEb");
	bl_Entity_setRot = dlsym(RTLD_DEFAULT, "_ZN6Entity6setRotEff");
	bl_Level_getEntity = dlsym(RTLD_DEFAULT, "_ZN5Level9getEntityEi");
	bl_NinecraftApp_onGraphicsReset = dlsym(RTLD_DEFAULT, "_ZN12NinecraftApp15onGraphicsResetEv");
	bl_Mob_getTexture = dlsym(RTLD_DEFAULT, "_ZN3Mob10getTextureEv");
	bl_LocalPlayer_hurtTo = dlsym(RTLD_DEFAULT, "_ZN11LocalPlayer6hurtToEi");
	bl_Level_removeEntity = dlsym(RTLD_DEFAULT, "_ZN5Level12removeEntityEP6Entity");
	bl_EntityFactory_CreateEntity = dlsym(RTLD_DEFAULT, "_ZN13EntityFactory12CreateEntityEiP5Level");
	bl_Entity_spawnAtLocation = dlsym(RTLD_DEFAULT, "_ZN6Entity15spawnAtLocationEP12ItemInstancef");
	bl_Level_setTime = dlsym(RTLD_DEFAULT, "_ZN5Level7setTimeEl");
	bl_Level_getTime = dlsym(RTLD_DEFAULT, "_ZN5Level7getTimeEv");
	bl_Level_getLevelData = dlsym(RTLD_DEFAULT, "_ZN5Level12getLevelDataEv");
	bl_LevelData_setSpawn = dlsym(RTLD_DEFAULT, "_ZN9LevelData8setSpawnEiii");
	bl_LevelData_setGameType = dlsym(RTLD_DEFAULT, "_ZN9LevelData11setGameTypeEi");
	bl_LevelData_getGameType = dlsym(RTLD_DEFAULT, "_ZNK9LevelData11getGameTypeEv");
	bl_Level_getTileEntity = dlsym(RTLD_DEFAULT, "_ZN5Level13getTileEntityEiii");
	bl_ChestTileEntity_setItem = dlsym(RTLD_DEFAULT, "_ZN15ChestTileEntity7setItemEiP12ItemInstance");
	bl_ChestTileEntity_getItem = dlsym(RTLD_DEFAULT, "_ZN15ChestTileEntity7getItemEi");
	bl_Entity_setOnFire = dlsym(RTLD_DEFAULT, "_ZN6Entity9setOnFireEi");
	bl_FillingContainer_clearSlot = dlsym(RTLD_DEFAULT, "_ZN16FillingContainer9clearSlotEi");
	bl_FillingContainer_getItem = dlsym(RTLD_DEFAULT, "_ZN16FillingContainer7getItemEi");
	bl_Level_ExtinguishFire = dlsym(RTLD_DEFAULT, "_ZN5Level14extinguishFireEiiii");
	bl_Player_getArmor = dlsym(RTLD_DEFAULT, "_ZN6Player8getArmorEi");
	bl_Player_setArmor = dlsym(RTLD_DEFAULT, "_ZN6Player8setArmorEiPK12ItemInstance");

	//replace the getTexture method for zombie pigmen
	int *pigZombieVtable = (int*) dlsym(RTLD_DEFAULT, "_ZTV9PigZombie");
	pigZombieVtable[MOB_VTABLE_OFFSET_GET_TEXTURE] = (int) bl_Mob_getTexture;

	bl_AgebleMob_setAge = dlsym(RTLD_DEFAULT, "_ZN9AgableMob6setAgeEi");
	bl_Minecraft_setIsCreativeMode = dlsym(RTLD_DEFAULT, "_ZN9Minecraft17setIsCreativeModeEb");
	bl_Inventory_clearInventoryWithDefault = dlsym(RTLD_DEFAULT, "_ZN9Inventory25clearInventoryWithDefaultEv");
	bl_Inventory_Inventory = dlsym(RTLD_DEFAULT, "_ZN9InventoryC2EP6Playerb");
	bl_Inventory_delete1_Inventory = dlsym(RTLD_DEFAULT, "_ZN9InventoryD1Ev");
	bl_ItemInstance_setId = dlsym(RTLD_DEFAULT, "_ZN12ItemInstance8_setItemEi"); //note the name change: consistent naming
	bl_ItemInstance_getId = dlsym(RTLD_DEFAULT, "_ZNK12ItemInstance5getIdEv");
	//replace the update method in Minecraft with our own
	minecraftVtable[MINECRAFT_VTABLE_OFFSET_UPDATE] = (int) &bl_NinecraftApp_update_hook;
	bl_NinecraftApp_update_real = dlsym(RTLD_DEFAULT, "_ZN12NinecraftApp6updateEv");

	soinfo2* mcpelibhandle = (soinfo2*) dlopen("libminecraftpe.so", RTLD_LAZY);
	int createMobOffset = 0xe7af4;
	if (versionCode == 50007050 || versionCode == 30007050) {
		createMobOffset = 0xe8130;
	} else if (versionCode == 40007050) {
		createMobOffset = 0xe80f8;
	} else if (versionCode == 30007030 || versionCode == 40007030) {
		createMobOffset = 0xe3fe4;
	} else if (versionCode == 30007010) {
		createMobOffset = 0xe130a;
	} else if (versionCode == 40007010) {
		createMobOffset = 0xe1322;
	} else if (versionCode == 30007020) {
		createMobOffset = 0xee6e6;
	} else if (versionCode == 0xaaaa) { //amazon
		createMobOffset = 0xe80f8;
	}
	bl_MobFactory_createMob = (Entity* (*)(int, Level*)) (mcpelibhandle->base + createMobOffset + 1);

	jclass clz = (*env)->FindClass(env, "net/zhuoweizhang/mcpelauncher/ScriptManager");

	bl_scriptmanager_class = (*env)->NewGlobalRef(env, clz);

	bl_setuphooks_cppside();

	bl_hasinit_script = 1;

}
Esempio n. 8
0
void mod_init() {
    std::cout << "init test mod\n";
    mcpelauncher_hook((void*) &Common::getGameVersionString, (void*) &Common::$$getGameVersionString, (void**) &Common::$getGameVersionString);
}