feat(modloader): add item use and summon APIs

Add managed item use hooks, server-authoritative summon support, and side-aware use item context.

Include IdHelper mappings, example ruby wand usage, and related runtime/crash-handler updates.
This commit is contained in:
Jacobwasbeast
2026-03-07 19:54:52 -06:00
parent eabf8fe858
commit 0b4c87acbc
21 changed files with 1862 additions and 45 deletions

View File

@@ -54,6 +54,20 @@ bool HookManager::Install(const SymbolResolver& symbols)
LogUtil::Log("[WeaveLoader] Hooked Minecraft::init");
}
if (symbols.pMinecraftSetLevel)
{
if (MH_CreateHook(symbols.pMinecraftSetLevel,
reinterpret_cast<void*>(&GameHooks::Hooked_MinecraftSetLevel),
reinterpret_cast<void**>(&GameHooks::Original_MinecraftSetLevel)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook Minecraft::setLevel");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked Minecraft::setLevel (active level tracking)");
}
}
if (symbols.pItemInstanceMineBlock)
{
if (MH_CreateHook(symbols.pItemInstanceMineBlock,
@@ -110,6 +124,34 @@ bool HookManager::Install(const SymbolResolver& symbols)
}
}
if (symbols.pServerPlayerGameModeUseItem)
{
if (MH_CreateHook(symbols.pServerPlayerGameModeUseItem,
reinterpret_cast<void*>(&GameHooks::Hooked_ServerPlayerGameModeUseItem),
reinterpret_cast<void**>(&GameHooks::Original_ServerPlayerGameModeUseItem)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook ServerPlayerGameMode::useItem");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked ServerPlayerGameMode::useItem (managed item callbacks)");
}
}
if (symbols.pMultiPlayerGameModeUseItem)
{
if (MH_CreateHook(symbols.pMultiPlayerGameModeUseItem,
reinterpret_cast<void*>(&GameHooks::Hooked_MultiPlayerGameModeUseItem),
reinterpret_cast<void**>(&GameHooks::Original_MultiPlayerGameModeUseItem)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook MultiPlayerGameMode::useItem");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked MultiPlayerGameMode::useItem (managed item callbacks)");
}
}
GameHooks::SetAtlasLocationPointers(symbols.pTextureAtlasLocationBlocks, symbols.pTextureAtlasLocationItems);
if (symbols.pTexturesBindTextureResource)
@@ -207,6 +249,20 @@ bool HookManager::Install(const SymbolResolver& symbols)
GameObjectFactory::ResolveSymbols(const_cast<SymbolResolver&>(symbols));
FurnaceRecipeRegistry::ResolveSymbols(const_cast<SymbolResolver&>(symbols));
GameHooks::SetSummonSymbols(
symbols.pLevelAddEntity,
symbols.pEntityIONewById,
symbols.pEntityMoveTo,
symbols.pEntitySetPos);
GameHooks::SetUseActionSymbols(
symbols.pInventoryRemoveResource,
symbols.pInventoryVtable,
symbols.pItemInstanceHurtAndBreak,
symbols.pAbstractContainerMenuBroadcastChanges,
symbols.pEntityGetLookAngle,
symbols.pLivingEntityGetViewVector,
symbols.pEntityLerpMotion,
symbols.pEntitySetPos);
if (symbols.pLoadUVs && symbols.pSimpleIconCtor && symbols.pOperatorNew)
{