f37812be3e
I may have got a bit behind with version control. A lot behind, in fact. Maybe I'll go back and split this sometime - then again, I probably won't. But hey, at least it's here!
117 lines
3.0 KiB
Java
117 lines
3.0 KiB
Java
package electroblob.wizardry.block;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockObsidian;
|
|
import net.minecraft.block.properties.PropertyInteger;
|
|
import net.minecraft.block.state.BlockStateContainer;
|
|
import net.minecraft.block.state.IBlockState;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.EnumFacing;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.util.math.MathHelper;
|
|
import net.minecraft.world.World;
|
|
|
|
import java.util.Random;
|
|
|
|
/** Like {@link net.minecraft.block.BlockFrostedIce}, but for lava instead of water. */
|
|
// This is mostly copied from that class, with a few changes
|
|
public class BlockObsidianCrust extends BlockObsidian {
|
|
|
|
public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 3);
|
|
|
|
public BlockObsidianCrust(){
|
|
this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, 0));
|
|
}
|
|
|
|
@Override
|
|
public int getMetaFromState(IBlockState state){
|
|
return state.getValue(AGE);
|
|
}
|
|
|
|
@Override
|
|
public IBlockState getStateFromMeta(int meta){
|
|
return this.getDefaultState().withProperty(AGE, MathHelper.clamp(meta, 0, 3));
|
|
}
|
|
|
|
@Override
|
|
public void updateTick(World world, BlockPos pos, IBlockState state, Random random){
|
|
if((random.nextInt(3) == 0 || this.countNeighbors(world, pos) < 4) && world.getLightFromNeighbors(pos) > 11 - state.getValue(AGE) - state.getLightOpacity()){
|
|
this.slightlyMelt(world, pos, state, random, true);
|
|
}else{
|
|
world.scheduleUpdate(pos, this, MathHelper.getInt(random, 20, 40));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos){
|
|
if(block == this){
|
|
int i = this.countNeighbors(world, pos);
|
|
|
|
if(i < 2){
|
|
this.melt(world, pos);
|
|
}
|
|
}
|
|
}
|
|
|
|
private int countNeighbors(World world, BlockPos pos){
|
|
|
|
int i = 0;
|
|
|
|
for(EnumFacing enumfacing : EnumFacing.values()){
|
|
if(world.getBlockState(pos.offset(enumfacing)).getBlock() == this){
|
|
++i;
|
|
|
|
if(i >= 4){
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
protected void slightlyMelt(World world, BlockPos pos, IBlockState state, Random random, boolean meltNeighbours){
|
|
|
|
int i = state.getValue(AGE);
|
|
|
|
if(i < 3){
|
|
|
|
world.setBlockState(pos, state.withProperty(AGE, i + 1), 2);
|
|
world.scheduleUpdate(pos, this, MathHelper.getInt(random, 20, 40));
|
|
|
|
}else{
|
|
|
|
this.melt(world, pos);
|
|
|
|
if(meltNeighbours){
|
|
|
|
for(EnumFacing enumfacing : EnumFacing.values()){
|
|
|
|
BlockPos blockpos = pos.offset(enumfacing);
|
|
IBlockState iblockstate = world.getBlockState(blockpos);
|
|
|
|
if(iblockstate.getBlock() == this){
|
|
this.slightlyMelt(world, blockpos, iblockstate, random, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void melt(World world, BlockPos pos){
|
|
world.setBlockState(pos, Blocks.LAVA.getDefaultState());
|
|
world.neighborChanged(pos, Blocks.LAVA, pos);
|
|
}
|
|
|
|
@Override
|
|
protected BlockStateContainer createBlockState(){
|
|
return new BlockStateContainer(this, AGE);
|
|
}
|
|
|
|
@Override
|
|
public ItemStack getItem(World world, BlockPos pos, IBlockState state){
|
|
return ItemStack.EMPTY;
|
|
}
|
|
}
|