mirror of
https://github.com/quizhizhe/LiteLoaderBDS-1.16.40.git
synced 2025-06-01 19:53:41 +00:00
修复ProjectileHitBlock
事件
This commit is contained in:
parent
d4632e915f
commit
1f2e7e5516
@ -1027,23 +1027,39 @@ TClasslessInstanceHook(bool, "?mayPlace@FireBlock@@UEBA_NAEAVBlockSource@@AEBVBl
|
||||
|
||||
|
||||
/////////////////// ProjectileHitBlock ///////////////////
|
||||
// 没有这个符号
|
||||
// TInstanceHook(void, "?onProjectileHit@Block@@QEBAXAEAVBlockSource@@AEBVBlockPos@@AEBVActor@@@Z",
|
||||
// Block, BlockSource* bs, BlockPos* bp, Actor* actor) {
|
||||
// // Exclude default position BlockPos::Zero
|
||||
// if ((bp->x | bp->y | bp->z) == 0) // actor->getPos().distanceTo(bp->center())>5)
|
||||
// return original(this, bs, bp, actor);
|
||||
// IF_LISTENED(ProjectileHitBlockEvent) {
|
||||
// if (this->getTypeName() != "minecraft:air") {
|
||||
// ProjectileHitBlockEvent ev{};
|
||||
// ev.mBlockInstance = Level::getBlockInstance(bp, bs);
|
||||
// ev.mSource = actor;
|
||||
// ev.call();
|
||||
// }
|
||||
// }
|
||||
// IF_LISTENED_END(ProjectileHitBlockEvent)
|
||||
// return original(this, bs, bp, actor);
|
||||
// }
|
||||
// Block::onProjectileHit实际是调用以下其中之一
|
||||
TInstanceHook(void, "?onProjectileHit@TargetBlock@@UEBAXAEAVBlockSource@@AEBVBlockPos@@AEBVActor@@@Z",
|
||||
Block, BlockSource* bs, BlockPos* bp, Actor* actor) {
|
||||
// Exclude default position BlockPos::Zero
|
||||
if ((bp->x | bp->y | bp->z) == 0) // actor->getPos().distanceTo(bp->center())>5)
|
||||
return original(this, bs, bp, actor);
|
||||
IF_LISTENED(ProjectileHitBlockEvent) {
|
||||
if (this->getTypeName() != "minecraft:air") {
|
||||
ProjectileHitBlockEvent ev{};
|
||||
ev.mBlockInstance = Level::getBlockInstance(bp, bs);
|
||||
ev.mSource = actor;
|
||||
ev.call();
|
||||
}
|
||||
}
|
||||
IF_LISTENED_END(ProjectileHitBlockEvent)
|
||||
return original(this, bs, bp, actor);
|
||||
}
|
||||
|
||||
TInstanceHook(void, "??onProjectileHit@BellBlock@@UEBAXAEAVBlockSource@@AEBVBlockPos@@AEBVActor@@@Z",
|
||||
Block, BlockSource* bs, BlockPos* bp, Actor* actor) {
|
||||
if ((bp->x | bp->y | bp->z) == 0)
|
||||
return original(this, bs, bp, actor);
|
||||
IF_LISTENED(ProjectileHitBlockEvent) {
|
||||
if (this->getTypeName() != "minecraft:air") {
|
||||
ProjectileHitBlockEvent ev{};
|
||||
ev.mBlockInstance = Level::getBlockInstance(bp, bs);
|
||||
ev.mSource = actor;
|
||||
ev.call();
|
||||
}
|
||||
}
|
||||
IF_LISTENED_END(ProjectileHitBlockEvent)
|
||||
return original(this, bs, bp, actor);
|
||||
}
|
||||
|
||||
|
||||
/////////////////// RedStoneUpdate ///////////////////
|
||||
|
Loading…
Reference in New Issue
Block a user