11#include " legacy/api/BaseAPI.h"
22#include " legacy/api/BlockAPI.h"
3+ #include " legacy/api/ContainerAPI.h"
34#include " legacy/api/EntityAPI.h"
45#include " legacy/api/EventAPI.h"
56#include " legacy/api/ItemAPI.h"
3738#include " mc/world/level/block/LiquidBlock.h"
3839#include " mc/world/level/block/NoteBlock.h"
3940#include " mc/world/level/block/PoweredRailBlock.h"
41+ #include " mc/world/level/block/PortalBlock.h"
4042#include " mc/world/level/block/RedStoneWireBlock.h"
4143#include " mc/world/level/block/RedstoneLampBlock.h"
4244#include " mc/world/level/block/RedstoneTorchBlock.h"
@@ -268,6 +270,26 @@ LL_TYPE_STATIC_HOOK(
268270 origin (player, pos, region, level);
269271}
270272
273+ LL_TYPE_STATIC_HOOK (
274+ PortalSpawnHook,
275+ HookPriority::Normal,
276+ PortalBlock,
277+ &PortalBlock::trySpawnPortal,
278+ bool ,
279+ BlockSource& region,
280+ BlockPos const & pos
281+ ) {
282+ IF_LISTENED (EVENT_TYPES::onPortalTrySpawn) {
283+ if (checkClientIsServerThread ()) {
284+ if (!CallEvent (EVENT_TYPES::onPortalTrySpawn, IntPos::newPos (pos, region.getDimensionId ()))) {
285+ return false ;
286+ }
287+ }
288+ }
289+ IF_LISTENED_END (EVENT_TYPES::onPortalTrySpawn);
290+ return origin (region, pos);
291+ }
292+
271293LL_TYPE_INSTANCE_HOOK (
272294 BlockExplodedHook,
273295 HookPriority::Normal,
@@ -497,6 +519,40 @@ LL_TYPE_INSTANCE_HOOK(
497519 return origin (region, commandOrigin, markForSaving);
498520}
499521
522+ namespace dispenser {
523+ LL_TYPE_INSTANCE_HOOK (
524+ DispenserEjectItemHook,
525+ HookPriority::Normal,
526+ DispenserBlock,
527+ &DispenserBlock::ejectItem,
528+ void ,
529+ BlockSource& region,
530+ Vec3 const & pos,
531+ uchar face,
532+ ItemStack const & item,
533+ Container& container,
534+ int slot,
535+ int countLimit
536+ ) {
537+ IF_LISTENED (EVENT_TYPES::onDispenseItem) {
538+ if (checkClientIsServerThread ()) {
539+ if (!CallEvent (
540+ EVENT_TYPES::onDispenseItem,
541+ FloatPos::newPos (pos, region.getDimensionId ()),
542+ ItemClass::newItem (&const_cast <ItemStack&>(item)),
543+ Number::newNumber (slot),
544+ Number::newNumber ((int )face),
545+ ContainerClass::newContainer (&container)
546+ )) {
547+ return ;
548+ }
549+ }
550+ }
551+ IF_LISTENED_END (EVENT_TYPES::onDispenseItem);
552+ origin (region, pos, face, item, container, slot, countLimit);
553+ }
554+ } // namespace dispenser
555+
500556namespace hopper {
501557enum class HopperStatus { None, PullIn, PullOut } hopperStatus = HopperStatus::None;
502558Vec3 hopperPos;
@@ -587,6 +643,7 @@ void FarmDecayEvent() { FarmDecayHook::hook(); }
587643void PistonPushEvent () { PistonPushHook::hook (); }
588644void ExplodeEvent () { ExplodeHook::hook (); }
589645void RespawnAnchorExplodeEvent () { RespawnAnchorExplodeHook::hook (); }
646+ void PortalSpawnEvent () { PortalSpawnHook::hook (); }
590647void BlockExplodedEvent () { BlockExplodedHook ::hook (); }
591648void RedstoneUpdateEvent () {
592649 redstone::RedstoneTorchBlockHook::hook ();
@@ -611,6 +668,7 @@ void RedstoneUpdateEvent() {
611668}
612669void LiquidFlowEvent () { LiquidFlowHook::hook (); }
613670void CommandBlockExecuteEvent () { CommandBlockExecuteHook::hook (); }
671+ void DispenseItemEvent () { dispenser::DispenserEjectItemHook::hook (); }
614672void HopperEvent (bool pullIn) {
615673 hopper::HopperAddItemHook::hook ();
616674 if (pullIn) {
0 commit comments