From 92a98aba96c87cff92fad838509a1cc048792d07 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 13 Sep 2022 21:44:00 -0500 Subject: [PATCH] Hook up the API events (some are missing parameter objects) --- .../methods/events/DhApiEventRegister.java | 22 +++++++------ .../dependencyInjection/ApiCoreInjectors.java | 32 +++++++++++++++++++ .../test/java/tests/EventInjectorTest.java | 2 +- .../lod/core/api/internal/ClientApi.java | 14 ++++---- .../lod/core/api/internal/ServerApi.java | 10 ++++-- 5 files changed, 61 insertions(+), 19 deletions(-) create mode 100644 api/src/main/java/com/seibel/lod/core/interfaces/dependencyInjection/ApiCoreInjectors.java diff --git a/api/src/main/java/com/seibel/lod/api/methods/events/DhApiEventRegister.java b/api/src/main/java/com/seibel/lod/api/methods/events/DhApiEventRegister.java index 447dd2285..c63917066 100644 --- a/api/src/main/java/com/seibel/lod/api/methods/events/DhApiEventRegister.java +++ b/api/src/main/java/com/seibel/lod/api/methods/events/DhApiEventRegister.java @@ -2,15 +2,19 @@ package com.seibel.lod.api.methods.events; import com.seibel.lod.api.items.objects.DhApiResult; import com.seibel.lod.api.methods.events.interfaces.IDhApiEvent; +import com.seibel.lod.core.interfaces.dependencyInjection.ApiCoreInjectors; +import com.seibel.lod.core.interfaces.dependencyInjection.IDhApiEventInjector; /** * Handles adding/removing event handlers. * * @author James Seibel - * @version 2022-9-8 + * @version 2022-9-13 */ public class DhApiEventRegister { + private static final IDhApiEventInjector EVENT_INJECTOR = ApiCoreInjectors.getInstance().eventInjector; + /** * Registers the given event handler.
* Only one eventHandler of a specific class can be registered at a time. @@ -21,7 +25,7 @@ public class DhApiEventRegister { try { -// DhApiEventInjector.INSTANCE.bind(eventInterface, eventHandlerImplementation); + EVENT_INJECTOR.bind(eventInterface, eventHandlerImplementation); return DhApiResult.createSuccess(); } catch (IllegalStateException e) @@ -37,14 +41,14 @@ public class DhApiEventRegister */ public static DhApiResult off(Class eventInterface, Class eventHandlerClass) { -// if (DhApiEventInjector.INSTANCE.unbind(eventInterface, eventHandlerClass)) -// { -// return DhApiResult.createSuccess(); -// } -// else -// { + if (EVENT_INJECTOR.unbind(eventInterface, eventHandlerClass)) + { + return DhApiResult.createSuccess(); + } + else + { return DhApiResult.createFail("No event handler [" + eventHandlerClass.getSimpleName() + "] was bound for the event [" + eventInterface.getSimpleName() + "]."); -// } + } } } diff --git a/api/src/main/java/com/seibel/lod/core/interfaces/dependencyInjection/ApiCoreInjectors.java b/api/src/main/java/com/seibel/lod/core/interfaces/dependencyInjection/ApiCoreInjectors.java new file mode 100644 index 000000000..a13bf05ec --- /dev/null +++ b/api/src/main/java/com/seibel/lod/core/interfaces/dependencyInjection/ApiCoreInjectors.java @@ -0,0 +1,32 @@ +package com.seibel.lod.core.interfaces.dependencyInjection; + +import com.seibel.lod.core.DependencyInjection.DhApiEventInjector; + +/** + * This singleton holds the dependency injectors used + * between Core and the API. + * IE: this is how Core and the API talk to each other. + * + * @author James Seibel + * @version 2022-9-13 + */ +public class ApiCoreInjectors +{ + private static ApiCoreInjectors INSTANCE; + + + public final IDhApiEventInjector eventInjector = new DhApiEventInjector(); + + + + public static ApiCoreInjectors getInstance() + { + if (INSTANCE == null) + { + INSTANCE = new ApiCoreInjectors(); + } + return INSTANCE; + } + + +} diff --git a/api/src/test/java/tests/EventInjectorTest.java b/api/src/test/java/tests/EventInjectorTest.java index 4888aa9fa..cbd8c85aa 100644 --- a/api/src/test/java/tests/EventInjectorTest.java +++ b/api/src/test/java/tests/EventInjectorTest.java @@ -14,7 +14,7 @@ import java.util.ArrayList; */ public class EventInjectorTest { - + // //@Test // public void testEventDependencies() // this also tests list dependencies since there can be more than one event handler bound per event // { diff --git a/core/src/main/java/com/seibel/lod/core/api/internal/ClientApi.java b/core/src/main/java/com/seibel/lod/core/api/internal/ClientApi.java index 8c8a4d86d..c0af2a774 100644 --- a/core/src/main/java/com/seibel/lod/core/api/internal/ClientApi.java +++ b/core/src/main/java/com/seibel/lod/core/api/internal/ClientApi.java @@ -19,7 +19,9 @@ package com.seibel.lod.core.api.internal; +import com.seibel.lod.api.methods.events.abstractEvents.*; import com.seibel.lod.api.methods.events.sharedParameterObjects.DhApiRenderParam; +import com.seibel.lod.core.DependencyInjection.DhApiEventInjector; import com.seibel.lod.core.level.IClientLevel; import com.seibel.lod.core.config.Config; import com.seibel.lod.core.ModInfo; @@ -153,7 +155,7 @@ public class ClientApi //TODO: Implement // TODO: potentially add a list of chunks that were updated during the save -// DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelSaveEvent.class, new DhApiLevelSaveEvent.EventParam(level)); + DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelSaveEvent.class, new DhApiLevelSaveEvent.EventParam(null)); // TODO create a wrapper object to pass back } } @@ -164,7 +166,7 @@ public class ClientApi if (SharedApi.currentWorld != null) { SharedApi.currentWorld.unloadLevel(level); -// DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelUnloadEvent.class, new DhApiLevelUnloadEvent.EventParam(level)); + DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelUnloadEvent.class, new DhApiLevelUnloadEvent.EventParam(null)); // TODO create a wrapper object to pass back } } @@ -175,7 +177,7 @@ public class ClientApi if (SharedApi.currentWorld != null) { SharedApi.currentWorld.getOrLoadLevel(level); -// DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelLoadEvent.class, new DhApiLevelLoadEvent.EventParam(level)); + DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelLoadEvent.class, new DhApiLevelLoadEvent.EventParam(null)); // TODO create a wrapper object to pass back } } @@ -268,11 +270,11 @@ public class ClientApi RenderUtil.createLodProjectionMatrix(mcProjectionMatrix, partialTicks), RenderUtil.createLodModelViewMatrix(mcModelViewMatrix), partialTicks); -// boolean renderingCanceled = DhApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderEvent.class, new DhApiBeforeRenderEvent.EventParam(renderEventParam)); - if (!rendererDisabledBecauseOfExceptions)// && !renderingCanceled) + boolean renderingCanceled = DhApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderEvent.class, new DhApiBeforeRenderEvent.EventParam(renderEventParam)); + if (!rendererDisabledBecauseOfExceptions && !renderingCanceled) { level.render(mcModelViewMatrix, mcProjectionMatrix, partialTicks, profiler); -// DhApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterRenderEvent.class, new DhApiAfterRenderEvent.EventParam(renderEventParam)); + DhApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterRenderEvent.class, new DhApiAfterRenderEvent.EventParam(renderEventParam)); } } else if (Config.Client.Advanced.Debugging.rendererMode.get() == ERendererMode.DEBUG) diff --git a/core/src/main/java/com/seibel/lod/core/api/internal/ServerApi.java b/core/src/main/java/com/seibel/lod/core/api/internal/ServerApi.java index 4454ad42f..cce8bf6a3 100644 --- a/core/src/main/java/com/seibel/lod/core/api/internal/ServerApi.java +++ b/core/src/main/java/com/seibel/lod/core/api/internal/ServerApi.java @@ -19,6 +19,10 @@ package com.seibel.lod.core.api.internal; +import com.seibel.lod.api.methods.events.abstractEvents.DhApiLevelLoadEvent; +import com.seibel.lod.api.methods.events.abstractEvents.DhApiLevelSaveEvent; +import com.seibel.lod.api.methods.events.abstractEvents.DhApiLevelUnloadEvent; +import com.seibel.lod.core.DependencyInjection.DhApiEventInjector; import com.seibel.lod.core.level.ILevel; import com.seibel.lod.core.world.DhClientServerWorld; import com.seibel.lod.core.world.DhServerWorld; @@ -98,7 +102,7 @@ public class ServerApi if (SharedApi.currentWorld != null) { SharedApi.currentWorld.getOrLoadLevel(level); -// DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelLoadEvent.class, new DhApiLevelLoadEvent.EventParam(new DhApiLevelWrapper(level))); + DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelLoadEvent.class, new DhApiLevelLoadEvent.EventParam(null)); // TODO create a wrapper object to pass back } } public void serverLevelUnloadEvent(IServerLevelWrapper level) { @@ -106,7 +110,7 @@ public class ServerApi if (SharedApi.currentWorld != null) { SharedApi.currentWorld.unloadLevel(level); -// DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelUnloadEvent.class, new DhApiLevelUnloadEvent.EventParam(new DhApiLevelWrapper(level))); + DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelUnloadEvent.class, new DhApiLevelUnloadEvent.EventParam(null)); // TODO create a wrapper object to pass back } } @@ -119,7 +123,7 @@ public class ServerApi for (ILevel level : SharedApi.currentWorld.getAllLoadedLevels()) { -// DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelSaveEvent.class, new DhApiLevelSaveEvent.EventParam(new DhApiLevelWrapper(level.getLevelWrapper()))); + DhApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelSaveEvent.class, new DhApiLevelSaveEvent.EventParam(null)); // TODO create a wrapper object to pass back } } }