Trap blocks are no longer mixed in a single trap spot

This commit is contained in:
Emmanuel BENOîT 2016-07-10 16:01:06 +02:00
parent 7ba899b576
commit 614c8e0ac4
7 changed files with 76 additions and 3 deletions

View file

@ -42,7 +42,6 @@ materials No Alloys
materials No Metal from slag materials No Metal from slag
-> in metal recycler -> in metal recycler
materials No Black sand URGENT materials No Black sand URGENT
materials No Quicksand / quagmire URGENT
materials No Metals materials No Metals
Lead Lead
Aluminium Aluminium

View file

@ -44,6 +44,13 @@ public class MMud
} }
@Override
public String getTrapType( )
{
return "slow";
}
@Override @Override
public AxisAlignedBB getCollisionBoundingBox( final IBlockState blockState , final World worldIn , public AxisAlignedBB getCollisionBoundingBox( final IBlockState blockState , final World worldIn ,
final BlockPos pos ) final BlockPos pos )

View file

@ -48,6 +48,13 @@ public class MQuicksand
} }
@Override
public String getTrapType( )
{
return "quicksand";
}
@Override @Override
public MapColor getMapColor( IBlockState state ) public MapColor getMapColor( IBlockState state )
{ {

View file

@ -8,6 +8,9 @@ import net.minecraft.block.state.IBlockState;
public interface I_UTrapBlock public interface I_UTrapBlock
{ {
public String getTrapType( );
public IBlockState[] getReplacedBlocks( ); public IBlockState[] getReplacedBlocks( );
} }

View file

@ -1,9 +1,12 @@
package mmm.utils; package mmm.utils;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Lists;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
@ -13,12 +16,16 @@ import net.minecraft.block.state.IBlockState;
public enum UTrapBlocks { public enum UTrapBlocks {
INSTANCE; INSTANCE;
private final ArrayListMultimap< IBlockState , I_UTrapBlock > traps = ArrayListMultimap.create( );
private final ArrayListMultimap< IBlockState , IBlockState > replacements = ArrayListMultimap.create( ); private final ArrayListMultimap< IBlockState , IBlockState > replacements = ArrayListMultimap.create( );
private final LinkedHashMultimap< IBlockState , String > trapTypes = LinkedHashMultimap.create( );
public void register( final I_UTrapBlock block ) public void register( final I_UTrapBlock block )
{ {
for ( IBlockState state : block.getReplacedBlocks( ) ) { for ( IBlockState state : block.getReplacedBlocks( ) ) {
this.traps.put( state , block );
this.trapTypes.put( state , block.getTrapType( ) );
this.replacements.put( state , ( (Block) block ).getDefaultState( ) ); this.replacements.put( state , ( (Block) block ).getDefaultState( ) );
} }
} }
@ -29,4 +36,25 @@ public enum UTrapBlocks {
return this.replacements.get( blockState ); return this.replacements.get( blockState );
} }
public List< IBlockState > getReplacements( final IBlockState blockState , final String trapType )
{
ArrayList< IBlockState > out = Lists.newArrayList( );
List< I_UTrapBlock > traps = this.traps.get( blockState );
int nTraps = traps.size( );
for ( int i = 0 ; i < nTraps ; i++ ) {
I_UTrapBlock trap = traps.get( i );
if ( trap.getTrapType( ).equals( trapType ) ) {
out.add( ( (Block) trap ).getDefaultState( ) );
}
}
return out;
}
public ArrayList< String > getTrapTypes( final IBlockState blockState )
{
return Lists.newArrayList( this.trapTypes.get( blockState ) );
}
} }

View file

@ -1,9 +1,12 @@
package mmm.world.gen; package mmm.world.gen;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import com.google.common.collect.Lists;
import mmm.utils.UTrapBlocks; import mmm.utils.UTrapBlocks;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
@ -66,9 +69,34 @@ public class WGTrapBlocks
check.setY( check.getY( ) - radius / 2 + rand.nextInt( radius ) ); check.setY( check.getY( ) - radius / 2 + rand.nextInt( radius ) );
} }
// Replace blocks // Find possible trap types
BlockPos bp = new BlockPos( check ); BlockPos bp = new BlockPos( check );
int sqr = radius * radius; int sqr = radius * radius;
ArrayList< String > types = Lists.newArrayList( );
for ( int x = -radius ; x <= radius ; x++ ) {
for ( int y = -radius ; y <= radius ; y++ ) {
for ( int z = -radius ; z <= radius ; z++ ) {
if ( x * x + y * y + z * z > sqr + 1 ) {
continue;
}
final BlockPos pos = bp.add( x , y , z );
final IBlockState atPos = worldIn.getBlockState( pos );
final List< String > trapTypes = UTrapBlocks.INSTANCE.getTrapTypes( atPos );
for ( String rep : trapTypes ) {
if ( !types.contains( rep ) ) {
types.add( rep );
}
}
}
}
}
if ( types.isEmpty( ) ) {
return false;
}
String trapType = types.get( rand.nextInt( types.size( ) ) );
System.err.println( "Trap at " + bp + " -> " + trapType );
for ( int x = -radius ; x <= radius ; x++ ) { for ( int x = -radius ; x <= radius ; x++ ) {
for ( int y = -radius ; y <= radius ; y++ ) { for ( int y = -radius ; y <= radius ; y++ ) {
for ( int z = -radius ; z <= radius ; z++ ) { for ( int z = -radius ; z <= radius ; z++ ) {
@ -78,7 +106,7 @@ public class WGTrapBlocks
final BlockPos pos = bp.add( x , y , z ); final BlockPos pos = bp.add( x , y , z );
final IBlockState atPos = worldIn.getBlockState( pos ); final IBlockState atPos = worldIn.getBlockState( pos );
final List< IBlockState > replacements = UTrapBlocks.INSTANCE.getReplacements( atPos ); final List< IBlockState > replacements = UTrapBlocks.INSTANCE.getReplacements( atPos , trapType );
final int nReplacements = replacements.size( ); final int nReplacements = replacements.size( );
if ( nReplacements == 0 ) { if ( nReplacements == 0 ) {
continue; continue;

View file

@ -77,6 +77,7 @@ tile.mmm.materials.planks.bamboo.name=Bamboo Wood Planks
tile.mmm.materials.trap.sand.name=Quicksand tile.mmm.materials.trap.sand.name=Quicksand
tile.mmm.materials.trap.red_sand.name=Red Quicksand tile.mmm.materials.trap.red_sand.name=Red Quicksand
tile.mmm.materials.trap.mud.name=Mud tile.mmm.materials.trap.mud.name=Mud
tile.mmm.materials.trap.swamp_pit.name=Silty Quicksand
tile.mmm.tech.base.alloy_furnace.inactive.name=Alloy Furnace tile.mmm.tech.base.alloy_furnace.inactive.name=Alloy Furnace