修复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 /////////////////// /////////////////// BlockExploded ///////////////////
// 没有这个符号 // block::onExploded实际是调用以下其中之一
// TInstanceHook(void, "?onExploded@Block@@QEBAXAEAVBlockSource@@AEBVBlockPos@@PEAVActor@@@Z", // StairBlock
// Block, BlockSource* bs, BlockPos* bp, Actor* actor) { TInstanceHook(void, "onExploded@StairBlock@@UEBAXAEAVBlockSource@@AEBVBlockPos@@PEAVActor@@@Z",
// IF_LISTENED(BlockExplodedEvent) { Block, BlockSource* bs, BlockPos* bp, Actor* actor) {
// if (actor) { IF_LISTENED(BlockExplodedEvent) {
// BlockExplodedEvent ev{}; if (actor) {
// ev.mBlockInstance = BlockInstance::createBlockInstance(this, *bp, bs->getDimensionId()); BlockExplodedEvent ev{};
// ev.mExplodeSource = actor; ev.mBlockInstance = BlockInstance::createBlockInstance(this, *bp, bs->getDimensionId());
// ev.call(); ev.mExplodeSource = actor;
// } ev.call();
// } }
// IF_LISTENED_END(BlockExplodedEvent) }
// return original(this, bs, bp, actor); 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 /////////////////// /////////////////// FireSpread ///////////////////