blocklauncher插件吧 关注:2,534贴子:18,937

【造福】插件编写常用类指针获取方式

只看楼主收藏回复

一楼还是不发了,谁叫咱老实呢


IP属地:云南来自Android客户端1楼2016-05-02 23:01回复
    2.LocalPlayer指针
    按照1所述方法获取Level指针,而后调用Level::getLocalPlayer即可获得。
    代码:
    void (*_Level$tick)(Level*);
    void Level$tick(Level* l)
    {
    _Level$tick(l);
    LocalPlayer* localPlayer = l->getLocalPlayer();
    }
    MSHookFunction((void*)&Level::tick, (void*) &Level$tick, (void**) &_Level$tick);


    IP属地:云南来自Android客户端3楼2016-05-02 23:02
    回复
      2026-01-21 16:38:19
      广告
      不感兴趣
      开通SVIP免广告
      3.MinecraftClient指针
      此指针有两种方法可以获取,诸位任选其一。
      方法一:使用MSHookFunction函数,将MinecraftClient::init函数Hook然后替换,即可获得。
      代码:
      void (*_MinecraftClient$init)(MinecraftClient*);
      void MinecraftClient$init(MinecraftClient* m)
      {
      _MinecraftClient$tick(m);
      MinecraftClient* minecraftClient = m;
      }
      MSHookFunction((void*)&MinecraftClient::init, (void*) &MinecraftClient$init, (void**) &_MinecraftClient$init);
      方法二:按照2所述方法获取LocalPlayer指针,而后调用LocalPlayer::getMinecraftClient即可获得。
      代码:
      void (*_Level$tick)(Level*);
      void Level$tick(Level* l)
      {
      _Level$tick(l);
      LocalPlayer* localPlayer = l->getLocalPlayer();
      MinecraftClient* minecraftClient = localPlayer->getMinecraftClient();
      }
      MSHookFunction((void*)&Level::tick, (void*) &Level$tick, (void**) &_Level$tick);


      IP属地:云南来自Android客户端4楼2016-05-02 23:03
      回复
        4.Gui指针
        此指针也有两种方法可以获取,诸位同样任选其一。
        方法一:使用MSHookFunction函数,将Gui::tick函数Hook然后替换,即可获得。
        代码:
        void (*_Gui$tick)(Gui*);
        void Gui$tick(Gui* g)
        {
        _Gui$tick(g);
        Gui* gui = g;
        }
        MSHookFunction((void*)&Gui::tick, (void*) &Gui$tick, (void**) &_Gui$tick);
        方法二:按照3所述方法获取MinecraftClient指针,而后调用MinecraftClient::getGui即可获得。
        代码:
        ( 1 )
        void (*_MinecraftClient$init)(MinecraftClient*);
        void MinecraftClient$init(MinecraftClient* m)
        {
        _MinecraftClient$tick(m);
        MinecraftClient* minecraftClient = m;
        Gui* gui = minecraftClient->getGui();
        }
        MSHookFunction((void*)&MinecraftClient::init, (void*) &MinecraftClient$init, (void**) &_MinecraftClient$init);
        ( 2 )
        void (*_Level$tick)(Level*);
        void Level$tick(Level* l)
        {
        _Level$tick(l);
        LocalPlayer* localPlayer = l->getLocalPlayer();
        MinecraftClient* minecraftClient = localPlayer->getMinecraftClient();
        Gui* gui = minecraftClient->getGui();
        }
        MSHookFunction((void*)&Level::tick, (void*) &Level$tick, (void**) &_Level$tick);


        IP属地:云南来自Android客户端5楼2016-05-02 23:03
        收起回复
          5.BlockSource指针
          此指针的获取较为容易,获取到任意一个Entity指针即可通过Entity::getRegion获取到此指针,这里使用LocalPlayer指针。按照2所述方法获取LocalPlayer指针,因为LocalPlayer类是Player类的派生类,而Player类是Mob类的派生类,且Mob类是Entity类的派生类,所以而后只需要调用LocalPlayer::getRegion即可获得。
          代码:
          void (*_Level$tick)(Level*);
          void Level$tick(Level* l)
          {
          _Level$tick(l);
          LocalPlayer* localPlayer = l->getLocalPlayer();
          BlockSource* blockSource = localPlayer->getRegion();
          }
          MSHookFunction((void*)&Level::tick, (void*) &Level$tick, (void**) &_Level$tick);


          IP属地:云南来自Android客户端6楼2016-05-02 23:03
          回复
            6.Inventory指针
            使用MSHookFunction函数,将Inventory::tick函数Hook然后替换,即可获得。
            代码:
            void (*_Inventory$tick)(Inventory*);
            void Inventory$tick(Inventory* i)
            {
            _Inventory$tick(i);
            Inventory* inventory = l;
            }
            MSHookFunction((void*)&Inventory::tick, (void*) &Inventory$tick, (void**) &_Inventory$tick);


            IP属地:云南来自Android客户端7楼2016-05-02 23:04
            回复
              7.InventoryMenu指针
              按照2所述方法获取LocalPlayer指针,而后调用LocalPlayer::getInventoryMenu即可获得。
              代码:
              void (*_Level$tick)(Level*);
              void Level$tick(Level* l)
              {
              _Level$tick(l);
              LocalPlayer* localPlayer = l->getLocalPlayer();
              InventoryMenu* inventoryMenu = localPlayer->getInventoryMenu();
              }
              MSHookFunction((void*)&Level::tick, (void*) &Level$tick, (void**) &_Level$tick);


              IP属地:云南来自Android客户端8楼2016-05-02 23:04
              回复
                8.MobFactory指针
                使用MSHookFunction函数,将MobFactory::tick函数Hook然后替换,即可获得。
                代码:
                void (*_MobFactory$tick)(MobFactory*, Player*);
                void MobFactory$tick(MobFactory* mf, Player* p)
                {
                _MobFactory$tick(mf, p);
                MobFactory* mobFactory = mf;
                }
                MSHookFunction((void*)&MobFactory::tick, (void*) &MobFactory$tick, (void**) &_MobFactory$tick);


                IP属地:云南来自Android客户端9楼2016-05-02 23:04
                回复
                  2026-01-21 16:32:19
                  广告
                  不感兴趣
                  开通SVIP免广告
                  9.Dimension指针
                  此指针有两种方法可以获取,但方法一存在不确定性,因为Dimension可能存在不止一个,所以推荐使用方法二。
                  方法一:使用MSHookFunction函数,将Dimension::tick函数Hook然后替换,即可获得。
                  代码:
                  void (*_Dimension$tick)(Dimension*);
                  void Dimension$tick(Dimension* d)
                  {
                  _Dimension$tick(l);
                  Dimension* dimension = d;
                  }
                  MSHookFunction((void*)&Dimension::tick, (void*) &Dimension$tick, (void**) &_Dimension$tick);
                  方法二:按照5所述方法获取BlockSource指针,而后调用BlockSource::getDimension即可获得。
                  代码:
                  void (*_Level$tick)(Level*);
                  void Level$tick(Level* l)
                  {
                  _Level$tick(l);
                  LocalPlayer* localPlayer = l->getLocalPlayer();
                  BlockSource* blockSource = localPlayer->getRegion();
                  Dimension* dimension = blockSource->getDimension();
                  }
                  MSHookFunction((void*)&Level::tick, (void*) &Level$tick, (void**) &_Level$tick);


                  IP属地:云南来自Android客户端10楼2016-05-02 23:05
                  回复
                    10.Weather指针
                    此指针有两种方法可以获取,诸位任选其一。
                    方法一:使用MSHookFunction函数,将Weather::tick函数Hook然后替换,即可获得。
                    代码:
                    void (*_Weather$tick)(Weather*);
                    void Weather$tick(Weather* w)
                    {
                    _Weather$tick(w);
                    Weather* weather = w;
                    }
                    MSHookFunction((void*)&Weather::tick, (void*) &Weather$tick, (void**) &_Weather$tick);
                    方法二:按照9所述方法获取Dimension指针,而后调用Dimension::getWeather即可获得。
                    代码:
                    void (*_Level$tick)(Level*);
                    void Level$tick(Level* l)
                    {
                    _Level$tick(l);
                    LocalPlayer* localPlayer = l->getLocalPlayer();
                    BlockSource* blockSource = localPlayer->getRegion();
                    Dimension* dimension = blockSource->getDimension();
                    Weather* weather = dimension->getWeather();
                    }
                    MSHookFunction((void*)&Level::tick, (void*) &Level$tick, (void**) &_Level$tick);


                    IP属地:云南来自Android客户端11楼2016-05-02 23:05
                    回复
                      11.LevelData指针
                      按照1所述方法获取Level指针,而后调用Level::getLevelData即可获得。
                      代码:
                      void (*_Level$tick)(Level*);
                      void Level$tick(Level* l)
                      {
                      _Level$tick(l);
                      Level* level = l;
                      LevelData* levelData = l->getLevelData();
                      }
                      MSHookFunction((void*)&Level::tick, (void*) &Level$tick, (void**) &_Level$tick);


                      IP属地:云南来自Android客户端12楼2016-05-02 23:05
                      回复
                        好吧,我个人觉得差不多了,而且手打也是够累的……
                        如有意见、建议、疑问敬请不要告诉我……好吧,开个玩笑,如有意见、建议、疑问敬请告知。


                        IP属地:云南来自Android客户端13楼2016-05-02 23:06
                        收起回复
                          支持楼主


                          IP属地:浙江来自Android客户端14楼2016-05-02 23:09
                          收起回复
                            静音辛苦了


                            IP属地:广西来自Android客户端15楼2016-05-02 23:10
                            收起回复
                              2026-01-21 16:26:19
                              广告
                              不感兴趣
                              开通SVIP免广告
                              突然发现漏了一个,过来补上:
                              9.Dimension指针
                              此指针有两种方法可以获取,但方法一存在不确定性,因为Dimension可能存在不止一个,所以推荐使用方法二。
                              方法一:使用MSHookFunction函数,将Dimension::tick函数Hook然后替换,即可获得。
                              代码:
                              void (*_Dimension$tick)(Dimension*);
                              void Dimension$tick(Dimension* d)
                              {
                              _Dimension$tick(l);
                              Dimension* dimension = d;
                              }
                              MSHookFunction((void*)&Dimension::tick, (void*) &Dimension$tick, (void**) &_Dimension$tick);
                              方法二:按照5所述方法获取BlockSource指针,而后调用BlockSource::getDimension即可获得。
                              代码:
                              void (*_Level$tick)(Level*);
                              void Level$tick(Level* l)
                              {
                              _Level$tick(l);
                              LocalPlayer* localPlayer = l->getLocalPlayer();
                              BlockSource* blockSource = localPlayer->getRegion();
                              Dimension* dimension = blockSource->getDimension();
                              }
                              MSHookFunction((void*)&Level::tick, (void*) &Level$tick, (void**) &_Level$tick);


                              IP属地:云南来自Android客户端16楼2016-05-02 23:19
                              回复