Skip to content

Commit 557df64

Browse files
committed
fix: fix some events
1 parent 3cfc243 commit 557df64

File tree

3 files changed

+90
-72
lines changed

3 files changed

+90
-72
lines changed

src/lse/events/BlockEvents.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
#include "mc/world/level/dimension/Dimension.h"
5151
#include "mc/world/level/material/Material.h"
5252

53-
5453
namespace lse::events::block {
5554
LL_TYPE_INSTANCE_HOOK(
5655
ContainerChangeHook,
@@ -256,7 +255,7 @@ LL_TYPE_INSTANCE_HOOK(
256255
BlockExplodedHook,
257256
HookPriority::Normal,
258257
ScriptModuleMinecraft::ScriptBlockGlobalEventListener,
259-
&ScriptBlockGlobalEventListener::onBlockExploded,
258+
&ScriptBlockGlobalEventListener::$onBlockExploded,
260259
EventResult,
261260
Dimension& dimension,
262261
BlockPos const& blockPos,

src/lse/events/EntityEvents.cpp

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -182,29 +182,32 @@ LL_TYPE_INSTANCE_HOOK(
182182
IF_LISTENED_END(EVENT_TYPES::onProjectileHitEntity);
183183
origin(owner, res);
184184
}
185-
//fixme: this hook is not working
186-
// LL_TYPE_INSTANCE_HOOK(
187-
// ProjectileHitBlockHook,
188-
// HookPriority::Normal,
189-
// ActorEventCoordinator,
190-
// &ActorEventCoordinator::sendEvent,
191-
// CoordinatorResult,
192-
// EventRef<ActorGameplayEvent<CoordinatorResult>> const& event
193-
//) {
194-
// IF_LISTENED(EVENT_TYPES::onProjectileHitBlock) {
195-
// if (pos != BlockPos::ZERO() && !this->isAir()) {
196-
// if (!CallEvent(
197-
// EVENT_TYPES::onProjectileHitBlock,
198-
// BlockClass::newBlock(*this, pos, region),
199-
// EntityClass::newEntity(&const_cast<Actor&>(projectile))
200-
// )) {
201-
// return CoordinatorResult::Cancel;
202-
// }
203-
// }
204-
// }
205-
// IF_LISTENED_END(EVENT_TYPES::onProjectileHitBlock);
206-
// origin(event);
207-
// }
185+
186+
LL_TYPE_INSTANCE_HOOK(
187+
ProjectileHitBlockHook,
188+
HookPriority::Normal,
189+
ProjectileComponent,
190+
&ProjectileComponent::onHit,
191+
void,
192+
::Actor& owner,
193+
::HitResult const& res
194+
) {
195+
IF_LISTENED(EVENT_TYPES::onProjectileHitBlock) {
196+
auto& region = owner.getDimensionBlockSourceConst();
197+
auto& block = region.getBlock(res.mBlock);
198+
if (res.mType == HitResultType::Tile && res.mBlock != BlockPos::ZERO() && block.isAir()) {
199+
if (!CallEvent(
200+
EVENT_TYPES::onProjectileHitBlock,
201+
BlockClass::newBlock(block, res.mBlock, region),
202+
EntityClass::newEntity(&owner)
203+
)) {
204+
return;
205+
}
206+
}
207+
}
208+
IF_LISTENED_END(EVENT_TYPES::onProjectileHitBlock);
209+
return origin(owner, res);
210+
}
208211

209212
LL_TYPE_INSTANCE_HOOK(
210213
MobHurtHook,
@@ -377,9 +380,7 @@ void ProjectileCreatedEvent() { ProjectileSpawnHook1::hook(); };
377380
void ActorRideEvent() { ActorRideHook::hook(); }
378381
void WitherDestroyEvent() { WitherDestroyHook::hook(); }
379382
void ProjectileHitEntityEvent() { ProjectileHitEntityHook::hook(); }
380-
void ProjectileHitBlockEvent() {
381-
// ProjectileHitBlockHook::hook();
382-
}
383+
void ProjectileHitBlockEvent() { ProjectileHitBlockHook::hook(); }
383384
void MobHurtEvent() {
384385
MobHurtHook::hook();
385386
MobHurtEffectHook::hook();

src/lse/events/PlayerEvents.cpp

Lines changed: 62 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "mc/world/item/BucketItem.h"
3434
#include "mc/world/item/ItemInstance.h"
3535
#include "mc/world/item/ItemStack.h"
36+
#include "mc/world/item/PotionItem.h"
3637
#include "mc/world/level/BedrockSpawner.h"
3738
#include "mc/world/level/BlockSource.h"
3839
#include "mc/world/level/ChangeDimensionRequest.h"
@@ -223,30 +224,30 @@ LL_TYPE_INSTANCE_HOOK(
223224
IF_LISTENED_END(EVENT_TYPES::onInventoryChange);
224225
origin(container, slot, oldItem, newItem, forceBalanced);
225226
}
226-
//fixme: this hook is not working
227-
// LL_TYPE_INSTANCE_HOOK(
228-
// AttackBlockHook,
229-
// HookPriority::Normal,
230-
// Block,
231-
// &Block::attack,
232-
// bool,
233-
// Player* player,
234-
// BlockPos const& pos
227+
// fixme: this hook is not working
228+
// LL_TYPE_INSTANCE_HOOK(
229+
// AttackBlockHook,
230+
// HookPriority::Normal,
231+
// Block,
232+
// &Block::attack,
233+
// bool,
234+
// Player* player,
235+
// BlockPos const& pos
235236
//) {
236-
// IF_LISTENED(EVENT_TYPES::onAttackBlock) {
237-
// ItemStack const& item = player->getSelectedItem();
238-
// if (!CallEvent(
239-
// EVENT_TYPES::onAttackBlock,
240-
// PlayerClass::newPlayer(player),
241-
// BlockClass::newBlock(pos, player->getDimensionId()),
242-
// !item.isNull() ? ItemClass::newItem(&const_cast<ItemStack&>(item)) : Local<Value>()
243-
// )) {
244-
// return false;
245-
// }
246-
// }
247-
// IF_LISTENED_END(EVENT_TYPES::onAttackBlock);
248-
// return origin(player, pos);
249-
// }
237+
// IF_LISTENED(EVENT_TYPES::onAttackBlock) {
238+
// ItemStack const& item = player->getSelectedItem();
239+
// if (!CallEvent(
240+
// EVENT_TYPES::onAttackBlock,
241+
// PlayerClass::newPlayer(player),
242+
// BlockClass::newBlock(pos, player->getDimensionId()),
243+
// !item.isNull() ? ItemClass::newItem(&const_cast<ItemStack&>(item)) : Local<Value>()
244+
// )) {
245+
// return false;
246+
// }
247+
// }
248+
// IF_LISTENED_END(EVENT_TYPES::onAttackBlock);
249+
// return origin(player, pos);
250+
// }
250251

251252
LL_TYPE_INSTANCE_HOOK(
252253
UseFrameHook1,
@@ -306,26 +307,42 @@ LL_TYPE_INSTANCE_HOOK(EatHook1, HookPriority::Normal, Player, &Player::eat, void
306307
IF_LISTENED_END(EVENT_TYPES::onAte);
307308
origin(instance);
308309
}
309-
//fixme: this hook is not working
310-
// LL_TYPE_INSTANCE_HOOK(
311-
// EatHook2,
312-
// HookPriority::Normal,
313-
// ItemStack,
314-
// &ItemStack::useTimeDepleted,
315-
// ::ItemUseMethod,
316-
// Level* level,
317-
// Player* player
318-
//) {
319-
// IF_LISTENED(EVENT_TYPES::onAte) {
320-
// if (isPotionItem() || getTypeName() == "minecraft:milk_bucket") {
321-
// if (!CallEvent(EVENT_TYPES::onAte, PlayerClass::newPlayer(player), ItemClass::newItem(this))) {
322-
// return ItemUseMethod::Unknown;
323-
// }
324-
// }
325-
// }
326-
// IF_LISTENED_END(EVENT_TYPES::onAte);
327-
// return origin(level, player);
328-
// }
310+
LL_TYPE_INSTANCE_HOOK(
311+
EatHook2,
312+
HookPriority::Normal,
313+
PotionItem,
314+
&PotionItem::$useTimeDepleted,
315+
::ItemUseMethod,
316+
::ItemStack& inoutInstance,
317+
Level* level,
318+
Player* player
319+
) {
320+
IF_LISTENED(EVENT_TYPES::onAte) {
321+
if (!CallEvent(EVENT_TYPES::onAte, PlayerClass::newPlayer(player), ItemClass::newItem(&inoutInstance))) {
322+
return ItemUseMethod::Unknown;
323+
}
324+
}
325+
IF_LISTENED_END(EVENT_TYPES::onAte);
326+
return origin(inoutInstance, level, player);
327+
}
328+
LL_TYPE_INSTANCE_HOOK(
329+
EatHook3,
330+
HookPriority::Normal,
331+
Item,
332+
(uintptr_t)BucketItem::$vftable()[79],
333+
::ItemUseMethod,
334+
::ItemStack& inoutInstance,
335+
Level* level,
336+
Player* player
337+
) {
338+
IF_LISTENED(EVENT_TYPES::onAte) {
339+
if (!CallEvent(EVENT_TYPES::onAte, PlayerClass::newPlayer(player), ItemClass::newItem(&inoutInstance))) {
340+
return ItemUseMethod::Unknown;
341+
}
342+
}
343+
IF_LISTENED_END(EVENT_TYPES::onAte);
344+
return origin(inoutInstance, level, player);
345+
}
329346

330347
LL_TYPE_INSTANCE_HOOK(
331348
ChangeDimensionHook,
@@ -665,7 +682,8 @@ void UseFrameEvent() {
665682
}
666683
void EatEvent() {
667684
EatHook1::hook();
668-
// EatHook2::hook();
685+
EatHook2::hook();
686+
EatHook3::hook();
669687
}
670688
void ChangeDimensionEvent() { ChangeDimensionHook::hook(); };
671689
void OpenContainerScreenEvent() { OpenContainerScreenHook::hook(); }

0 commit comments

Comments
 (0)