blocklauncher插件吧 关注:2,541贴子:18,931

大杂烩,插件代码原理

只看楼主收藏回复

首先我们分析一下Level::setTime(long)的原理。
Level是它的类,然而我们的插件不像js那样温柔,所以,必须获取Level。
我觉得,tick是获取Level的好办法。
class Level {
public:
static void tick();//钩子必须添加static,我现在用的是隐式
void setTime(long);
};
这是前头工作。我们将在教程里详细探讨。
第二个,操作。
static void (*t_r)(Level*);//指针声明
static void t_h(Level*l) {
level=l;
t_r(level);
}
MSHookFunction((void*)&Level::tick,(void*)&t_h,(void**)&t_r);//这是放在模板里jni那一行的。
手头工作搞定了以后,我们喝杯java,继续干。
*t_r的上面添加Level*level=NULL;//初始化,防止寄存器垃圾值
当然,要有钩子,才能触发函数,今晚继续。



IP属地:广东来自Android客户端1楼2015-07-30 09:59回复
    @ID是空岛人 你要的源码,未完工


    IP属地:广东来自Android客户端2楼2015-07-30 10:01
    收起回复


      来自Android客户端3楼2015-07-30 11:13
      回复
        钩子是MinecraftClient::onPlayerLoaded


        IP属地:广东来自Android客户端6楼2015-07-30 22:17
        回复
          用这个勾住进入世界


          IP属地:广东来自Android客户端7楼2015-07-30 22:17
          收起回复
            level->setTime(13380)


            IP属地:广东来自Android客户端8楼2015-07-30 22:17
            回复
              static void (*a_r)(MinecraftClient*,Player*);


              IP属地:广东来自Android客户端9楼2015-07-30 22:35
              回复
                static void a_h(MinecraftClient*m,Player*p) {
                level->setTime(13380);
                a_r(m,p);
                }


                IP属地:广东来自Android客户端10楼2015-07-30 22:36
                回复
                  秒懂


                  IP属地:广西来自手机贴吧11楼2015-07-30 23:04
                  回复
                    于怒水,马加精


                    IP属地:北京来自Android客户端12楼2015-07-31 09:10
                    回复
                      当然,我们不仅要掌握一级函数,还有二级


                      IP属地:广东来自Android客户端13楼2015-07-31 11:13
                      回复
                        但我们在函数表里看不到LocalPlayer::tick,那咋办呢?


                        IP属地:广东来自Android客户端15楼2015-07-31 11:15
                        回复
                          别急,还有 Level::getLocalPlayer(void)


                          IP属地:广东来自Android客户端16楼2015-07-31 11:16
                          回复
                            刚刚我们用了tick获取了Level,现在要从level里获取localplayer了


                            IP属地:广东来自Android客户端17楼2015-07-31 11:17
                            回复
                              今晚继续


                              IP属地:广东来自Android客户端18楼2015-07-31 11:17
                              回复