From 68ef9126ed77957ffbd8558ae5f20e0b4f086f92 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 15 Aug 2022 22:21:08 -0500 Subject: [PATCH] Hook up DhApiWorldGeneratorOverrideRegister set up Dependency Injectors for clearing their bound items. add simplified constructors for DhApiResult --- .../external/items/objects/DhApiResult.java | 13 ++++++++-- .../DhApiWorldGeneratorOverrideRegister.java | 25 ++++++++++++++++--- .../DependencyInjector.java | 10 +++++++- .../dependencyInjection/OverrideInjector.java | 16 +++++++++++- .../WorldGeneratorInjector.java | 10 +++++++- 5 files changed, 65 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/seibel/lod/core/api/external/items/objects/DhApiResult.java b/src/main/java/com/seibel/lod/core/api/external/items/objects/DhApiResult.java index 38e11d979..5a42e8f9b 100644 --- a/src/main/java/com/seibel/lod/core/api/external/items/objects/DhApiResult.java +++ b/src/main/java/com/seibel/lod/core/api/external/items/objects/DhApiResult.java @@ -4,7 +4,7 @@ package com.seibel.lod.core.api.external.items.objects; * Allows for more descriptive non-critical failure states. * * @author James Seibel - * @version 2022-7-11 + * @version 2022-8-15 */ public class DhApiResult { @@ -15,9 +15,18 @@ public class DhApiResult public final String errorMessage; - public DhApiResult(boolean newSuccess, String newErrorMessage) + private DhApiResult(boolean newSuccess, String newErrorMessage) { this.success = newSuccess; this.errorMessage = newErrorMessage; } + + + + public static DhApiResult createSuccess() { return new DhApiResult(true, ""); } + public static DhApiResult createSuccess(String message) { return new DhApiResult(true, message); } + + public static DhApiResult createFail() { return new DhApiResult(false, ""); } + public static DhApiResult createFail(String message) { return new DhApiResult(false, message); } + } diff --git a/src/main/java/com/seibel/lod/core/api/external/methods/override/DhApiWorldGeneratorOverrideRegister.java b/src/main/java/com/seibel/lod/core/api/external/methods/override/DhApiWorldGeneratorOverrideRegister.java index 93ba53aa8..8cb8e7fde 100644 --- a/src/main/java/com/seibel/lod/core/api/external/methods/override/DhApiWorldGeneratorOverrideRegister.java +++ b/src/main/java/com/seibel/lod/core/api/external/methods/override/DhApiWorldGeneratorOverrideRegister.java @@ -3,12 +3,13 @@ package com.seibel.lod.core.api.external.methods.override; import com.seibel.lod.core.api.external.items.interfaces.override.IDhApiWorldGenerator; import com.seibel.lod.core.api.external.items.interfaces.world.IDhApiLevelWrapper; import com.seibel.lod.core.api.external.items.objects.DhApiResult; +import com.seibel.lod.core.handlers.dependencyInjection.WorldGeneratorInjector; /** - * Handles adding/removing world generator overrides. + * Handles adding world generator overrides. * * @author James Seibel - * @version 2022-7-15 + * @version 2022-8-15 */ public class DhApiWorldGeneratorOverrideRegister { @@ -22,7 +23,15 @@ public class DhApiWorldGeneratorOverrideRegister */ public static DhApiResult registerWorldGeneratorOverride(IDhApiWorldGenerator worldGenerator) { - throw new UnsupportedOperationException(); + try + { + WorldGeneratorInjector.INSTANCE.bind(worldGenerator); + return DhApiResult.createSuccess(); + } + catch (Exception e) + { + return DhApiResult.createFail(e.getMessage()); + } } /** @@ -34,7 +43,15 @@ public class DhApiWorldGeneratorOverrideRegister */ public static DhApiResult registerWorldGeneratorOverride(IDhApiLevelWrapper levelWrapper, IDhApiWorldGenerator worldGenerator) { - throw new UnsupportedOperationException(); + try + { + WorldGeneratorInjector.INSTANCE.bind(levelWrapper, worldGenerator); + return DhApiResult.createSuccess(); + } + catch (Exception e) + { + return DhApiResult.createFail(e.getMessage()); + } } diff --git a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/DependencyInjector.java b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/DependencyInjector.java index e11fbe721..2dd0ab61a 100644 --- a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/DependencyInjector.java +++ b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/DependencyInjector.java @@ -28,7 +28,7 @@ import java.util.Map; * * @param extends IBindable and defines what interfaces this dependency handler can deal with. * @author James Seibel - * @version 2022-7-21 + * @version 2022-8-15 */ public class DependencyInjector { @@ -221,6 +221,14 @@ public class DependencyInjector + /** Removes all bound dependencies. */ + public void clear() + { + this.dependencies.clear(); + } + + + /** Runs delayed setup for any dependencies that require it. */ public void runDelayedSetup() { diff --git a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/OverrideInjector.java b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/OverrideInjector.java index bdfa92826..d108bb968 100644 --- a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/OverrideInjector.java +++ b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/OverrideInjector.java @@ -30,7 +30,7 @@ import com.seibel.lod.core.util.StringUtil; * This is done so other mods can override our methods to improve features down the line. * * @author James Seibel - * @version 2022-7-26 + * @version 2022-8-15 */ public class OverrideInjector { @@ -146,6 +146,20 @@ public class OverrideInjector } + + /** Removes all bound overrides. */ + public void clear() + { + this.primaryInjector.clear(); + this.secondaryInjector.clear(); + this.coreInjector.clear(); + } + + + + + + /** Small helper method so we don't have to use DhApi enums. */ private EOverridePriority getCorePriorityEnum(IDhApiOverrideable override) { diff --git a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/WorldGeneratorInjector.java b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/WorldGeneratorInjector.java index 76d2ad6c3..b4fd51f39 100644 --- a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/WorldGeneratorInjector.java +++ b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/WorldGeneratorInjector.java @@ -30,7 +30,7 @@ import java.util.HashMap; * This is done so other mods can override our world generator(s) to improve or replace them. * * @author James Seibel - * @version 2022-7-27 + * @version 2022-8-15 */ public class WorldGeneratorInjector { @@ -140,4 +140,12 @@ public class WorldGeneratorInjector } + + /** Removes all bound world generators. */ + public void clearBoundDependencies() // TODO this should be done when leaving from the current world/server + { + this.worldGeneratorByLevelWrapper.clear(); + this.backupUniversalWorldGenerators.clear(); + } + }