修复BlockExploded事件

This commit is contained in:
Qiuzhizhe 2023-03-18 06:36:37 -07:00
parent a73afd9fe9
commit b14f5fe505

View File

@ -926,20 +926,49 @@ TClasslessInstanceHook(unsigned short,
}
/////////////////// BlockExploded ///////////////////
// 没有这个符号
// TInstanceHook(void, "?onExploded@Block@@QEBAXAEAVBlockSource@@AEBVBlockPos@@PEAVActor@@@Z",
// Block, BlockSource* bs, BlockPos* bp, Actor* actor) {
// IF_LISTENED(BlockExplodedEvent) {
// if (actor) {
// BlockExplodedEvent ev{};
// ev.mBlockInstance = BlockInstance::createBlockInstance(this, *bp, bs->getDimensionId());
// ev.mExplodeSource = actor;
// ev.call();
// }
// }
// IF_LISTENED_END(BlockExplodedEvent)
// return original(this, bs, bp, actor);
// }
// block::onExploded实际是调用以下其中之一
// StairBlock
TInstanceHook(void, "onExploded@StairBlock@@UEBAXAEAVBlockSource@@AEBVBlockPos@@PEAVActor@@@Z",
Block, BlockSource* bs, BlockPos* bp, Actor* actor) {
IF_LISTENED(BlockExplodedEvent) {
if (actor) {
BlockExplodedEvent ev{};
ev.mBlockInstance = BlockInstance::createBlockInstance(this, *bp, bs->getDimensionId());
ev.mExplodeSource = actor;
ev.call();
}
}
IF_LISTENED_END(BlockExplodedEvent)
return original(this, bs, bp, actor);
}
//TntBlock
TInstanceHook(void, "?onExploded@TntBlock@@UEBAXAEAVBlockSource@@AEBVBlockPos@@PEAVActor@@@Z",
Block, BlockSource* bs, BlockPos* bp, Actor* actor) {
IF_LISTENED(BlockExplodedEvent) {
if (actor) {
BlockExplodedEvent ev{};
ev.mBlockInstance = BlockInstance::createBlockInstance(this, *bp, bs->getDimensionId());
ev.mExplodeSource = actor;
ev.call();
}
}
IF_LISTENED_END(BlockExplodedEvent)
return original(this, bs, bp, actor);
}
//TopSnowBlock
TInstanceHook(void, "?onExploded@TopSnowBlock@@UEBAXAEAVBlockSource@@AEBVBlockPos@@PEAVActor@@@Z",
Block, BlockSource* bs, BlockPos* bp, Actor* actor) {
IF_LISTENED(BlockExplodedEvent) {
if (actor) {
BlockExplodedEvent ev{};
ev.mBlockInstance = BlockInstance::createBlockInstance(this, *bp, bs->getDimensionId());
ev.mExplodeSource = actor;
ev.call();
}
}
IF_LISTENED_END(BlockExplodedEvent)
return original(this, bs, bp, actor);
}
/////////////////// FireSpread ///////////////////