18
18
#include " mc/world/level/BlockSource.h"
19
19
#include " mc/world/level/Explosion.h"
20
20
#include " mc/world/level/Level.h"
21
+ #include " mc/world/level/block/ActivatorRailBlock.h"
21
22
#include " mc/world/level/block/BasePressurePlateBlock.h"
23
+ #include " mc/world/level/block/BaseRailBlock.h"
24
+ #include " mc/world/level/block/BigDripleafBlock.h"
22
25
#include " mc/world/level/block/Block.h"
26
+ #include " mc/world/level/block/CommandBlock.h"
23
27
#include " mc/world/level/block/ComparatorBlock.h"
28
+ #include " mc/world/level/block/CopperBulbBlock.h"
29
+ #include " mc/world/level/block/CrafterBlock.h"
24
30
#include " mc/world/level/block/DiodeBlock.h"
31
+ #include " mc/world/level/block/DispenserBlock.h"
32
+ #include " mc/world/level/block/DoorBlock.h"
25
33
#include " mc/world/level/block/FarmBlock.h"
34
+ #include " mc/world/level/block/FenceGateBlock.h"
35
+ #include " mc/world/level/block/HopperBlock.h"
26
36
#include " mc/world/level/block/LiquidBlockDynamic.h"
37
+ #include " mc/world/level/block/NoteBlock.h"
38
+ #include " mc/world/level/block/PoweredRailBlock.h"
27
39
#include " mc/world/level/block/RedStoneWireBlock.h"
40
+ #include " mc/world/level/block/RedstoneLampBlock.h"
28
41
#include " mc/world/level/block/RedstoneTorchBlock.h"
29
42
#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"
30
46
#include " mc/world/level/block/actor/BaseCommandBlock.h"
31
47
#include " mc/world/level/block/actor/PistonBlockActor.h"
32
48
#include " mc/world/level/dimension/Dimension.h"
@@ -253,6 +269,7 @@ LL_TYPE_INSTANCE_HOOK(
253
269
origin (region, pos, entitySource);
254
270
}
255
271
272
+ namespace redstone {
256
273
inline bool RedstoneUpdateEvent (BlockSource& region, BlockPos const & pos, int & strength, bool & isFirstTime) {
257
274
if (!CallEvent (
258
275
EVENT_TYPES::onRedStoneUpdate,
@@ -265,85 +282,51 @@ inline bool RedstoneUpdateEvent(BlockSource& region, BlockPos const& pos, int& s
265
282
return true ;
266
283
}
267
284
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); \
283
304
}
284
- IF_LISTENED_END (EVENT_TYPES::onRedStoneUpdate);
285
- origin (region, pos, strength, isFirstTime);
286
- }
287
305
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)
307
326
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
327
328
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
347
330
348
331
LL_TYPE_INSTANCE_HOOK (
349
332
LiquidFlowHook,
@@ -405,7 +388,7 @@ LL_TYPE_INSTANCE_HOOK(
405
388
return origin (region, commandOrigin, markForSaving);
406
389
}
407
390
408
- namespace HopperEvents {
391
+ namespace hopper {
409
392
enum class HopperStatus { None, PullIn, PullOut } hopperStatus = HopperStatus::None;
410
393
Vec3 hopperPos;
411
394
@@ -482,7 +465,7 @@ LL_TYPE_INSTANCE_HOOK(
482
465
hopperStatus = HopperStatus::None;
483
466
return origin (region, container, item, slot, face, itemCount);
484
467
}
485
- } // namespace HopperEvents
468
+ } // namespace hopper
486
469
487
470
void ContainerChangeEvent () { ContainerChangeHook::hook (); }
488
471
void ArmorStandSwapItemEvent () { ArmorStandSwapItemHook::hook (); }
@@ -492,20 +475,36 @@ void PistonPushEvent() { PistonPushHook::hook(); }
492
475
void ExplodeEvent () { ExplodeHook::hook (); }
493
476
void RespawnAnchorExplodeEvent () { RespawnAnchorExplodeHook::hook (); }
494
477
void 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 ();
500
499
}
501
500
void LiquidFlowEvent () { LiquidFlowHook::hook (); }
502
501
void CommandBlockExecuteEvent () { CommandBlockExecuteHook::hook (); }
503
502
void HopperEvent (bool pullIn) {
504
- HopperEvents ::HopperAddItemHook::hook ();
503
+ hopper ::HopperAddItemHook::hook ();
505
504
if (pullIn) {
506
- HopperEvents ::HopperPullInHook::hook ();
505
+ hopper ::HopperPullInHook::hook ();
507
506
} else {
508
- HopperEvents ::HopperPushOutHook::hook ();
507
+ hopper ::HopperPushOutHook::hook ();
509
508
}
510
509
}
511
510
} // namespace lse::events::block
0 commit comments