From 91483376a66987d480b1fb0dc5f5e4566cb3f2d3 Mon Sep 17 00:00:00 2001 From: Atilist <71230342+Atilist@users.noreply.github.com> Date: Fri, 31 May 2024 09:43:39 +0200 Subject: [PATCH] Improved Initialization Logic Moved Initializing Process to CelestialInitializer. All Events are automatically added to it. Now Events without a Time Manager are initialized properly. --- .../api/celestial/CelestialEvent.java | 1 + .../api/celestial/CelestialInitializer.java | 37 +++++++++++++++++++ .../api/celestial/CelestialTimeManager.java | 10 ----- .../stationapi/mixin/world/WorldMixin.java | 4 +- 4 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialInitializer.java diff --git a/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialEvent.java b/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialEvent.java index 2619d1c8d..2f5c2db95 100644 --- a/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialEvent.java +++ b/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialEvent.java @@ -39,6 +39,7 @@ public CelestialEvent(int frequency, String name, World world) { this.frequency = frequency; this.name = name; this.world = world; + CelestialInitializer.addEvent(this); } /** diff --git a/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialInitializer.java b/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialInitializer.java new file mode 100644 index 000000000..535d0614e --- /dev/null +++ b/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialInitializer.java @@ -0,0 +1,37 @@ +package net.modificationstation.stationapi.api.celestial; + +import java.util.LinkedList; +import java.util.List; + +/** + * Automatically handles initialization of celestial events. + * Ensures that all celestial events are loaded correctly. + */ +public class CelestialInitializer { + private static final List ALL_EVENTS = new LinkedList<>(); + + /** + * Called automatically by every celestial event. + * @param celestialEvent The event to be added. + */ + public static void addEvent(CelestialEvent celestialEvent) { + ALL_EVENTS.add(celestialEvent); + } + + /** + * Prevents duplicates when worlds are switched. + */ + public static void clearList() { + ALL_EVENTS.clear(); + } + + /** + * Initializes all events when the world is loaded, ensures correct loading of active events. + */ + public static void initializeEvents() { + for (CelestialEvent celestialEvent : ALL_EVENTS) { + if (celestialEvent == null) continue; + celestialEvent.markForInitialization(); + } + } +} diff --git a/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialTimeManager.java b/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialTimeManager.java index e53d6d659..f76e28636 100644 --- a/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialTimeManager.java +++ b/station-world-events-v0/src/main/java/net/modificationstation/stationapi/api/celestial/CelestialTimeManager.java @@ -147,14 +147,4 @@ public static void clearLists() { MIDNIGHT_START.clear(); ALL_EVENTS.clear(); } - - /** - * Initializes all events when the world is loaded, ensures correct loading of active events. - */ - public static void initializeEvents() { - for (CelestialEvent celestialEvent : ALL_EVENTS) { - if (celestialEvent == null) continue; - celestialEvent.markForInitialization(); - } - } } diff --git a/station-world-events-v0/src/main/java/net/modificationstation/stationapi/mixin/world/WorldMixin.java b/station-world-events-v0/src/main/java/net/modificationstation/stationapi/mixin/world/WorldMixin.java index 9b89b8dc3..d30e1e5b0 100644 --- a/station-world-events-v0/src/main/java/net/modificationstation/stationapi/mixin/world/WorldMixin.java +++ b/station-world-events-v0/src/main/java/net/modificationstation/stationapi/mixin/world/WorldMixin.java @@ -2,6 +2,7 @@ import net.minecraft.world.World; import net.modificationstation.stationapi.api.StationAPI; +import net.modificationstation.stationapi.api.celestial.CelestialInitializer; import net.modificationstation.stationapi.api.celestial.CelestialTimeManager; import net.modificationstation.stationapi.api.event.celestial.CelestialRegisterEvent; import net.modificationstation.stationapi.api.event.world.WorldEvent; @@ -22,9 +23,10 @@ class WorldMixin { ) private void stationapi_onCor1(CallbackInfo ci) { CelestialTimeManager.clearLists(); + CelestialInitializer.clearList(); StationAPI.EVENT_BUS.post(WorldEvent.Init.builder().world(World.class.cast(this)).build()); StationAPI.EVENT_BUS.post(CelestialRegisterEvent.builder().world(World.class.cast(this)).build()); - CelestialTimeManager.initializeEvents(); + CelestialInitializer.initializeEvents(); } @Inject(