Skip to content

Commit 7bd706e

Browse files
committed
fix: fix onMobHurt crash again
1 parent 0833b7e commit 7bd706e

File tree

2 files changed

+23
-22
lines changed

2 files changed

+23
-22
lines changed

src/legacy/api/EventAPI.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ void EnableEventListener(int eventId) {
528528
case EVENT_TYPES::onMobHurt:
529529
bus.emplaceListener<ActorHurtEvent>([](ActorHurtEvent& ev) {
530530
IF_LISTENED(EVENT_TYPES::onMobHurt) {
531-
if (ev.self().isType(ActorType::Mob)) {
531+
if (ev.self().hasType(ActorType::Mob)) {
532532
Actor* damageSource;
533533
if (ev.source().isEntitySource()) {
534534
if (ev.source().isChildEntitySource()) {

src/lse/events/EventHooks.cpp

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "legacy/api/ItemAPI.h"
88
#include "legacy/api/PlayerAPI.h"
99
#include "ll/api/service/Bedrock.h"
10+
#include "mc/entity/utilities/ActorDamageCause.h"
1011
#include "mc/server/ServerPlayer.h"
1112
#include "mc/server/commands/CommandOrigin.h"
1213
#include "mc/server/commands/CommandOriginType.h"
@@ -1152,34 +1153,34 @@ LL_TYPE_INSTANCE_HOOK(
11521153
MobHurtEffectHook,
11531154
HookPriority::Normal,
11541155
Mob,
1155-
"?hurtEffects@Mob@@UEAAXAEBVActorDamageSource@@M_N1@Z",
1156-
bool,
1156+
&Mob::getDamageAfterResistanceEffect,
1157+
float,
11571158
ActorDamageSource const& source,
1158-
float damage,
1159-
bool knock,
1160-
bool ignite
1159+
float damage
11611160
) {
11621161
IF_LISTENED(EVENT_TYPES::onMobHurt) {
1163-
Actor* damageSource;
1164-
if (source.isEntitySource()) {
1165-
if (source.isChildEntitySource()) {
1166-
damageSource = ll::service::getLevel()->fetchEntity(source.getEntityUniqueID());
1167-
} else {
1168-
damageSource = ll::service::getLevel()->fetchEntity(source.getDamagingEntityUniqueID());
1162+
if (source.getCause() == ActorDamageCause::Magic || source.getCause() == ActorDamageCause::Wither) {
1163+
Actor* damageSource;
1164+
if (source.isEntitySource()) {
1165+
if (source.isChildEntitySource()) {
1166+
damageSource = ll::service::getLevel()->fetchEntity(source.getEntityUniqueID());
1167+
} else {
1168+
damageSource = ll::service::getLevel()->fetchEntity(source.getDamagingEntityUniqueID());
1169+
}
11691170
}
1170-
}
11711171

1172-
CallEventRtnValue(
1173-
EVENT_TYPES::onMobHurt,
1174-
false,
1175-
EntityClass::newEntity(this),
1176-
damageSource ? EntityClass::newEntity(damageSource) : Local<Value>(),
1177-
Number::newNumber(damage),
1178-
Number::newNumber((int)source.getCause())
1179-
);
1172+
CallEventRtnValue(
1173+
EVENT_TYPES::onMobHurt,
1174+
0.0f,
1175+
EntityClass::newEntity(this),
1176+
damageSource ? EntityClass::newEntity(damageSource) : Local<Value>(),
1177+
Number::newNumber(damage < 0.0f ? -damage : damage),
1178+
Number::newNumber((int)source.getCause())
1179+
);
1180+
}
11801181
}
11811182
IF_LISTENED_END(EVENT_TYPES::onMobHurt)
1182-
return origin(source, damage, knock, ignite);
1183+
return origin(source, damage);
11831184
}
11841185

11851186
void PlayerStartDestroyBlock() { PlayerStartDestroyHook::hook(); }

0 commit comments

Comments
 (0)