Skip to content

Commit 0ec764c

Browse files
committed
Initial PR Commit
1 parent 7a02aa4 commit 0ec764c

File tree

5 files changed

+60
-11
lines changed

5 files changed

+60
-11
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.compactmods.machines.api.event;
2+
3+
import java.util.stream.Stream;
4+
5+
/**
6+
* Used to gather a list of listeners.
7+
*
8+
* @param <B> Base Class used for the event listeners
9+
*/
10+
public interface IEventListenerList<B> {
11+
void addListener(B listener);
12+
Stream<B> getListeners();
13+
}

core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgrade.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.compactmods.machines.api.room.upgrade;
22

3+
import dev.compactmods.machines.api.event.IEventListenerList;
34
import dev.compactmods.machines.api.room.upgrade.events.RoomUpgradeEvent;
45
import net.minecraft.world.flag.FeatureElement;
56
import net.minecraft.world.item.ItemStack;
@@ -11,7 +12,5 @@ public interface RoomUpgrade extends TooltipProvider {
1112

1213
RoomUpgradeType<?> getType();
1314

14-
default Stream<RoomUpgradeEvent> gatherEvents() {
15-
return Stream.empty();
16-
}
15+
default void gatherEvents(IEventListenerList<RoomUpgradeEvent> listenerList) {}
1716
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package dev.compactmods.machines.event;
2+
3+
import dev.compactmods.machines.api.event.IEventListenerList;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
import java.util.stream.Stream;
8+
9+
/**
10+
* Used to gather a list of listeners.
11+
* An implementation of {@link IEventListenerList}
12+
*
13+
* @param <B> Base Class used for the event listeners
14+
*/
15+
public final class EventListenerList<B> implements IEventListenerList<B> {
16+
public static <B> EventListenerList<B> createList() {
17+
return new EventListenerList<>();
18+
}
19+
20+
private final List<B> listeners = new ArrayList<>();
21+
22+
private EventListenerList() {}
23+
24+
public void addListener(B listener) {
25+
this.listeners.add(listener);
26+
}
27+
28+
public Stream<B> getListeners() {
29+
return listeners.stream();
30+
}
31+
}

neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgradeEventHandlers.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import dev.compactmods.machines.CompactMachinesCommon;
44
import dev.compactmods.machines.api.CompactMachines;
55
import dev.compactmods.machines.api.dimension.CompactDimension;
6+
import dev.compactmods.machines.api.event.IEventListenerList;
7+
import dev.compactmods.machines.api.room.upgrade.events.RoomUpgradeEvent;
68
import dev.compactmods.machines.api.room.upgrade.events.lifecycle.UpgradeTickedEventListener;
9+
import dev.compactmods.machines.event.EventListenerList;
710
import dev.compactmods.machines.feature.CMFeatureFlags;
811
import dev.compactmods.machines.room.Rooms;
912
import net.minecraft.network.chat.Component;
@@ -38,13 +41,15 @@ public static void onLevelTick(LevelTickEvent.Post postTick) {
3841

3942
for (final var upgradeStack : upgradeStacks) {
4043
final var upgrades = upgradeStack.get(RoomUpgrades.UPGRADE_LIST_COMPONENT);
44+
final IEventListenerList<RoomUpgradeEvent> listenerList = EventListenerList.createList();
4145
upgrades.upgrades()
42-
.stream()
43-
.flatMap(ru -> ru.gatherEvents().filter(UpgradeTickedEventListener.class::isInstance))
44-
.map(UpgradeTickedEventListener.class::cast)
45-
.forEach(ticker -> {
46-
ticker.handle(serverLevel, room, upgradeStack);
47-
});
46+
.forEach(upgrade -> upgrade.gatherEvents(listenerList));
47+
listenerList.getListeners()
48+
.filter(UpgradeTickedEventListener.class::isInstance)
49+
.map(UpgradeTickedEventListener.class::cast)
50+
.forEach(ticker -> {
51+
ticker.handle(serverLevel, room, upgradeStack);
52+
});
4853
}
4954
});
5055
}

neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/example/TreeCutterUpgrade.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.compactmods.machines.room.upgrade.example;
22

33
import com.mojang.serialization.MapCodec;
4+
import dev.compactmods.machines.api.event.IEventListenerList;
45
import dev.compactmods.machines.api.room.RoomInstance;
56
import dev.compactmods.machines.api.room.upgrade.RoomUpgrade;
67
import dev.compactmods.machines.api.room.upgrade.RoomUpgradeType;
@@ -48,9 +49,9 @@ public void addToTooltip(@NotNull Item.TooltipContext ctx, Consumer<Component> t
4849
}
4950

5051
@Override
51-
public Stream<RoomUpgradeEvent> gatherEvents() {
52+
public void gatherEvents(IEventListenerList<RoomUpgradeEvent> listenerList) {
5253
final UpgradeTickedEventListener ticker = TreeCutterUpgrade::onTick;
53-
return Stream.of(ticker);
54+
listenerList.addListener(ticker);
5455
}
5556

5657
@Override

0 commit comments

Comments
 (0)