Imperfect but mostly working basalt generator

Generates near lava, but has trouble with chunk boundaries
Also fixed MRock
This commit is contained in:
Emmanuel BENOîT 2016-07-08 10:26:17 +02:00
parent bb88579c9f
commit b7995fa4a1
4 changed files with 86 additions and 25 deletions

View file

@ -11,6 +11,9 @@ deco No Limestone...
deco No Slate... deco No Slate...
...stairs ...stairs
...slabs ...slabs
deco No Basalt...
...stairs
...slabs
------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------
plants No? Tomatoes plants No? Tomatoes
plants No? Turnips plants No? Turnips
@ -51,7 +54,7 @@ materials No Liquids
------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------
materials.rock No Smooth limestone materials.rock No Smooth limestone
materials.rock No Smooth slate materials.rock No Smooth slate
materials.rock No Basalt materials.rock No Smooth basalt
------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------
materials.ore No Silver (native, horn silver) materials.ore No Silver (native, horn silver)
materials.ore No Olivine materials.ore No Olivine
@ -68,9 +71,12 @@ tech.tools No Pan (for e.g. panning gold)
-> limit it per chunk -> limit it per chunk
-> depend on chunk minerals -> depend on chunk minerals
------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------
tech.blackboard ??? AUGUSTIN WANTS IT!
-------------------------------------------------------------------------------------------------------
animals ??? Goats animals ??? Goats
------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------
world ??? Improved system to handle neighbouring biomes BF world ??? Improved system to handle neighbouring biomes BF
world.gen ??? Make basalt gen behave correctly at chunk boundaries BF
world ??? Volcanos world ??? Volcanos
------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------
??? ??? Sub-blocks ??? ??? Sub-blocks

View file

@ -1,11 +1,7 @@
package mmm.materials; package mmm.materials;
import java.util.List;
import mmm.utils.I_UOreGenerationRegistrar;
import mmm.utils.URegistry; import mmm.utils.URegistry;
import mmm.world.gen.WGOreCondition;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.MapColor; import net.minecraft.block.material.MapColor;
@ -16,12 +12,9 @@ import net.minecraft.creativetab.CreativeTabs;
public class MRock public class MRock
extends Block extends Block
implements I_MRock , I_UOreGenerationRegistrar implements I_MRock
{ {
private WGOreCondition[] genConditions;
public MRock( final String name , final MapColor mapColor ) public MRock( final String name , final MapColor mapColor )
{ {
this( name , mapColor , 0 , 1.5f , 10f ); this( name , mapColor , 0 , 1.5f , 10f );
@ -47,20 +40,4 @@ public class MRock
URegistry.addBlock( this ); URegistry.addBlock( this );
} }
public MRock setConditions( final WGOreCondition... genConditions )
{
this.genConditions = genConditions.clone( );
return this;
}
@Override
public void addConditions( final List< WGOreCondition > conditions )
{
for ( int i = 0 ; i < this.genConditions.length ; i++ ) {
conditions.add( this.genConditions[ i ] );
}
}
} }

View file

@ -7,6 +7,7 @@ import mmm.utils.I_UOreGenerationRegistrar;
import mmm.utils.URegistry; import mmm.utils.URegistry;
import mmm.world.biome.WBLimestoneMountains; import mmm.world.biome.WBLimestoneMountains;
import mmm.world.biome.WBLimestonePlateau; import mmm.world.biome.WBLimestonePlateau;
import mmm.world.gen.WGBasalt;
import mmm.world.gen.WGOre; import mmm.world.gen.WGOre;
import mmm.world.gen.WGOreCondition; import mmm.world.gen.WGOreCondition;
import net.minecraftforge.common.BiomeManager.BiomeType; import net.minecraftforge.common.BiomeManager.BiomeType;
@ -79,6 +80,7 @@ public class World
registrar.addConditions( conditions ); registrar.addConditions( conditions );
} }
GameRegistry.registerWorldGenerator( new WGOre( conditions ) , 0 ); GameRegistry.registerWorldGenerator( new WGOre( conditions ) , 0 );
GameRegistry.registerWorldGenerator( new WGBasalt( ) , 1000 );
} }
} }

View file

@ -3,6 +3,11 @@ package mmm.world.gen;
import java.util.Random; import java.util.Random;
import mmm.materials.Materials;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.DimensionType;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkGenerator; import net.minecraft.world.chunk.IChunkGenerator;
import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.chunk.IChunkProvider;
@ -13,13 +18,84 @@ import net.minecraftforge.fml.common.IWorldGenerator;
public class WGBasalt public class WGBasalt
implements IWorldGenerator implements IWorldGenerator
{ {
private static final IBlockState BS_BASALT = Materials.ROCK_BASALT.getDefaultState( );
@Override @Override
public void generate( final Random random , final int chunkX , final int chunkZ , final World world , public void generate( final Random random , final int chunkX , final int chunkZ , final World world ,
final IChunkGenerator chunkGenerator , final IChunkProvider chunkProvider ) final IChunkGenerator chunkGenerator , final IChunkProvider chunkProvider )
{ {
if ( world.provider.getDimensionType( ) != DimensionType.OVERWORLD ) {
return;
}
// TODO: prevent basalt from generating in some biomes // TODO: prevent basalt from generating in some biomes
// Find all rock blocks that are close to some lava
final boolean rockNearLava[] = new boolean[ 16 * 16 * 256 ];
final BlockPos.MutableBlockPos mbp = new BlockPos.MutableBlockPos( );
for ( int x = 0 ; x < 16 ; x++ ) {
for ( int z = 0 ; z < 16 ; z++ ) {
mbp.setPos( chunkX * 16 + x , 0 , chunkZ * 16 + z );
for ( int y = 0 ; y < 256 ; y++ ) {
mbp.setY( y );
final IBlockState bs = world.getBlockState( mbp );
if ( bs.getBlock( ) != Blocks.LAVA ) {
continue;
}
this.scanForRocksAround( world , rockNearLava , mbp , x , y , z );
}
}
}
// Replace some of them with basalt
int offset = 0;
for ( int x = 0 ; x < 16 ; x++ ) {
for ( int z = 0 ; z < 16 ; z++ ) {
mbp.setPos( chunkX * 16 + x , 0 , chunkZ * 16 + z );
for ( int y = 0 ; y < 256 ; y++ ) {
if ( rockNearLava[ offset++ ] && random.nextInt( 5 ) != 4 ) {
mbp.setY( y );
world.setBlockState( mbp , WGBasalt.BS_BASALT );
if ( y >= 40 ) {
System.err.println( "BASALT at " + mbp );
}
}
}
}
}
}
private void scanForRocksAround( final World world , final boolean[] rockNearLava ,
final BlockPos.MutableBlockPos mbp , final int x , final int y , final int z )
{
final BlockPos.MutableBlockPos mbps = new BlockPos.MutableBlockPos( );
for ( int i = -2 ; i <= 2 ; i++ ) {
final int xb = x + i;
for ( int j = -2 ; j <= 2 ; j++ ) {
final int zb = z + j;
for ( int k = -2 ; k <= 2 ; k++ ) {
final int yb = y + k;
if ( i == 0 && j == 0 && k == 0 || xb < 0 || xb > 15 || zb < 0 || zb > 15 || yb < 0 || yb > 255 ) {
continue;
}
final int offset = ( xb * 16 + zb ) * 256 + yb;
if ( rockNearLava[ offset ] ) {
continue;
}
mbps.setPos( mbp.getX( ) + i , yb , mbp.getZ( ) + j );
// System.err.println( "pos = " + mbps );
if ( Materials.isRock( world.getBlockState( mbps ) ) ) {
rockNearLava[ offset ] = true;
}
}
}
}
} }
} }