diff --git a/api/src/main/java/com/seibel/lod/api/DhApiMain.java b/api/src/main/java/com/seibel/lod/api/DhApiMain.java index fca00a277..ca04bc61c 100644 --- a/api/src/main/java/com/seibel/lod/api/DhApiMain.java +++ b/api/src/main/java/com/seibel/lod/api/DhApiMain.java @@ -1,13 +1,28 @@ package com.seibel.lod.api; -import com.seibel.lod.api.items.interfaces.config.IDhApiConfig; +import com.seibel.lod.api.interfaces.config.IDhApiConfig; +import com.seibel.lod.api.interfaces.override.IDhApiOverrideable; +import com.seibel.lod.api.interfaces.override.worldGenerator.IDhApiWorldGeneratorOverrideRegister; +import com.seibel.lod.api.methods.data.DhApiTerrainDataRepo; +import com.seibel.lod.api.methods.override.DhApiWorldGeneratorOverrideRegister; import com.seibel.lod.core.DependencyInjection.DhApiEventInjector; +import com.seibel.lod.core.DependencyInjection.OverrideInjector; import com.seibel.lod.core.ModInfo; +import com.seibel.lod.api.interfaces.data.IDhApiTerrainDataRepo; import com.seibel.lod.core.interfaces.dependencyInjection.IDhApiEventInjector; +import com.seibel.lod.core.interfaces.dependencyInjection.IOverrideInjector; /** - * This holds API methods related to version numbers and other unchanging endpoints. - * This shouldn't change between API versions. + * This is the masthead of the API, almost everything you could want to do + * can be achieved from here.
+ * For example: you can access singletons which handle the config or event binding.

+ * + * Q: Why should I use this class instead of just getting the API singleton I need?
+ * + * A: This way there is a lower chance of your code breaking if we change something on our end. + * For example, if we realized there is a much better way of handling dependency injection we would keep the + * interface the same so your code doesn't have to change. Whereas if you were directly referencing + * the concrete object we replaced, there would be issues. * * @author James Seibel * @version 2022-9-16 @@ -31,10 +46,19 @@ public class DhApiMain /** Used to bind/unbind DH Api events. */ public static final IDhApiEventInjector events = DhApiEventInjector.INSTANCE; + /** Used to bind/unbind DH Api events. */ + public static final IDhApiWorldGeneratorOverrideRegister worldGenOverrides = DhApiWorldGeneratorOverrideRegister.INSTANCE; - /** This version should only be updated when breaking changes are introduced to the DH API */ + /** Used to bind overrides to change DH's core behavior. */ + public static final IOverrideInjector overrides = OverrideInjector.INSTANCE; + + /** Used to interact with DH's terrain data. */ + public static final IDhApiTerrainDataRepo terrainRepo = DhApiTerrainDataRepo.INSTANCE; + + + /** This version should only be updated when breaking changes are introduced to the DH API. */ public static int getApiMajorVersion() { return ModInfo.API_MAJOR_VERSION; } - /** This version should be updated whenever new methods are added to the DH API */ + /** This version should be updated whenever new methods are added to the DH API. */ public static int getApiMinorVersion() { return ModInfo.API_MINOR_VERSION; } /** Returns the mod's version number in the format: Major.Minor.Patch */ diff --git a/api/src/main/java/com/seibel/lod/api/interfaces/data/IDhApiTerrainDataRepo.java b/api/src/main/java/com/seibel/lod/api/interfaces/data/IDhApiTerrainDataRepo.java new file mode 100644 index 000000000..31b10b6de --- /dev/null +++ b/api/src/main/java/com/seibel/lod/api/interfaces/data/IDhApiTerrainDataRepo.java @@ -0,0 +1,48 @@ +package com.seibel.lod.api.interfaces.data; + +import com.seibel.lod.api.objects.DhApiResult; +import com.seibel.lod.api.objects.data.DhApiTerrainDataPoint; + +/** + * @author James Seibel + * @version 2022-9-16 + */ +public interface IDhApiTerrainDataRepo +{ + + /** + * Returns the terrain data at the given block position. + * Null if the position hasn't been generated. + */ + DhApiTerrainDataPoint getDataAtBlockPos(int blockPosX, int blockPosY, int blockPosZ); + /** Sets the terrain data at the given block position. */ + DhApiResult setDataAtBlockPos(int blockPosX, int blockPosY, int blockPosZ, DhApiTerrainDataPoint newData); + + /** + * Returns the average color for the chunk at the given chunk position. + * Returns null if the position hasn't been generated. + */ + DhApiTerrainDataPoint getDataAtChunkPos(int chunkPosX, int chunkPosZ); + /** Sets the terrain data at the given chunk position. */ + DhApiResult setDataAtChunkPos(int chunkPosX, int chunkPosZ, DhApiTerrainDataPoint newData); + + /** + * Returns the average color for the chunk at the given chunk position. + * May return inaccurate data if the whole region hasn't been generated yet. + * Returns null if the position hasn't been generated. + */ + DhApiTerrainDataPoint getDataAtRegionPos(int regionPosX, int regionPosZ); + /** Sets the terrain data at the given chunk position. */ + DhApiResult setDataAtRegionPos(int regionPosX, int regionPosZ, DhApiTerrainDataPoint newData); + + + /** + * Returns the average color for the chunk at the given chunk position. + * May return inaccurate data if the whole region hasn't been generated yet. + * Returns null if the position hasn't been generated. + */ + DhApiTerrainDataPoint getDataAtDetailLevelAndPos(short detailLevel, int relativePosX, int relativePosY, int relativePosZ); + /** Sets the terrain data at the given chunk position. */ + DhApiResult setDataAtRegionPos(short detailLevel, int relativePosX, int relativePosY, int relativePosZ, DhApiTerrainDataPoint newData); + +} diff --git a/api/src/main/java/com/seibel/lod/api/interfaces/override/worldGenerator/IDhApiWorldGeneratorOverrideRegister.java b/api/src/main/java/com/seibel/lod/api/interfaces/override/worldGenerator/IDhApiWorldGeneratorOverrideRegister.java new file mode 100644 index 000000000..6d5228fae --- /dev/null +++ b/api/src/main/java/com/seibel/lod/api/interfaces/override/worldGenerator/IDhApiWorldGeneratorOverrideRegister.java @@ -0,0 +1,34 @@ +package com.seibel.lod.api.interfaces.override.worldGenerator; + +import com.seibel.lod.api.interfaces.world.IDhApiLevelWrapper; +import com.seibel.lod.api.objects.DhApiResult; +import com.seibel.lod.core.DependencyInjection.WorldGeneratorInjector; + +/** + * Handles adding world generator overrides. + * + * @author James Seibel + * @version 2022-9-16 + */ +public interface IDhApiWorldGeneratorOverrideRegister +{ + /** + * Registers the given world generator.

+ * + * This registers a backup world generator for all levels and will be overridden if there + * is a world generator for the specific level.
+ * If another world generator has already been registered, DhApiResult will return + * the name of the previously registered generator and success = false. + */ + DhApiResult registerWorldGeneratorOverride(IDhApiWorldGenerator worldGenerator); + + /** + * Registers the given world generator for the given level.

+ * + * Only one world generator can be registered for a specific level at a given time.
+ * If another world generator has already been registered, DhApiResult will return + * the name of the previously registered generator and success = false. + */ + DhApiResult registerWorldGeneratorOverride(IDhApiLevelWrapper levelWrapper, IDhApiWorldGenerator worldGenerator); + +} diff --git a/api/src/main/java/com/seibel/lod/api/methods/data/DhApiTerrainDataRepo.java b/api/src/main/java/com/seibel/lod/api/methods/data/DhApiTerrainDataRepo.java index 83ace91f1..deb2855de 100644 --- a/api/src/main/java/com/seibel/lod/api/methods/data/DhApiTerrainDataRepo.java +++ b/api/src/main/java/com/seibel/lod/api/methods/data/DhApiTerrainDataRepo.java @@ -1,7 +1,8 @@ package com.seibel.lod.api.methods.data; -import com.seibel.lod.api.items.objects.DhApiResult; -import com.seibel.lod.api.items.objects.data.DhApiTerrainDataPoint; +import com.seibel.lod.api.objects.DhApiResult; +import com.seibel.lod.api.objects.data.DhApiTerrainDataPoint; +import com.seibel.lod.api.interfaces.data.IDhApiTerrainDataRepo; /** @@ -10,67 +11,35 @@ import com.seibel.lod.api.items.objects.data.DhApiTerrainDataPoint; * TODO once 1.7's data refactor is complete ask Leetom and/or Leonardo for help on setting these up * * @author James Seibel - * @version 2022-7-12 + * @version 2022-9-16 */ -public class DhApiTerrainDataRepo +public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo { - /** - * Returns the terrain data at the given block position. - * Null if the position hasn't been generated. - */ - public static DhApiTerrainDataPoint getDataAtBlockPos(int blockPosX, int blockPosY, int blockPosZ) - { - throw new UnsupportedOperationException(); - } - /** Sets the terrain data at the given block position. */ - public static DhApiResult setDataAtBlockPos(int blockPosX, int blockPosY, int blockPosZ, DhApiTerrainDataPoint newData) - { - throw new UnsupportedOperationException(); - } + public static DhApiTerrainDataRepo INSTANCE = new DhApiTerrainDataRepo(); - /** - * Returns the average color for the chunk at the given chunk position. - * Returns null if the position hasn't been generated. - */ - public static DhApiTerrainDataPoint getDataAtChunkPos(int chunkPosX, int chunkPosZ) - { - throw new UnsupportedOperationException(); - } - /** Sets the terrain data at the given chunk position. */ - public static DhApiResult setDataAtChunkPos(int chunkPosX, int chunkPosZ, DhApiTerrainDataPoint newData) - { - throw new UnsupportedOperationException(); - } - - /** - * Returns the average color for the chunk at the given chunk position. - * May return inaccurate data if the whole region hasn't been generated yet. - * Returns null if the position hasn't been generated. - */ - public static DhApiTerrainDataPoint getDataAtRegionPos(int regionPosX, int regionPosZ) - { - throw new UnsupportedOperationException(); - } - /** Sets the terrain data at the given chunk position. */ - public static DhApiResult setDataAtRegionPos(int regionPosX, int regionPosZ, DhApiTerrainDataPoint newData) - { - throw new UnsupportedOperationException(); - } + private DhApiTerrainDataRepo() { } - /** - * Returns the average color for the chunk at the given chunk position. - * May return inaccurate data if the whole region hasn't been generated yet. - * Returns null if the position hasn't been generated. - */ - public static DhApiTerrainDataPoint getDataAtDetailLevelAndPos(short detailLevel, int relativePosX, int relativePosY, int relativePosZ) - { - throw new UnsupportedOperationException(); - } - /** Sets the terrain data at the given chunk position. */ - public static DhApiResult setDataAtRegionPos(short detailLevel, int relativePosX, int relativePosY, int relativePosZ, DhApiTerrainDataPoint newData) - { - throw new UnsupportedOperationException(); - } + + @Override + public DhApiTerrainDataPoint getDataAtBlockPos(int blockPosX, int blockPosY, int blockPosZ) { throw new UnsupportedOperationException(); } + @Override + public DhApiResult setDataAtBlockPos(int blockPosX, int blockPosY, int blockPosZ, DhApiTerrainDataPoint newData) { throw new UnsupportedOperationException(); } + + @Override + public DhApiTerrainDataPoint getDataAtChunkPos(int chunkPosX, int chunkPosZ) { throw new UnsupportedOperationException(); } + @Override + public DhApiResult setDataAtChunkPos(int chunkPosX, int chunkPosZ, DhApiTerrainDataPoint newData) { throw new UnsupportedOperationException(); } + + @Override + public DhApiTerrainDataPoint getDataAtRegionPos(int regionPosX, int regionPosZ) { throw new UnsupportedOperationException(); } + @Override + public DhApiResult setDataAtRegionPos(int regionPosX, int regionPosZ, DhApiTerrainDataPoint newData) { throw new UnsupportedOperationException(); } + + + @Override + public DhApiTerrainDataPoint getDataAtDetailLevelAndPos(short detailLevel, int relativePosX, int relativePosY, int relativePosZ) { throw new UnsupportedOperationException(); } + @Override + public DhApiResult setDataAtRegionPos(short detailLevel, int relativePosX, int relativePosY, int relativePosZ, DhApiTerrainDataPoint newData) { throw new UnsupportedOperationException(); } } diff --git a/api/src/main/java/com/seibel/lod/api/methods/override/DhApiWorldGeneratorOverrideRegister.java b/api/src/main/java/com/seibel/lod/api/methods/override/DhApiWorldGeneratorOverrideRegister.java index 11c375a07..6dd21d4a4 100644 --- a/api/src/main/java/com/seibel/lod/api/methods/override/DhApiWorldGeneratorOverrideRegister.java +++ b/api/src/main/java/com/seibel/lod/api/methods/override/DhApiWorldGeneratorOverrideRegister.java @@ -1,56 +1,51 @@ package com.seibel.lod.api.methods.override; -import com.seibel.lod.api.items.interfaces.world.IDhApiLevelWrapper; -import com.seibel.lod.api.items.objects.DhApiResult; +import com.seibel.lod.api.interfaces.override.worldGenerator.IDhApiWorldGenerator; +import com.seibel.lod.api.interfaces.override.worldGenerator.IDhApiWorldGeneratorOverrideRegister; +import com.seibel.lod.api.interfaces.world.IDhApiLevelWrapper; +import com.seibel.lod.api.objects.DhApiResult; +import com.seibel.lod.core.DependencyInjection.WorldGeneratorInjector; /** * Handles adding world generator overrides. * * @author James Seibel - * @version 2022-9-8 + * @version 2022-9-16 */ -public class DhApiWorldGeneratorOverrideRegister +public class DhApiWorldGeneratorOverrideRegister implements IDhApiWorldGeneratorOverrideRegister { - /** - * Registers the given world generator.

- * - * This registers a backup world generator for all levels and will be overridden if there - * is a world generator for the specific level.
- * If another world generator has already been registered, DhApiResult will return - * the name of the previously registered generator and success = false. - */ -// public static DhApiResult registerWorldGeneratorOverride(ICoreDhApiWorldGenerator worldGenerator) -// { -// try -// { -// WorldGeneratorInjector.INSTANCE.bind(worldGenerator); -// return DhApiResult.createSuccess(); -// } -// catch (Exception e) -// { -// return DhApiResult.createFail(e.getMessage()); -// } -// } + public static DhApiWorldGeneratorOverrideRegister INSTANCE = new DhApiWorldGeneratorOverrideRegister(); - /** - * Registers the given world generator for the given level.

- * - * Only one world generator can be registered for a specific level at a given time.
- * If another world generator has already been registered, DhApiResult will return - * the name of the previously registered generator and success = false. - */ -// public static DhApiResult registerWorldGeneratorOverride(IDhApiLevelWrapper levelWrapper, ICoreDhApiWorldGenerator worldGenerator) -// { -// try -// { -// WorldGeneratorInjector.INSTANCE.bind(levelWrapper, worldGenerator); -// return DhApiResult.createSuccess(); -// } -// catch (Exception e) -// { -// return DhApiResult.createFail(e.getMessage()); -// } -// } + private DhApiWorldGeneratorOverrideRegister() { } + + @Override + public DhApiResult registerWorldGeneratorOverride(IDhApiWorldGenerator worldGenerator) + { + try + { + WorldGeneratorInjector.INSTANCE.bind(worldGenerator); + return DhApiResult.createSuccess(); + } + catch (Exception e) + { + return DhApiResult.createFail(e.getMessage()); + } + } + + @Override + public DhApiResult registerWorldGeneratorOverride(IDhApiLevelWrapper levelWrapper, IDhApiWorldGenerator worldGenerator) + { + try + { + WorldGeneratorInjector.INSTANCE.bind(levelWrapper, worldGenerator); + return DhApiResult.createSuccess(); + } + catch (Exception e) + { + return DhApiResult.createFail(e.getMessage()); + } + } + }