From 0ec764c950f5362afaa74e54bbe40d2248139490 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 26 Nov 2024 21:49:33 -0800 Subject: [PATCH 1/2] Initial PR Commit --- .../api/event/IEventListenerList.java | 13 ++++++++ .../api/room/upgrade/RoomUpgrade.java | 5 ++- .../machines/event/EventListenerList.java | 31 +++++++++++++++++++ .../upgrade/RoomUpgradeEventHandlers.java | 17 ++++++---- .../upgrade/example/TreeCutterUpgrade.java | 5 +-- 5 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 core-api/src/main/java/dev/compactmods/machines/api/event/IEventListenerList.java create mode 100644 neoforge-main/src/main/java/dev/compactmods/machines/event/EventListenerList.java diff --git a/core-api/src/main/java/dev/compactmods/machines/api/event/IEventListenerList.java b/core-api/src/main/java/dev/compactmods/machines/api/event/IEventListenerList.java new file mode 100644 index 00000000..1774f856 --- /dev/null +++ b/core-api/src/main/java/dev/compactmods/machines/api/event/IEventListenerList.java @@ -0,0 +1,13 @@ +package dev.compactmods.machines.api.event; + +import java.util.stream.Stream; + +/** + * Used to gather a list of listeners. + * + * @param Base Class used for the event listeners + */ +public interface IEventListenerList { + void addListener(B listener); + Stream getListeners(); +} diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgrade.java b/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgrade.java index 338a35d6..4df4607d 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgrade.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgrade.java @@ -1,5 +1,6 @@ package dev.compactmods.machines.api.room.upgrade; +import dev.compactmods.machines.api.event.IEventListenerList; import dev.compactmods.machines.api.room.upgrade.events.RoomUpgradeEvent; import net.minecraft.world.flag.FeatureElement; import net.minecraft.world.item.ItemStack; @@ -11,7 +12,5 @@ public interface RoomUpgrade extends TooltipProvider { RoomUpgradeType getType(); - default Stream gatherEvents() { - return Stream.empty(); - } + default void gatherEvents(IEventListenerList listenerList) {} } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/event/EventListenerList.java b/neoforge-main/src/main/java/dev/compactmods/machines/event/EventListenerList.java new file mode 100644 index 00000000..211fb470 --- /dev/null +++ b/neoforge-main/src/main/java/dev/compactmods/machines/event/EventListenerList.java @@ -0,0 +1,31 @@ +package dev.compactmods.machines.event; + +import dev.compactmods.machines.api.event.IEventListenerList; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +/** + * Used to gather a list of listeners. + * An implementation of {@link IEventListenerList} + * + * @param Base Class used for the event listeners + */ +public final class EventListenerList implements IEventListenerList { + public static EventListenerList createList() { + return new EventListenerList<>(); + } + + private final List listeners = new ArrayList<>(); + + private EventListenerList() {} + + public void addListener(B listener) { + this.listeners.add(listener); + } + + public Stream getListeners() { + return listeners.stream(); + } +} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgradeEventHandlers.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgradeEventHandlers.java index 9cac500c..95020f6b 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgradeEventHandlers.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgradeEventHandlers.java @@ -3,7 +3,10 @@ import dev.compactmods.machines.CompactMachinesCommon; import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.dimension.CompactDimension; +import dev.compactmods.machines.api.event.IEventListenerList; +import dev.compactmods.machines.api.room.upgrade.events.RoomUpgradeEvent; import dev.compactmods.machines.api.room.upgrade.events.lifecycle.UpgradeTickedEventListener; +import dev.compactmods.machines.event.EventListenerList; import dev.compactmods.machines.feature.CMFeatureFlags; import dev.compactmods.machines.room.Rooms; import net.minecraft.network.chat.Component; @@ -38,13 +41,15 @@ public static void onLevelTick(LevelTickEvent.Post postTick) { for (final var upgradeStack : upgradeStacks) { final var upgrades = upgradeStack.get(RoomUpgrades.UPGRADE_LIST_COMPONENT); + final IEventListenerList listenerList = EventListenerList.createList(); upgrades.upgrades() - .stream() - .flatMap(ru -> ru.gatherEvents().filter(UpgradeTickedEventListener.class::isInstance)) - .map(UpgradeTickedEventListener.class::cast) - .forEach(ticker -> { - ticker.handle(serverLevel, room, upgradeStack); - }); + .forEach(upgrade -> upgrade.gatherEvents(listenerList)); + listenerList.getListeners() + .filter(UpgradeTickedEventListener.class::isInstance) + .map(UpgradeTickedEventListener.class::cast) + .forEach(ticker -> { + ticker.handle(serverLevel, room, upgradeStack); + }); } }); } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/example/TreeCutterUpgrade.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/example/TreeCutterUpgrade.java index 4c1abda4..8dc9287f 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/example/TreeCutterUpgrade.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/example/TreeCutterUpgrade.java @@ -1,6 +1,7 @@ package dev.compactmods.machines.room.upgrade.example; import com.mojang.serialization.MapCodec; +import dev.compactmods.machines.api.event.IEventListenerList; import dev.compactmods.machines.api.room.RoomInstance; import dev.compactmods.machines.api.room.upgrade.RoomUpgrade; import dev.compactmods.machines.api.room.upgrade.RoomUpgradeType; @@ -48,9 +49,9 @@ public void addToTooltip(@NotNull Item.TooltipContext ctx, Consumer t } @Override - public Stream gatherEvents() { + public void gatherEvents(IEventListenerList listenerList) { final UpgradeTickedEventListener ticker = TreeCutterUpgrade::onTick; - return Stream.of(ticker); + listenerList.addListener(ticker); } @Override From 2da944fef574621312be97c72bb09ec9429910cc Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 26 Nov 2024 21:55:49 -0800 Subject: [PATCH 2/2] Added some stuff --- .../compactmods/machines/api/event/IEventListenerList.java | 6 ++++++ .../machines/room/upgrade/example/TreeCutterUpgrade.java | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core-api/src/main/java/dev/compactmods/machines/api/event/IEventListenerList.java b/core-api/src/main/java/dev/compactmods/machines/api/event/IEventListenerList.java index 1774f856..9ae7b520 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/event/IEventListenerList.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/event/IEventListenerList.java @@ -9,5 +9,11 @@ */ public interface IEventListenerList { void addListener(B listener); + + default void addListener(Class eClass, E listener) { + addListener(listener); + } + Stream getListeners(); + } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/example/TreeCutterUpgrade.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/example/TreeCutterUpgrade.java index 8dc9287f..809c1953 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/example/TreeCutterUpgrade.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/example/TreeCutterUpgrade.java @@ -50,8 +50,7 @@ public void addToTooltip(@NotNull Item.TooltipContext ctx, Consumer t @Override public void gatherEvents(IEventListenerList listenerList) { - final UpgradeTickedEventListener ticker = TreeCutterUpgrade::onTick; - listenerList.addListener(ticker); + listenerList.addListener(UpgradeTickedEventListener.class, TreeCutterUpgrade::onTick); } @Override