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 extends IDhApiEvent> 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
}
}
}