Rebrand LegacyForge to Weave Loader

Rename across entire codebase:
- LegacyForge -> WeaveLoader (identifiers, namespaces, classes, DLLs)
- LegacyForgeRuntime -> WeaveLoaderRuntime (C++ project)
- LegacyForge.API/Core/Launcher -> WeaveLoader.API/Core/Launcher (C# projects)
- [LegacyForge] -> [WeaveLoader] (log prefixes)
- legacyforge -> weaveloader (config files, log files, backup suffixes)
- Display name "Weave Loader" in README, CONTRIBUTING, LICENSE
This commit is contained in:
Jacobwasbeast
2026-03-06 23:31:18 -06:00
parent f5805fc740
commit fa195fdc2e
70 changed files with 336 additions and 336 deletions

View File

@@ -0,0 +1,218 @@
#include "HookManager.h"
#include "GameHooks.h"
#include "ModAtlas.h"
#include "ModStrings.h"
#include "SymbolResolver.h"
#include "CreativeInventory.h"
#include "MainMenuOverlay.h"
#include "GameObjectFactory.h"
#include "LogUtil.h"
#include <MinHook.h>
bool HookManager::Install(const SymbolResolver& symbols)
{
if (MH_Initialize() != MH_OK)
{
LogUtil::Log("[WeaveLoader] MH_Initialize failed");
return false;
}
if (symbols.pRunStaticCtors)
{
if (MH_CreateHook(symbols.pRunStaticCtors,
reinterpret_cast<void*>(&GameHooks::Hooked_RunStaticCtors),
reinterpret_cast<void**>(&GameHooks::Original_RunStaticCtors)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Failed to hook RunStaticCtors");
return false;
}
LogUtil::Log("[WeaveLoader] Hooked RunStaticCtors");
}
if (symbols.pMinecraftTick)
{
if (MH_CreateHook(symbols.pMinecraftTick,
reinterpret_cast<void*>(&GameHooks::Hooked_MinecraftTick),
reinterpret_cast<void**>(&GameHooks::Original_MinecraftTick)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Failed to hook Minecraft::tick");
return false;
}
LogUtil::Log("[WeaveLoader] Hooked Minecraft::tick");
}
if (symbols.pMinecraftInit)
{
if (MH_CreateHook(symbols.pMinecraftInit,
reinterpret_cast<void*>(&GameHooks::Hooked_MinecraftInit),
reinterpret_cast<void**>(&GameHooks::Original_MinecraftInit)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Failed to hook Minecraft::init");
return false;
}
LogUtil::Log("[WeaveLoader] Hooked Minecraft::init");
}
if (symbols.pExitGame)
{
if (MH_CreateHook(symbols.pExitGame,
reinterpret_cast<void*>(&GameHooks::Hooked_ExitGame),
reinterpret_cast<void**>(&GameHooks::Original_ExitGame)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook ExitGame (shutdown hook unavailable)");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked ExitGame");
}
}
GameObjectFactory::ResolveSymbols(const_cast<SymbolResolver&>(symbols));
if (symbols.pLoadUVs && symbols.pSimpleIconCtor && symbols.pOperatorNew)
{
ModAtlas::SetInjectSymbols(symbols.pSimpleIconCtor, symbols.pOperatorNew);
if (MH_CreateHook(symbols.pLoadUVs,
reinterpret_cast<void*>(&GameHooks::Hooked_LoadUVs),
reinterpret_cast<void**>(&GameHooks::Original_LoadUVs)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook PreStitchedTextureMap::loadUVs (mod textures may not appear)");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked PreStitchedTextureMap::loadUVs (mod texture injection)");
}
if (symbols.pRegisterIcon)
{
if (MH_CreateHook(symbols.pRegisterIcon,
reinterpret_cast<void*>(&GameHooks::Hooked_RegisterIcon),
reinterpret_cast<void**>(&GameHooks::Original_RegisterIcon)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook PreStitchedTextureMap::registerIcon");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked PreStitchedTextureMap::registerIcon (mod icon lookup)");
// Pass the trampoline to ModAtlas so it can look up vanilla icons
// for copying internal state (field_0x48 source image pointer).
ModAtlas::SetRegisterIconFn(GameHooks::Original_RegisterIcon);
}
}
}
else if (symbols.pLoadUVs)
{
LogUtil::Log("[WeaveLoader] Mod texture injection unavailable: SimpleIcon/operator new not resolved");
}
if (symbols.pCreativeStaticCtor)
{
CreativeInventory::ResolveSymbols(const_cast<SymbolResolver&>(symbols));
if (MH_CreateHook(symbols.pCreativeStaticCtor,
reinterpret_cast<void*>(&GameHooks::Hooked_CreativeStaticCtor),
reinterpret_cast<void**>(&GameHooks::Original_CreativeStaticCtor)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook CreativeStaticCtor");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked CreativeStaticCtor");
}
}
if (symbols.pMainMenuCustomDraw)
{
if (MH_CreateHook(symbols.pMainMenuCustomDraw,
reinterpret_cast<void*>(&GameHooks::Hooked_MainMenuCustomDraw),
reinterpret_cast<void**>(&GameHooks::Original_MainMenuCustomDraw)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook MainMenuCustomDraw");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked MainMenuCustomDraw");
}
}
if (symbols.pPresent)
{
MainMenuOverlay::ResolveSymbols(const_cast<SymbolResolver&>(symbols));
if (MH_CreateHook(symbols.pPresent,
reinterpret_cast<void*>(&GameHooks::Hooked_Present),
reinterpret_cast<void**>(&GameHooks::Original_Present)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook C4JRender::Present");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked C4JRender::Present");
}
}
if (symbols.pGetString)
{
// Read GetString prologue bytes BEFORE MinHook overwrites them.
ModStrings::CaptureStringTableRef(symbols.pGetString);
if (MH_CreateHook(symbols.pGetString,
reinterpret_cast<void*>(&GameHooks::Hooked_GetString),
reinterpret_cast<void**>(&GameHooks::Original_GetString)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook CMinecraftApp::GetString (mod names unavailable)");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked CMinecraftApp::GetString (mod localization)");
}
}
if (symbols.pGetResourceAsStream)
{
if (MH_CreateHook(symbols.pGetResourceAsStream,
reinterpret_cast<void*>(&GameHooks::Hooked_GetResourceAsStream),
reinterpret_cast<void**>(&GameHooks::Original_GetResourceAsStream)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook InputStream::getResourceAsStream (mod atlas unavailable)");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked InputStream::getResourceAsStream (mod textures)");
}
}
{
void* pOutputDbgStr = reinterpret_cast<void*>(
GetProcAddress(GetModuleHandleA("kernel32.dll"), "OutputDebugStringA"));
if (pOutputDbgStr)
{
if (MH_CreateHook(pOutputDbgStr,
reinterpret_cast<void*>(&GameHooks::Hooked_OutputDebugStringA),
reinterpret_cast<void**>(&GameHooks::Original_OutputDebugStringA)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook OutputDebugStringA");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked OutputDebugStringA (game log capture)");
}
}
}
if (MH_EnableHook(MH_ALL_HOOKS) != MH_OK)
{
LogUtil::Log("[WeaveLoader] MH_EnableHook(MH_ALL_HOOKS) failed");
return false;
}
LogUtil::Log("[WeaveLoader] All hooks installed and enabled");
return true;
}
void HookManager::Cleanup()
{
MH_DisableHook(MH_ALL_HOOKS);
MH_Uninitialize();
}