Files
LegacyWeaveLoader/LegacyForgeRuntime/src/GameHooks.cpp
Jacobwasbeast 65ef99fc11 Use exact decorated symbol names verified against Minecraft.Client.pdb
Verified all hook targets exist in the compiled game's PDB:
- ?MinecraftWorld_RunStaticCtors@@YAXXZ
- ?tick@Minecraft@@QEAAX_N0@Z
- ?init@Minecraft@@QEAAXXZ
- ?ExitGame@CConsoleMinecraftApp@@UEAAXXZ (replaces destroy which is inlined)

Minecraft::destroy/run_end/stop are not public symbols (likely inlined),
so the shutdown hook now targets CConsoleMinecraftApp::ExitGame instead.
2026-03-06 15:16:06 -06:00

49 lines
1.3 KiB
C++

#include "GameHooks.h"
#include "DotNetHost.h"
#include <cstdio>
namespace GameHooks
{
RunStaticCtors_fn Original_RunStaticCtors = nullptr;
MinecraftTick_fn Original_MinecraftTick = nullptr;
MinecraftInit_fn Original_MinecraftInit = nullptr;
ExitGame_fn Original_ExitGame = nullptr;
void Hooked_RunStaticCtors()
{
printf("[LegacyForge] Hook: RunStaticCtors -- calling PreInit\n");
DotNetHost::CallPreInit();
Original_RunStaticCtors();
printf("[LegacyForge] Hook: RunStaticCtors complete -- calling Init\n");
DotNetHost::CallInit();
}
void __fastcall Hooked_MinecraftTick(void* thisPtr, bool bFirst, bool bUpdateTextures)
{
Original_MinecraftTick(thisPtr, bFirst, bUpdateTextures);
if (bFirst)
{
DotNetHost::CallTick();
}
}
void __fastcall Hooked_MinecraftInit(void* thisPtr)
{
Original_MinecraftInit(thisPtr);
printf("[LegacyForge] Hook: Minecraft::init complete -- calling PostInit\n");
DotNetHost::CallPostInit();
}
void __fastcall Hooked_ExitGame(void* thisPtr)
{
printf("[LegacyForge] Hook: ExitGame -- calling Shutdown\n");
DotNetHost::CallShutdown();
Original_ExitGame(thisPtr);
}
}