fix(world): preserve block data during chunk remap

This commit is contained in:
Jacobwasbeast
2026-03-11 21:54:40 -05:00
parent d4f7603390
commit a481822593
7 changed files with 139 additions and 7 deletions

View File

@@ -25,6 +25,8 @@ bool HookManager::Install(const SymbolResolver& symbols)
WorldIdRemap::SetLevelChunkTileSymbols(
symbols.Level.pLevelChunkGetTile,
symbols.Level.pLevelChunkSetTile,
symbols.Level.pLevelChunkGetData,
symbols.Level.pLevelChunkSetTileAndData,
symbols.Level.pLevelChunkGetPos,
symbols.Level.pLevelChunkGetHighestNonEmptyY);
WorldIdRemap::SetCompressedTileStorageSetSymbol(symbols.Level.pCompressedTileStorageSet);
@@ -112,6 +114,34 @@ bool HookManager::Install(const SymbolResolver& symbols)
}
}
if (symbols.Entity.pServerPlayerGameModeUseItemOn)
{
if (MH_CreateHook(symbols.Entity.pServerPlayerGameModeUseItemOn,
reinterpret_cast<void*>(&GameHooks::Hooked_ServerPlayerGameModeUseItemOn),
reinterpret_cast<void**>(&GameHooks::Original_ServerPlayerGameModeUseItemOn)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook ServerPlayerGameMode::useItemOn");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked ServerPlayerGameMode::useItemOn (placement tracking)");
}
}
if (symbols.Entity.pMultiPlayerGameModeUseItemOn)
{
if (MH_CreateHook(symbols.Entity.pMultiPlayerGameModeUseItemOn,
reinterpret_cast<void*>(&GameHooks::Hooked_MultiPlayerGameModeUseItemOn),
reinterpret_cast<void**>(&GameHooks::Original_MultiPlayerGameModeUseItemOn)) != MH_OK)
{
LogUtil::Log("[WeaveLoader] Warning: Failed to hook MultiPlayerGameMode::useItemOn");
}
else
{
LogUtil::Log("[WeaveLoader] Hooked MultiPlayerGameMode::useItemOn (placement tracking)");
}
}
if (symbols.Item.pItemInstanceUseOn)
{
if (MH_CreateHook(symbols.Item.pItemInstanceUseOn,