|
14 | 14 | #include <list> |
15 | 15 | #include <shared_mutex> |
16 | 16 |
|
| 17 | +#include "EntityAPI.h" |
17 | 18 | #include "ll/api/event/EventBus.h" |
18 | 19 | #include "ll/api/event/player/PlayerChatEvent.h" |
19 | 20 | #include "ll/api/event/player/PlayerConnectEvent.h" |
| 21 | +#include "ll/api/event/player/PlayerDieEvent.h" |
20 | 22 | #include "ll/api/event/player/PlayerJoinEvent.h" |
21 | 23 | #include "ll/api/event/player/PlayerLeaveEvent.h" |
22 | 24 | #include "mc/world/actor/player/Player.h" |
| 25 | +#include "mc/world/level/dimension/Dimension.h" |
23 | 26 |
|
24 | 27 | //////////////////// Listeners //////////////////// |
25 | 28 |
|
@@ -314,6 +317,7 @@ bool LLSECallEventsOnHotUnload(ScriptEngine *engine) { |
314 | 317 |
|
315 | 318 | //////////////////// Events //////////////////// |
316 | 319 |
|
| 320 | +// Todo |
317 | 321 | void EnableEventListener(int eventId) { |
318 | 322 | using namespace ll::event; |
319 | 323 | EventBus &bus = EventBus::getInstance(); |
@@ -406,18 +410,21 @@ void EnableEventListener(int eventId) { |
406 | 410 | // }); |
407 | 411 | // break; |
408 | 412 |
|
409 | | - // case EVENT_TYPES::onPlayerDie: |
410 | | - // Event::PlayerDieEvent::subscribe([](const PlayerDieEvent &ev) { |
411 | | - // IF_LISTENED(EVENT_TYPES::onPlayerDie) { |
412 | | - // Actor *source = ev.mDamageSource->getEntity(); |
413 | | - // CallEvent(EVENT_TYPES::onPlayerDie, |
414 | | - // PlayerClass::newPlayer(ev.mPlayer), |
415 | | - // (source ? EntityClass::newEntity(source) : |
416 | | - // Local<Value>())); |
417 | | - // } |
418 | | - // IF_LISTENED_END(EVENT_TYPES::onPlayerDie); |
419 | | - // }); |
420 | | - // break; |
| 413 | + case EVENT_TYPES::onPlayerDie: |
| 414 | + bus.emplaceListener<ll::event::PlayerDieEvent>( |
| 415 | + [](ll::event::PlayerDieEvent &ev) { |
| 416 | + IF_LISTENED(EVENT_TYPES::onPlayerDie) { |
| 417 | + Actor *source = |
| 418 | + ll::service::getLevel() |
| 419 | + ->getDimension(ev.self().getDimensionId()) |
| 420 | + ->fetchEntity(ev.source().getEntityUniqueID(), false); |
| 421 | + CallEvent( |
| 422 | + EVENT_TYPES::onPlayerDie, PlayerClass::newPlayer(&ev.self()), |
| 423 | + (source ? EntityClass::newEntity(source) : Local<Value>())); |
| 424 | + } |
| 425 | + IF_LISTENED_END(EVENT_TYPES::onPlayerDie); |
| 426 | + }); |
| 427 | + break; |
421 | 428 |
|
422 | 429 | // case EVENT_TYPES::onRespawn: |
423 | 430 | // Event::PlayerRespawnEvent::subscribe([](const PlayerRespawnEvent &ev) { |
|
0 commit comments