That's one heck of a commit you've got there...
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!
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user