Skip to content

[Bug] ActorHurtEvent 无法监听到实体受伤 #1747

@engsr6982

Description

@engsr6982

Describe the bug

mod 监听了 ActorHurtEvent 事件,玩家、实体受伤时,事件监听器并未未执行。

经过测试,发现和问题 #1664 有关 (Actor::hurt 更换为 Actor::_hurt)

测试回滚 hook 点位后正常监听到了事件触发。

村民受伤依旧无法监听到


  • 回滚后正常触发
LL_AUTO_TYPE_INSTANCE_HOOK(
    ActorHurtEventHook,
    HookPriority::Normal,
    Actor,
    &Actor::hurt,
    bool,
    ActorDamageSource const& source,
    float                    damage,
    bool                     knock,
    bool                     ignite
) {
    auto logger = &land::PLand::getInstance().getSelf().getLogger();
    EVENT_TRACE("ActorHurtEventHook", "LOG", "Actor hurt hook called");

    auto ev = ll::event::ActorHurtEvent(*this, source, damage, knock, ignite);
    ll::event::EventBus::getInstance().publish(ev);
    if (ev.isCancelled()) {
        return false;
    }
    return origin(source, damage, knock, ignite);
}
45:27.737 TRACE [PLand] [src\pland\hooks\hook\ActorHurtHook.cc:24|ActorHurtEventHook|LOG] Actor hurt hook called
21:45:27.737 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:67|ActorHurtEvent|PASS] land not found or permission allowed
21:45:29.872 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ll.cc:366|PlayerAttackEvent|LOG] player=engsr6982, target=minecraft:spider, pos=Vec3(16.0001,1,42.9335)
21:45:29.872 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ll.cc:370|PlayerAttackEvent|PASS] land not found or permission allowed
21:45:29.872 TRACE [PLand] [src\pland\hooks\hook\ActorHurtHook.cc:24|ActorHurtEventHook|LOG] Actor hurt hook called
21:45:29.872 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:67|ActorHurtEvent|PASS] land not found or permission allowed

  • 未回滚的 mod 代码:
    RegisterListenerIf(Config::cfg.listeners.ActorHurtEvent, [&]() {
        return bus->emplaceListener<ll::event::ActorHurtEvent>([db, logger](ll::event::ActorHurtEvent& ev) {
            auto& actor  = ev.self();
            auto& source = ev.source();

            if (source.getEntityType() != ActorType::Player) {
                EVENT_TRACE("ActorHurtEvent", EVENT_TRACE_SKIP, "non-player damage");
                return; // skip non-player damage
            }

            auto sourcePlayer = actor.getLevel().getPlayer(source.getEntityUniqueID());
            if (!sourcePlayer) {
                EVENT_TRACE("ActorHurtEvent", EVENT_TRACE_PASS, "source player not found");
                return;
            }

            auto land = db->getLandAt(actor.getPosition(), actor.getDimensionId());
            if (PreCheckLandExistsAndPermission(land, sourcePlayer->getUuid())) {
                EVENT_TRACE("ActorHurtEvent", EVENT_TRACE_PASS, "land not found or permission allowed");
                return;
            }

            auto const& typeName = actor.getTypeName();
            auto const& tab      = land->getPermTable();

            if (actor.isPlayer()) {
                CANCEL_AND_RETURN_IF(
                    !tab.allowPlayerDamage,
                    EVENT_TRACE("ActorHurtEvent", EVENT_TRACE_CANCEL, "allowPlayerDamage denied")
                );
            } else if (Config::cfg.protection.mob.hostileMobTypeNames.contains(typeName)) {
                CANCEL_AND_RETURN_IF(
                    !tab.allowMonsterDamage,
                    EVENT_TRACE("ActorHurtEvent", EVENT_TRACE_CANCEL, "allowMonsterDamage denied")
                );
            } else if (Config::cfg.protection.mob.specialMobTypeNames.contains(typeName)) {
                CANCEL_AND_RETURN_IF(
                    !tab.allowSpecialDamage,
                    EVENT_TRACE("ActorHurtEvent", EVENT_TRACE_CANCEL, "allowSpecialDamage denied")
                );
            } else if (Config::cfg.protection.mob.passiveMobTypeNames.contains(typeName)) {
                CANCEL_AND_RETURN_IF(
                    !tab.allowPassiveDamage,
                    EVENT_TRACE("ActorHurtEvent", EVENT_TRACE_CANCEL, "allowPassiveDamage denied")
                );
            } else if (Config::cfg.protection.mob.customSpecialMobTypeNames.contains(typeName)) {
                CANCEL_AND_RETURN_IF(
                    !tab.allowCustomSpecialDamage,
                    EVENT_TRACE("ActorHurtEvent", EVENT_TRACE_CANCEL, "allowCustomSpecialDamage denied")
                );
            }
        });
    });

测试控制台并未有任何 ActorHurtEvent 相关字样输出

21:31:41.226 INFO [LeviLamina] 正在加载 iListenAttentively v0.7.0
21:31:41.384 INFO [LeviLamina] iListenAttentively 已加载
21:31:41.384 INFO [LeviLamina] 正在加载 PLand v0.13.0
21:31:41.540 INFO [PLand]   _____   _                        _ 
21:31:41.540 INFO [PLand]  |  __ \ | |                      | |
21:31:41.540 INFO [PLand]  | |__) || |      __ _  _ __    __| |
21:31:41.540 INFO [PLand]  |  ___/ | |     / _` || '_ \  / _` |
21:31:41.540 INFO [PLand]  | |     | |____| (_| || | | || (_| |
21:31:41.540 INFO [PLand]  |_|     |______|\__,_||_| |_| \__,_|
21:31:41.540 INFO [PLand]
21:31:41.540 INFO [PLand] Loading...
21:31:41.540 WARN [PLand] Version: [Snapshot] v0.13.0-15e2ee4+16
21:31:41.540 WARN [PLand] 您当前正在使用开发快照版本,此版本可能某些功能异常、损坏、甚至导致崩溃,请勿在生产环境
中使用。
21:31:41.540 WARN [PLand] You are using a development snapshot version, this version may have some abnormal, broken or even crash functions, please do not use it in production environment.
21:31:41.564 INFO [PLand] 已加载 1 位操作员
21:31:41.565 INFO [PLand] 已加载 1 位玩家的设置
21:31:41.571 INFO [PLand] 已加载 3 块领地数据
21:31:41.572 INFO [PLand] 已加载模板权限表
21:31:41.572 INFO [PLand] 初始化维度区块映射完成
21:31:41.572 DEBUG [PLand] using internals::EmtpyInterface
21:31:41.575 WARN [PLand] Debug Mode
21:31:41.575 INFO [LeviLamina] PLand 已加载
21:31:41.575 INFO [LeviLamina] 已加载 5 个模组
21:31:41.612 INFO [Server] setting up server logging...
21:31:41.612 INFO [Server] Starting Server
21:31:41.612 INFO [Server] Version: 1.21.93.1(ProtocolVersion 819) with LeviLamina-1.4.1
21:31:41.612 INFO [Server] Session ID: 83f076ac-cfe5-4664-b5a2-ad858eb3c2ba
21:31:41.612 INFO [Server] Build ID: 34699809
21:31:41.612 INFO [Server] Branch: r/21_u9
21:31:41.612 INFO [Server] Commit ID: b7557d74f35ab147554df05f6eb2ff4c5a217be2
21:31:41.612 INFO [Server] Configuration: Publish
21:31:41.613 INFO [Server] Level Name: Bedrock level
21:31:42.177 INFO [Server] No CDN config file found for dedicated server
21:31:42.177 INFO [Server] Game mode: 0 Survival
21:31:42.177 INFO [Server] Difficulty: 1 EASY
21:31:42.177 INFO [Server] Content logging to console is enabled.
21:31:42.177 INFO [Server] AuthHelper loading cert AppCertificate.pfx
21:31:42.177 WARN [Server] <LVL|4> AuthHelper could not find cert
21:31:42.757 INFO [Server] Opening level 'worlds/Bedrock level/db'
21:31:42.931 INFO [Server] [SERVER] Pack Stack - None
21:31:45.319 INFO [Server] IPv4 supported, port: 19132: Used for gameplay and LAN discovery
21:31:45.319 INFO [Server] IPv6 supported, port: 19133: Used for gameplay
21:31:45.453 INFO [Server] Server started in (4.7s)! For help, type "help" or "?"
21:31:45.453 INFO [Server] ================ TELEMETRY MESSAGE ===================
21:31:45.453 INFO [Server] Server Telemetry is currently not enabled.
21:31:45.453 INFO [Server] Enabling this telemetry helps us improve the game.
21:31:45.453 INFO [Server] To enable this feature, add the line 'emit-server-telemetry=true'
21:31:45.453 INFO [Server] to the server.properties file in the handheld/src-server directory
21:31:45.453 INFO [Server] ======================================================
21:31:45.467 WARN [CrashLogger] 检测到附加的调试器,崩溃记录器将不会被启用
21:31:45.467 INFO [LeviLamina] 正在启用模组……
21:31:45.467 INFO [LeviLamina] 正在启用 DebugShape v0.2.0
21:31:45.467 INFO [LeviLamina] 正在启用 more-dimensions v0.9.0
21:31:45.467 INFO [more-dimensions] Enabling...
21:31:45.467 INFO [LeviLamina] 正在启用 PlotX v0.0.0
21:31:45.612 INFO [LeviLamina] 正在启用 iListenAttentively v0.7.0
21:31:45.612 INFO [LeviLamina] 正在启用 PLand v0.13.0
21:31:47.666 INFO [LeviLamina] 5 个模组在 (2.2秒) 内启用
21:31:57.362 INFO [Server] Player connected: engsr6982, xuid: 2535457668222696
21:31:58.583 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(96.49,1,102.49)
21:31:58.584 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:31:58.584 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(96.49,1,102.49)
21:31:58.584 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:31:58.972 INFO [Server] Player Spawned: engsr6982 xuid: 2535457668222696, pfid: 73c99b0d7bb44e8d
21:31:59.982 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(80.49,1,58.49)
21:31:59.982 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:44|SpawnedMobEvent|CANCEL] mob despawned
21:32:00.577 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(65.49,1,123.49)
21:32:00.577 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:32:03.630 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(41.49,1,63.49)
21:32:03.630 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:32:11.775 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(35.49,1,69.49)
21:32:11.775 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:32:14.847 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ll.cc:366|PlayerAttackEvent|LOG] player=engsr6982, target=minecraft:trader_llama, pos=Vec3(66.9054,1,90.8333)
21:32:14.847 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ll.cc:370|PlayerAttackEvent|PASS] land not found or permission allowed      
21:32:19.077 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(24.49,1,88.49)
21:32:19.077 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:32:19.077 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(24.49,1,88.49)
21:32:19.077 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:32:22.178 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(28.49,1,108.49)
21:32:22.178 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:32:30.472 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:28|SpawnedMobEvent|SKIP] mob not found
21:32:30.722 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(106.49,1,88.49)
21:32:30.722 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:32:37.731 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(81.49,1,60.49)
21:32:37.731 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:44|SpawnedMobEvent|CANCEL] mob despawned
21:32:38.230 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(87.49,1,131.49)
21:32:38.230 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:32:43.524 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(103.49,1,151.49)
21:32:43.524 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:32:46.875 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:117|PlayerDropItemEvent|LOG] player=engsr6982
21:32:46.875 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:121|PlayerDropItemEvent|PASS] land not found or permission allowed
21:32:46.875 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:117|PlayerDropItemEvent|LOG] player=engsr6982
21:32:46.875 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:121|PlayerDropItemEvent|PASS] land not found or permission allowed   
21:32:46.875 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:117|PlayerDropItemEvent|LOG] player=engsr6982
21:32:46.875 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:121|PlayerDropItemEvent|PASS] land not found or permission allowed   
21:32:46.875 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:117|PlayerDropItemEvent|LOG] player=engsr6982
21:32:46.875 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:121|PlayerDropItemEvent|PASS] land not found or permission allowed   
21:32:46.876 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:117|PlayerDropItemEvent|LOG] player=engsr6982
21:32:46.876 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:121|PlayerDropItemEvent|PASS] land not found or permission allowed   
21:32:46.876 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:117|PlayerDropItemEvent|LOG] player=engsr6982
21:32:46.876 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:121|PlayerDropItemEvent|PASS] land not found or permission allowed   
21:32:46.876 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:117|PlayerDropItemEvent|LOG] player=engsr6982
21:32:46.876 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:121|PlayerDropItemEvent|PASS] land not found or permission allowed   
21:32:46.876 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:117|PlayerDropItemEvent|LOG] player=engsr6982
21:32:46.876 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:121|PlayerDropItemEvent|PASS] land not found or permission allowed   
21:32:46.876 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:117|PlayerDropItemEvent|LOG] player=engsr6982
21:32:46.876 TRACE [PLand] [src\pland\hooks\listeners\PlayerListeners.ila.cc:121|PlayerDropItemEvent|PASS] land not found or permission allowed   
21:32:47.576 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(128.49,1,117.49)
21:32:47.577 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:33:03.131 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(111.49,1,164.49)
21:33:03.131 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:33:15.532 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(122.49,1,161.49)
21:33:15.532 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:33:15.532 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(122.49,1,161.49)
21:33:15.532 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:33:34.379 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:32|SpawnedMobEvent|LOG] position=Vec3(96.49,1,164.49)
21:33:34.379 TRACE [PLand] [src\pland\hooks\listeners\EntityListeners.ll.cc:36|SpawnedMobEvent|PASS] land not found or permission allowed
21:33:36.894 INFO [Server] Server stop requested.
21:33:36.916 INFO [Server] Stopping server...

To Reproduce

监听事件,对实体造成伤害

Expected behavior

正常监听

Screenshots

No response

Platform

win10

Version

1.21.93.1(ProtocolVersion 819) with LeviLamina-1.4.1

Additional context

engsr6982/PLand#140

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions