From e4f64df660670d035909b95cf2e04aa71e36ac70 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 22 Jun 2021 22:36:47 -0500 Subject: [PATCH] Add snow to biome only Lod generation --- .../lod/builders/LodChunkGenWorker.java | 9 +- .../seibel/lod/builders/LodServerWorld.java | 276 ++++++++++++++++++ 2 files changed, 283 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/seibel/lod/builders/LodServerWorld.java diff --git a/src/main/java/com/seibel/lod/builders/LodChunkGenWorker.java b/src/main/java/com/seibel/lod/builders/LodChunkGenWorker.java index 23c470ce3..eec38da21 100644 --- a/src/main/java/com/seibel/lod/builders/LodChunkGenWorker.java +++ b/src/main/java/com/seibel/lod/builders/LodChunkGenWorker.java @@ -19,6 +19,8 @@ import net.minecraft.world.chunk.ChunkPrimer; import net.minecraft.world.chunk.ChunkStatus; import net.minecraft.world.chunk.IChunk; import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.feature.IceAndSnowFeature; +import net.minecraft.world.gen.feature.NoFeatureConfig; import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorldLightManager; import net.minecraftforge.common.WorldWorkerManager.IWorker; @@ -27,7 +29,7 @@ import net.minecraftforge.common.WorldWorkerManager.IWorker; * This is used to generate a LodChunk at a given ChunkPos. * * @author James Seibel - * @version 6-19-2021 + * @version 6-22-2021 */ public class LodChunkGenWorker implements IWorker { @@ -161,8 +163,11 @@ public class LodChunkGenWorker implements IWorker // for(IChunk c : chunkList) // ((ChunkPrimer)c).setStatus(ChunkStatus.LIQUID_CARVERS); -// ChunkStatus.FEATURES.doGenerationWork(serverWorld, chunkGen, serverWorld.getStructureTemplateManager(), (ServerWorldLightManager) serverWorld.getLightManager(), null, chunkList); + //ChunkStatus.FEATURES.doGenerationWork(serverWorld, chunkGen, serverWorld.getStructureTemplateManager(), (ServerWorldLightManager) serverWorld.getLightManager(), null, chunkList); + LodServerWorld lodWorld = new LodServerWorld(chunk); + IceAndSnowFeature snowFeature = new IceAndSnowFeature(NoFeatureConfig.field_236558_a_); + snowFeature.generate(lodWorld, chunkGen, serverWorld.rand, chunk.getPos().asBlockPos(), null); LodChunk lod = lodBuilder.generateLodFromChunk(chunk, false); lodDim.addLod(lod); diff --git a/src/main/java/com/seibel/lod/builders/LodServerWorld.java b/src/main/java/com/seibel/lod/builders/LodServerWorld.java new file mode 100644 index 000000000..43e5b5f9c --- /dev/null +++ b/src/main/java/com/seibel/lod/builders/LodServerWorld.java @@ -0,0 +1,276 @@ +package com.seibel.lod.builders; + +import java.util.HashMap; +import java.util.List; +import java.util.Random; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import com.seibel.lod.objects.LodChunk; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.particles.IParticleData; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.SectionPos; +import net.minecraft.util.registry.DynamicRegistries; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.DimensionType; +import net.minecraft.world.ISeedReader; +import net.minecraft.world.ITickList; +import net.minecraft.world.LightType; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeManager; +import net.minecraft.world.border.WorldBorder; +import net.minecraft.world.chunk.AbstractChunkProvider; +import net.minecraft.world.chunk.ChunkStatus; +import net.minecraft.world.chunk.IChunk; +import net.minecraft.world.gen.Heightmap; +import net.minecraft.world.gen.Heightmap.Type; +import net.minecraft.world.gen.feature.structure.Structure; +import net.minecraft.world.gen.feature.structure.StructureStart; +import net.minecraft.world.lighting.WorldLightManager; +import net.minecraft.world.server.ServerWorld; +import net.minecraft.world.storage.IWorldInfo; + +public class LodServerWorld implements ISeedReader { + + public HashMap heightmaps = new HashMap<>(); + + public IChunk chunk; + + public LodServerWorld(IChunk newChunk) + { + chunk = newChunk; + } + + + + @Override + public int getHeight(Type heightmapType, int x, int z) { + return chunk.getHeightmap(Type.WORLD_SURFACE_WG).getHeight(Math.abs(x % LodChunk.WIDTH), Math.abs(z % LodChunk.WIDTH)); + } + + @Override + public Biome getBiome(BlockPos pos) { + return chunk.getBiomes().getNoiseBiome(pos.getX(), pos.getY(), pos.getZ()); + } + + @Override + public boolean setBlockState(BlockPos pos, BlockState state, int flags, int recursionLeft) { + return chunk.setBlockState(pos, state, false) == state; + } + + @Override + public BlockState getBlockState(BlockPos pos) { + return chunk.getBlockState(pos); + } + + @Override + public FluidState getFluidState(BlockPos pos) { + return chunk.getFluidState(pos); + } + + @Override + public int getLightFor(LightType type, BlockPos pos) + { + return 0; + } + + + + + @Override + public ServerWorld getWorld() { + // TODO Auto-generated method stub + return null; + } + + @Override + public ITickList getPendingBlockTicks() { + // TODO Auto-generated method stub + return null; + } + + @Override + public ITickList getPendingFluidTicks() { + // TODO Auto-generated method stub + return null; + } + + @Override + public IWorldInfo getWorldInfo() { + // TODO Auto-generated method stub + return null; + } + + @Override + public DifficultyInstance getDifficultyForLocation(BlockPos pos) { + // TODO Auto-generated method stub + return null; + } + + @Override + public AbstractChunkProvider getChunkProvider() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Random getRandom() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void playSound(PlayerEntity player, BlockPos pos, SoundEvent soundIn, SoundCategory category, float volume, + float pitch) { + // TODO Auto-generated method stub + + } + + @Override + public void addParticle(IParticleData particleData, double x, double y, double z, double xSpeed, double ySpeed, + double zSpeed) { + // TODO Auto-generated method stub + + } + + @Override + public void playEvent(PlayerEntity player, int type, BlockPos pos, int data) { + // TODO Auto-generated method stub + + } + + @Override + public DynamicRegistries func_241828_r() { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getEntitiesInAABBexcluding(Entity entityIn, AxisAlignedBB boundingBox, + Predicate predicate) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getEntitiesWithinAABB(Class clazz, AxisAlignedBB aabb, + Predicate filter) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getPlayers() { + // TODO Auto-generated method stub + return null; + } + + @Override + public IChunk getChunk(int x, int z, ChunkStatus requiredStatus, boolean nonnull) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getSkylightSubtracted() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public BiomeManager getBiomeManager() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Biome getNoiseBiomeRaw(int x, int y, int z) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isRemote() { + // TODO Auto-generated method stub + return false; + } + + @Override + public int getSeaLevel() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public DimensionType getDimensionType() { + // TODO Auto-generated method stub + return null; + } + + @Override + public float func_230487_a_(Direction p_230487_1_, boolean p_230487_2_) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public WorldLightManager getLightManager() { + // TODO Auto-generated method stub + return null; + } + + @Override + public TileEntity getTileEntity(BlockPos pos) { + // TODO Auto-generated method stub + return null; + } + + @Override + public WorldBorder getWorldBorder() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean hasBlockState(BlockPos pos, Predicate state) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean removeBlock(BlockPos pos, boolean isMoving) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean destroyBlock(BlockPos pos, boolean dropBlock, Entity entity, int recursionLeft) { + // TODO Auto-generated method stub + return false; + } + + @Override + public long getSeed() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public Stream> func_241827_a(SectionPos p_241827_1_, Structure p_241827_2_) { + // TODO Auto-generated method stub + return null; + } + +}