Change WorldGeneratorWrapper to abstract

it was using a interface
This commit is contained in:
James Seibel
2021-11-20 11:39:08 -06:00
parent 5a170874d3
commit 21ab42aff1
7 changed files with 63 additions and 32 deletions
@@ -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;
@@ -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);
}
@@ -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);
}
@@ -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);
}
@@ -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
{
@@ -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);
}
}
@@ -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<Integer, ConfiguredFeature<?, ?>> 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();