Skip to content

Commit be88033

Browse files
committed
feat: add more block for onRedStoneUpdate #212
1 parent fb92109 commit be88033

File tree

3 files changed

+86
-87
lines changed

3 files changed

+86
-87
lines changed

src/legacy/api/EventAPI.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,7 @@ void EnableEventListener(int eventId) {
530530
break;
531531

532532
case EVENT_TYPES::onRedStoneUpdate:
533-
lse::events::block::RedstoneupdateEvent();
533+
lse::events::block::RedstoneUpdateEvent();
534534
break;
535535

536536
case EVENT_TYPES::onWitherBossDestroy:

src/lse/events/BlockEvents.cpp

Lines changed: 84 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,31 @@
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 {
256273
inline 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

348331
LL_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 {
409392
enum class HopperStatus { None, PullIn, PullOut } hopperStatus = HopperStatus::None;
410393
Vec3 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

487470
void ContainerChangeEvent() { ContainerChangeHook::hook(); }
488471
void ArmorStandSwapItemEvent() { ArmorStandSwapItemHook::hook(); }
@@ -492,20 +475,36 @@ void PistonPushEvent() { PistonPushHook::hook(); }
492475
void ExplodeEvent() { ExplodeHook::hook(); }
493476
void RespawnAnchorExplodeEvent() { RespawnAnchorExplodeHook::hook(); }
494477
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();
500499
}
501500
void LiquidFlowEvent() { LiquidFlowHook::hook(); }
502501
void CommandBlockExecuteEvent() { CommandBlockExecuteHook::hook(); }
503502
void 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

src/lse/events/BlockEvents.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ void PistonPushEvent();
99
void ExplodeEvent();
1010
void RespawnAnchorExplodeEvent();
1111
void BlockExplodedEvent();
12-
void RedstoneupdateEvent();
12+
void RedstoneUpdateEvent();
1313
void LiquidFlowEvent();
1414
void CommandBlockExecuteEvent();
1515
void HopperEvent(bool pullIn);

0 commit comments

Comments
 (0)