@@ -370,6 +370,44 @@ LL_TYPE_INSTANCE_HOOK(
370370 origin (originalActor, transformed, transformation, ownerID, level);
371371}
372372
373+ LL_TYPE_INSTANCE_HOOK (
374+ ActorDestroyBlockEventHook,
375+ HookPriority::Normal,
376+ ActorEventCoordinator,
377+ &ActorEventCoordinator::sendEvent,
378+ CoordinatorResult,
379+ EventRef<ActorGameplayEvent<CoordinatorResult>> const & event
380+ )
381+ try {
382+ return event.get ().visit ([&](auto && arg) {
383+ if constexpr (std::is_same_v<std::decay_t <decltype (arg)>, Details::ValueOrRef<ActorGriefingBlockEvent const >>) {
384+ auto & griefingEvent = arg.value ();
385+
386+ if (auto entity = griefingEvent.mActorContext ->tryUnwrap (); entity && entity->isType (ActorType::EnderMan)) {
387+ IF_LISTENED (EVENT_TYPES::onEndermanTakeBlock) {
388+ if (!CallEvent (
389+ EVENT_TYPES::onEndermanTakeBlock,
390+ EntityClass::newEntity (entity.as_ptr ()),
391+ BlockClass::newBlock (
392+ *griefingEvent.mBlock ,
393+ BlockPos (griefingEvent.mPos ),
394+ entity->getDimensionId ()
395+ ),
396+ IntPos::newPos (BlockPos (griefingEvent.mPos ), entity->getDimensionId ())
397+ )) {
398+ return CoordinatorResult::Cancel;
399+ }
400+ }
401+ IF_LISTENED_END (EVENT_TYPES::onEndermanTakeBlock);
402+ }
403+ return CoordinatorResult::Continue;
404+ }
405+ return origin (event);
406+ });
407+ } catch (...) {
408+ return origin (event);
409+ }
410+
373411void ProjectileSpawnEvent () {
374412 ProjectileSpawnHook1::hook ();
375413 ProjectileSpawnHook2::hook ();
@@ -385,6 +423,7 @@ void MobHurtEvent() {
385423 MobHurtEffectHook::hook ();
386424}
387425void NpcCommandEvent () { NpcCommandHook::hook (); }
426+ void EndermanTakeBlockEvent () { ActorDestroyBlockEventHook::hook (); }
388427void EffectUpdateEvent () { EffectUpdateHook::hook (); }
389428void TransformationEvent () { TransformationHook::hook (); }
390429} // namespace lse::events::entity
0 commit comments