1818#include " mc/world/level/BlockSource.h"
1919#include " mc/world/level/Explosion.h"
2020#include " mc/world/level/Level.h"
21+ #include " mc/world/level/block/ActivatorRailBlock.h"
2122#include " mc/world/level/block/BasePressurePlateBlock.h"
23+ #include " mc/world/level/block/BaseRailBlock.h"
24+ #include " mc/world/level/block/BigDripleafBlock.h"
2225#include " mc/world/level/block/Block.h"
26+ #include " mc/world/level/block/CommandBlock.h"
2327#include " mc/world/level/block/ComparatorBlock.h"
28+ #include " mc/world/level/block/CopperBulbBlock.h"
29+ #include " mc/world/level/block/CrafterBlock.h"
2430#include " mc/world/level/block/DiodeBlock.h"
31+ #include " mc/world/level/block/DispenserBlock.h"
32+ #include " mc/world/level/block/DoorBlock.h"
2533#include " mc/world/level/block/FarmBlock.h"
34+ #include " mc/world/level/block/FenceGateBlock.h"
35+ #include " mc/world/level/block/HopperBlock.h"
2636#include " mc/world/level/block/LiquidBlockDynamic.h"
37+ #include " mc/world/level/block/NoteBlock.h"
38+ #include " mc/world/level/block/PoweredRailBlock.h"
2739#include " mc/world/level/block/RedStoneWireBlock.h"
40+ #include " mc/world/level/block/RedstoneLampBlock.h"
2841#include " mc/world/level/block/RedstoneTorchBlock.h"
2942#include " mc/world/level/block/RespawnAnchorBlock.h"
43+ #include " mc/world/level/block/StructureBlock.h"
44+ #include " mc/world/level/block/TntBlock.h"
45+ #include " mc/world/level/block/TrapDoorBlock.h"
3046#include " mc/world/level/block/actor/BaseCommandBlock.h"
3147#include " mc/world/level/block/actor/PistonBlockActor.h"
3248#include " mc/world/level/dimension/Dimension.h"
@@ -253,6 +269,7 @@ LL_TYPE_INSTANCE_HOOK(
253269 origin (region, pos, entitySource);
254270}
255271
272+ namespace redstone {
256273inline bool RedstoneUpdateEvent (BlockSource& region, BlockPos const & pos, int & strength, bool & isFirstTime) {
257274 if (!CallEvent (
258275 EVENT_TYPES::onRedStoneUpdate,
@@ -265,85 +282,51 @@ inline bool RedstoneUpdateEvent(BlockSource& region, BlockPos const& pos, int& s
265282 return true ;
266283}
267284
268- LL_TYPE_INSTANCE_HOOK (
269- RedstoneUpdateHook1,
270- HookPriority::Normal,
271- RedStoneWireBlock,
272- &RedStoneWireBlock::$onRedstoneUpdate,
273- void ,
274- BlockSource& region,
275- BlockPos const & pos,
276- int strength,
277- bool isFirstTime
278- ) {
279- IF_LISTENED (EVENT_TYPES::onRedStoneUpdate) {
280- if (!RedstoneUpdateEvent (region, pos, strength, isFirstTime)) {
281- return ;
282- }
285+ #define REDSTONEHOOK (BLOCK ) \
286+ LL_TYPE_INSTANCE_HOOK ( \
287+ BLOCK##Hook, \
288+ HookPriority::Normal, \
289+ BLOCK, \
290+ &BLOCK::$onRedstoneUpdate, \
291+ void , \
292+ BlockSource& region, \
293+ BlockPos const & pos, \
294+ int strength, \
295+ bool isFirstTime \
296+ ) { \
297+ IF_LISTENED (EVENT_TYPES::onRedStoneUpdate) { \
298+ if (!RedstoneUpdateEvent (region, pos, strength, isFirstTime)) { \
299+ return ; \
300+ } \
301+ } \
302+ IF_LISTENED_END (EVENT_TYPES::onRedStoneUpdate); \
303+ origin (region, pos, strength, isFirstTime); \
283304 }
284- IF_LISTENED_END (EVENT_TYPES::onRedStoneUpdate);
285- origin (region, pos, strength, isFirstTime);
286- }
287305
288- LL_TYPE_INSTANCE_HOOK (
289- RedstoneUpdateHook2,
290- HookPriority::Normal,
291- DiodeBlock,
292- &DiodeBlock::$onRedstoneUpdate,
293- void ,
294- BlockSource& region,
295- BlockPos const & pos,
296- int strength,
297- bool isFirstTime
298- ) {
299- IF_LISTENED (EVENT_TYPES::onRedStoneUpdate) {
300- if (!RedstoneUpdateEvent (region, pos, strength, isFirstTime)) {
301- return ;
302- }
303- }
304- IF_LISTENED_END (EVENT_TYPES::onRedStoneUpdate);
305- origin (region, pos, strength, isFirstTime);
306- }
306+ REDSTONEHOOK (RedStoneWireBlock)
307+ REDSTONEHOOK (DiodeBlock)
308+ REDSTONEHOOK (RedstoneTorchBlock)
309+ REDSTONEHOOK (ComparatorBlock)
310+ REDSTONEHOOK (HopperBlock)
311+ REDSTONEHOOK (CrafterBlock)
312+ REDSTONEHOOK (CommandBlock)
313+ REDSTONEHOOK (BaseRailBlock)
314+ REDSTONEHOOK (PoweredRailBlock)
315+ REDSTONEHOOK (BigDripleafBlock)
316+ REDSTONEHOOK (CopperBulbBlock)
317+ REDSTONEHOOK (DoorBlock)
318+ REDSTONEHOOK (FenceGateBlock)
319+ REDSTONEHOOK (DispenserBlock)
320+ REDSTONEHOOK (StructureBlock)
321+ REDSTONEHOOK (TrapDoorBlock)
322+ REDSTONEHOOK (NoteBlock)
323+ REDSTONEHOOK (ActivatorRailBlock)
324+ REDSTONEHOOK (RedstoneLampBlock)
325+ REDSTONEHOOK (TntBlock)
307326
308- LL_TYPE_INSTANCE_HOOK (
309- RedstoneUpdateHook3,
310- HookPriority::Normal,
311- RedstoneTorchBlock,
312- &RedstoneTorchBlock::$onRedstoneUpdate,
313- void ,
314- BlockSource& region,
315- BlockPos const & pos,
316- int strength,
317- bool isFirstTime
318- ) {
319- IF_LISTENED (EVENT_TYPES::onRedStoneUpdate) {
320- if (!RedstoneUpdateEvent (region, pos, strength, isFirstTime)) {
321- return ;
322- }
323- }
324- IF_LISTENED_END (EVENT_TYPES::onRedStoneUpdate);
325- origin (region, pos, strength, isFirstTime);
326- }
327+ #undef REDSTONEHOOK
327328
328- LL_TYPE_INSTANCE_HOOK (
329- RedstoneUpdateHook4,
330- HookPriority::Normal,
331- ComparatorBlock,
332- &ComparatorBlock::$onRedstoneUpdate,
333- void ,
334- BlockSource& region,
335- BlockPos const & pos,
336- int strength,
337- bool isFirstTime
338- ) {
339- IF_LISTENED (EVENT_TYPES::onRedStoneUpdate) {
340- if (!RedstoneUpdateEvent (region, pos, strength, isFirstTime)) {
341- return ;
342- }
343- }
344- IF_LISTENED_END (EVENT_TYPES::onRedStoneUpdate);
345- origin (region, pos, strength, isFirstTime);
346- }
329+ } // namespace redstone
347330
348331LL_TYPE_INSTANCE_HOOK (
349332 LiquidFlowHook,
@@ -405,7 +388,7 @@ LL_TYPE_INSTANCE_HOOK(
405388 return origin (region, commandOrigin, markForSaving);
406389}
407390
408- namespace HopperEvents {
391+ namespace hopper {
409392enum class HopperStatus { None, PullIn, PullOut } hopperStatus = HopperStatus::None;
410393Vec3 hopperPos;
411394
@@ -482,7 +465,7 @@ LL_TYPE_INSTANCE_HOOK(
482465 hopperStatus = HopperStatus::None;
483466 return origin (region, container, item, slot, face, itemCount);
484467}
485- } // namespace HopperEvents
468+ } // namespace hopper
486469
487470void ContainerChangeEvent () { ContainerChangeHook::hook (); }
488471void ArmorStandSwapItemEvent () { ArmorStandSwapItemHook::hook (); }
@@ -492,20 +475,36 @@ void PistonPushEvent() { PistonPushHook::hook(); }
492475void ExplodeEvent () { ExplodeHook::hook (); }
493476void RespawnAnchorExplodeEvent () { RespawnAnchorExplodeHook::hook (); }
494477void BlockExplodedEvent () { BlockExplodedHook ::hook (); }
495- void RedstoneupdateEvent () {
496- RedstoneUpdateHook1::hook ();
497- RedstoneUpdateHook2::hook ();
498- RedstoneUpdateHook3::hook ();
499- RedstoneUpdateHook4::hook ();
478+ void RedstoneUpdateEvent () {
479+ redstone::RedstoneTorchBlockHook::hook ();
480+ redstone::RedStoneWireBlockHook::hook ();
481+ redstone::DiodeBlockHook::hook ();
482+ redstone::ComparatorBlockHook::hook ();
483+ redstone::HopperBlockHook::hook ();
484+ redstone::CrafterBlockHook::hook ();
485+ redstone::CommandBlockHook::hook ();
486+ redstone::BaseRailBlockHook::hook ();
487+ redstone::PoweredRailBlockHook::hook ();
488+ redstone::BigDripleafBlockHook::hook ();
489+ redstone::CopperBulbBlockHook::hook ();
490+ redstone::DoorBlockHook::hook ();
491+ redstone::FenceGateBlockHook::hook ();
492+ redstone::DispenserBlockHook::hook ();
493+ redstone::StructureBlockHook::hook ();
494+ redstone::TrapDoorBlockHook::hook ();
495+ redstone::NoteBlockHook::hook ();
496+ redstone::ActivatorRailBlockHook::hook ();
497+ redstone::RedstoneLampBlockHook::hook ();
498+ redstone::TntBlockHook::hook ();
500499}
501500void LiquidFlowEvent () { LiquidFlowHook::hook (); }
502501void CommandBlockExecuteEvent () { CommandBlockExecuteHook::hook (); }
503502void HopperEvent (bool pullIn) {
504- HopperEvents ::HopperAddItemHook::hook ();
503+ hopper ::HopperAddItemHook::hook ();
505504 if (pullIn) {
506- HopperEvents ::HopperPullInHook::hook ();
505+ hopper ::HopperPullInHook::hook ();
507506 } else {
508- HopperEvents ::HopperPushOutHook::hook ();
507+ hopper ::HopperPushOutHook::hook ();
509508 }
510509}
511510} // namespace lse::events::block
0 commit comments