diff --git a/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodGenWorker.java b/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodGenWorker.java index 043bf810d..7c5aa90e6 100644 --- a/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodGenWorker.java +++ b/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodGenWorker.java @@ -28,11 +28,12 @@ import com.seibel.lod.core.builders.lodBuilding.LodBuilder; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.objects.lod.LodDimension; import com.seibel.lod.core.util.LodUtil; +import com.seibel.lod.core.wrapperAdapters.IWrapperFactory; import com.seibel.lod.core.wrapperAdapters.SingletonHandler; import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper; import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; -import com.seibel.lod.wrappers.worldGeneration.WorldGeneratorWrapper; +import com.seibel.lod.core.wrapperAdapters.worldGeneration.AbstractWorldGeneratorWrapper; import net.minecraftforge.common.WorldWorkerManager.IWorker; @@ -45,6 +46,7 @@ import net.minecraftforge.common.WorldWorkerManager.IWorker; public class LodGenWorker implements IWorker // TODO is there a way to have this fabric/forge independent? { private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); + private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class); public static ExecutorService genThreads = Executors.newFixedThreadPool(CONFIG.client().advanced().threading().getNumberOfWorldGenerationThreads(), new ThreadFactoryBuilder().setNameFormat("Gen-Worker-Thread-%d").build()); @@ -119,7 +121,7 @@ public class LodGenWorker implements IWorker // TODO is there a way to have this private static class LodChunkGenThread implements Runnable { - private WorldGeneratorWrapper worldGenWrapper; + private AbstractWorldGeneratorWrapper worldGenWrapper; public final LodDimension lodDim; public final DistanceGenerationMode generationMode; @@ -130,7 +132,7 @@ public class LodGenWorker implements IWorker // TODO is there a way to have this LodBuilder newLodBuilder, LodDimension newLodDimension, IWorldWrapper worldWrapper) { - worldGenWrapper = new WorldGeneratorWrapper(newLodBuilder, newLodDimension, worldWrapper); + worldGenWrapper = FACTORY.createWorldGenerator(newLodBuilder, newLodDimension, worldWrapper); pos = newPos; generationMode = newGenerationMode; diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/IWrapperFactory.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/IWrapperFactory.java index ad9f15dba..72d9c6896 100644 --- a/src/main/java/com/seibel/lod/core/wrapperAdapters/IWrapperFactory.java +++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/IWrapperFactory.java @@ -1,9 +1,14 @@ package com.seibel.lod.core.wrapperAdapters; +import com.seibel.lod.core.builders.lodBuilding.LodBuilder; +import com.seibel.lod.core.objects.lod.LodDimension; import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper; import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper; +import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; +import com.seibel.lod.core.wrapperAdapters.worldGeneration.AbstractWorldGeneratorWrapper; /** + * This handles creating abstract wrapper objects. * * @author James Seibel * @version 11-18-2021 @@ -18,4 +23,7 @@ public interface IWrapperFactory public AbstractChunkPosWrapper createChunkPos(int x, int z); public AbstractChunkPosWrapper createChunkPos(AbstractChunkPosWrapper newChunkPos); public AbstractChunkPosWrapper createChunkPos(AbstractBlockPosWrapper blockPos); + + + public AbstractWorldGeneratorWrapper createWorldGenerator(LodBuilder newLodBuilder, LodDimension newLodDimension, IWorldWrapper worldWrapper); } diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/worldGeneration/AbstractWorldGeneratorWrapper.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/worldGeneration/AbstractWorldGeneratorWrapper.java new file mode 100644 index 000000000..8ca243d57 --- /dev/null +++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/worldGeneration/AbstractWorldGeneratorWrapper.java @@ -0,0 +1,31 @@ +package com.seibel.lod.core.wrapperAdapters.worldGeneration; + +import com.seibel.lod.core.builders.lodBuilding.LodBuilder; +import com.seibel.lod.core.enums.config.DistanceGenerationMode; +import com.seibel.lod.core.objects.lod.LodDimension; +import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper; +import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; + +/** + * This is used for generating chunks + * in a variety of detail and threading levels. + * + * @author James Seibel + * @version 11-20-2021 + */ +public abstract class AbstractWorldGeneratorWrapper +{ + public AbstractWorldGeneratorWrapper(LodBuilder newLodBuilder, LodDimension newLodDimension, IWorldWrapper worldWrapper) + { + + } + + + public abstract void generateBiomesOnly(AbstractChunkPosWrapper pos, DistanceGenerationMode generationMode); + + public abstract void generateSurface(AbstractChunkPosWrapper pos); + + public abstract void generateFeatures(AbstractChunkPosWrapper pos); + + public abstract void generateFull(AbstractChunkPosWrapper pos); +} diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/worldGeneration/IWorldGeneratorWrapper.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/worldGeneration/IWorldGeneratorWrapper.java deleted file mode 100644 index 660f22d02..000000000 --- a/src/main/java/com/seibel/lod/core/wrapperAdapters/worldGeneration/IWorldGeneratorWrapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.seibel.lod.core.wrapperAdapters.worldGeneration; - -import com.seibel.lod.core.enums.config.DistanceGenerationMode; -import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper; - -/** - * This class contains all the information to generate - * chunks. - * - * @author James Seibel - * @version 11-20-2021 - */ -public interface IWorldGeneratorWrapper -{ - public void generateBiomesOnly(AbstractChunkPosWrapper pos, DistanceGenerationMode generationMode); - - public void generateSurface(AbstractChunkPosWrapper pos); - - public void generateFeatures(AbstractChunkPosWrapper pos); - - public void generateFull(AbstractChunkPosWrapper pos); -} diff --git a/src/main/java/com/seibel/lod/wrappers/DependencySetup.java b/src/main/java/com/seibel/lod/wrappers/DependencySetup.java index 9e21cb984..92dbb8512 100644 --- a/src/main/java/com/seibel/lod/wrappers/DependencySetup.java +++ b/src/main/java/com/seibel/lod/wrappers/DependencySetup.java @@ -20,7 +20,7 @@ import com.seibel.lod.wrappers.minecraft.MinecraftWrapper; * are loaded. * * @author James Seibel - * @version 11-16-2021 + * @version 11-20-2021 */ public class DependencySetup { diff --git a/src/main/java/com/seibel/lod/wrappers/WrapperFactory.java b/src/main/java/com/seibel/lod/wrappers/WrapperFactory.java index 596280411..428cbaf89 100644 --- a/src/main/java/com/seibel/lod/wrappers/WrapperFactory.java +++ b/src/main/java/com/seibel/lod/wrappers/WrapperFactory.java @@ -1,16 +1,21 @@ package com.seibel.lod.wrappers; +import com.seibel.lod.core.builders.lodBuilding.LodBuilder; +import com.seibel.lod.core.objects.lod.LodDimension; import com.seibel.lod.core.wrapperAdapters.IWrapperFactory; import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper; import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper; +import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; +import com.seibel.lod.core.wrapperAdapters.worldGeneration.AbstractWorldGeneratorWrapper; import com.seibel.lod.wrappers.block.BlockPosWrapper; import com.seibel.lod.wrappers.chunk.ChunkPosWrapper; +import com.seibel.lod.wrappers.worldGeneration.WorldGeneratorWrapper; /** * This handles creating abstract wrapper objects. * * @author James Seibel - * @version 11-18-2021 + * @version 11-20-2021 */ public class WrapperFactory implements IWrapperFactory { @@ -58,5 +63,10 @@ public class WrapperFactory implements IWrapperFactory + @Override + public AbstractWorldGeneratorWrapper createWorldGenerator(LodBuilder newLodBuilder, LodDimension newLodDimension, IWorldWrapper worldWrapper) + { + return new WorldGeneratorWrapper(newLodBuilder, newLodDimension, worldWrapper); + } } diff --git a/src/main/java/com/seibel/lod/wrappers/worldGeneration/WorldGeneratorWrapper.java b/src/main/java/com/seibel/lod/wrappers/worldGeneration/WorldGeneratorWrapper.java index 63fd10283..d60d73ef3 100644 --- a/src/main/java/com/seibel/lod/wrappers/worldGeneration/WorldGeneratorWrapper.java +++ b/src/main/java/com/seibel/lod/wrappers/worldGeneration/WorldGeneratorWrapper.java @@ -16,7 +16,7 @@ import com.seibel.lod.core.wrapperAdapters.SingletonHandler; import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper; import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; -import com.seibel.lod.core.wrapperAdapters.worldGeneration.IWorldGeneratorWrapper; +import com.seibel.lod.core.wrapperAdapters.worldGeneration.AbstractWorldGeneratorWrapper; import com.seibel.lod.wrappers.chunk.ChunkPosWrapper; import com.seibel.lod.wrappers.chunk.ChunkWrapper; import com.seibel.lod.wrappers.world.WorldWrapper; @@ -38,19 +38,19 @@ import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorldLightManager; /** - * This class contains all the information to generate - * chunks. + * This is used for generating chunks + * in a variety of detail and threading levels. * * @author James Seibel * @version 11-13-2021 */ -public class WorldGeneratorWrapper implements IWorldGeneratorWrapper +public class WorldGeneratorWrapper extends AbstractWorldGeneratorWrapper { private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); /** * If a configured feature fails for whatever reason, - * add it to this list. This is to hopefully remove any + * add it to this list. This will hopefully remove any * features that could cause issues down the line. */ private static final ConcurrentHashMap> FEATURES_TO_AVOID = new ConcurrentHashMap<>(); @@ -62,6 +62,8 @@ public class WorldGeneratorWrapper implements IWorldGeneratorWrapper public WorldGeneratorWrapper(LodBuilder newLodBuilder, LodDimension newLodDimension, IWorldWrapper worldWrapper) { + super(newLodBuilder, newLodDimension, worldWrapper); + lodBuilder = newLodBuilder; lodDim = newLodDimension; serverWorld = ((WorldWrapper) worldWrapper).getServerWorld();