Created
August 13, 2015 22:59
-
-
Save jaehee0507/a21b75ea7d141607c5f4 to your computer and use it in GitHub Desktop.
A source of Single Potion Addon
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <dlfcn.h> | |
#include <jni.h> | |
#include <string> | |
#include <functional> | |
#include <vector> | |
#include <stdlib.h> | |
#include <android/log.h> | |
#include "mcpelauncher.h" | |
using namespace std; | |
class Player; | |
class MinecraftClient; | |
class RakNetInstance; | |
class MobEffectInstance { | |
public: | |
char filler[16]; | |
public: | |
MobEffectInstance(int, int, int); | |
}; | |
class Token { | |
public: | |
string const& getText(string const&) const; | |
int getValue(int) const; | |
}; | |
class ServerCommandParser { | |
public: | |
void addCommand(string const&, string const&, function<string (vector<Token> const&)> const&); | |
}; | |
Player* player = NULL; | |
bool isInServer = false; | |
void (*Mob_addEffect)(Player*, MobEffectInstance const&); | |
void applyEffect(int effect, int time, int level) { | |
Mob_addEffect(player, MobEffectInstance(effect, time*20, level-1)); | |
} | |
void (*Mob_removeEffect)(Player*, int); | |
void (*Mob_removeEffectParticles)(Player*); | |
void removeEffect() { | |
for(int i = 1; i <= 23; i++) | |
Mob_removeEffect(player, i); | |
Mob_removeEffectParticles(player); | |
} | |
void (*MinecraftClient_onPlayerLoaded_real)(MinecraftClient*, Player&); | |
void MinecraftClient_onPlayerLoaded_Hook(MinecraftClient* thiz, Player& player) { | |
::player = &player; | |
MinecraftClient_onPlayerLoaded_real(thiz, player); | |
} | |
string effectFunc(vector<Token> const& args) { | |
if(isInServer) | |
return "§4You cannot use this command in server"; | |
string effect = args[16].getText("null"); | |
int time = args[32].getValue(0); | |
int level = args[48].getValue(0); | |
if(effect == "speed" || effect == "1") | |
effect = "1"; | |
else if(effect == "slowness" || effect == "2") | |
effect = "2"; | |
else if(effect == "haste" || effect == "3") | |
effect = "3"; | |
else if(effect == "mining_fatigue" || effect == "4") | |
effect = "4"; | |
else if(effect == "strength" || effect == "5") | |
effect = "5"; | |
else if(effect == "instant_health" || effect == "6") | |
effect = "6"; | |
else if(effect == "instant_damage" || effect == "7") | |
effect = "7"; | |
else if(effect == "jump" || effect == "8") | |
effect = "8"; | |
else if(effect == "nausea" || effect == "9") | |
effect = "9"; | |
else if(effect == "regeneration" || effect == "10") | |
effect = "10"; | |
else if(effect == "damage_resistance" || effect == "11") | |
effect = "11"; | |
else if(effect == "fire_resistance" || effect == "12") | |
effect = "12"; | |
else if(effect == "water_breathing" || effect == "13") | |
effect = "13"; | |
else if(effect == "invisibility" || effect == "14") | |
effect = "14"; | |
else if(effect == "blindness" || effect == "15") | |
effect = "15"; | |
else if(effect == "night_vision" || effect == "16") | |
effect = "16"; | |
else if(effect == "hunger" || effect == "17") | |
effect = "17"; | |
else if(effect == "weakness" || effect == "18") | |
effect = "18"; | |
else if(effect == "poison" || effect == "19") | |
effect = "19"; | |
else if(effect == "wither" || effect == "20") | |
effect = "20"; | |
else if(effect == "health_boost" || effect == "21") | |
effect = "21"; | |
else if(effect == "absorption" || effect == "22") | |
effect = "22"; | |
else if(effect == "saturation" || effect == "23") | |
effect = "23"; | |
else | |
return "§4Cannot find effect : "+effect; | |
applyEffect(atoi(effect.c_str()), time, level); | |
return "§6Successfully applied effect"; | |
} | |
string clearFunc(vector<Token> const& args) { | |
removeEffect(); | |
return "§6Successfully removed effects"; | |
} | |
string whomadeitFunc(vector<Token> const& args) { | |
return "§eAffogatoman(@dfak0557)"; | |
} | |
void (*MinecraftClient_setupCommandParser_real)(MinecraftClient*, ServerCommandParser&); | |
void MinecraftClient_setupCommandParser_Hook(MinecraftClient* thiz, ServerCommandParser& parser) { | |
parser.addCommand("effect", "snn", effectFunc); | |
parser.addCommand("clear", "", clearFunc); | |
parser.addCommand("whomadeit", "", whomadeitFunc); | |
MinecraftClient_setupCommandParser_real(thiz, parser); | |
} | |
void (*MinecraftClient_leaveGame_real)(MinecraftClient*, bool); | |
void MinecraftClient_leaveGame_Hook(MinecraftClient* thiz, bool idk) { | |
isInServer = false; | |
MinecraftClient_leaveGame_real(thiz, idk); | |
} | |
void (*RakNetInstance_connect_real)(RakNetInstance*, const char*, int); | |
void RakNetInstance_connect_Hook(RakNetInstance* thiz, const char* ip, int port) { | |
isInServer = true; | |
RakNetInstance_connect_real(thiz, ip, port); | |
} | |
JNIEXPORT jint JNI_OnLoad(JavaVM * vm, void * reserved) { | |
Mob_addEffect = (void (*)(Player*, MobEffectInstance const&)) dlsym(RTLD_DEFAULT, "_ZN3Mob9addEffectERK17MobEffectInstance"); | |
Mob_removeEffect = (void (*)(Player*, int)) dlsym(RTLD_DEFAULT, "_ZN3Mob12removeEffectEi"); | |
Mob_removeEffectParticles = (void (*)(Player*)) dlsym(RTLD_DEFAULT, "_ZN3Mob21removeEffectParticlesEv"); | |
void* load = dlsym(RTLD_DEFAULT, "_ZN15MinecraftClient14onPlayerLoadedER6Player"); | |
mcpelauncher_hook(load, (void*) &MinecraftClient_onPlayerLoaded_Hook, (void**) &MinecraftClient_onPlayerLoaded_real); | |
void* setup = dlsym(RTLD_DEFAULT, "_ZN15MinecraftClient18setupCommandParserER19ServerCommandParser"); | |
mcpelauncher_hook(setup, (void*) &MinecraftClient_setupCommandParser_Hook, (void**) &MinecraftClient_setupCommandParser_real); | |
void* leave = dlsym(RTLD_DEFAULT, "_ZN15MinecraftClient9leaveGameEb"); | |
mcpelauncher_hook(leave, (void*) &MinecraftClient_leaveGame_Hook, (void**) &MinecraftClient_leaveGame_real); | |
void* multi = dlsym(RTLD_DEFAULT, "_ZN14RakNetInstance7connectEPKci"); | |
mcpelauncher_hook(multi, (void*) &RakNetInstance_connect_Hook, (void**) &RakNetInstance_connect_real); | |
return JNI_VERSION_1_2; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment