package net.minecraftplus.mcp_loose_stone;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockFalling;
import net.minecraft.block.BlockFence;
import net.minecraft.block.BlockFenceGate;
import net.minecraft.block.BlockWall;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
public class BlockLooseStone extends BlockFalling
{
public BlockLooseStone()
{
this.setTickRandomly(false);
}
@Override
public Item getItemDropped(IBlockState state, Random rand, int fortune)
{
return Item.getItemFromBlock(Blocks.cobblestone);
}
@Override
public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) {}
@Override
public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn)
{
if (!this.isSupported(worldIn, pos))
{
worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn));
}
}
@Override
public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock)
{
if (!this.isSupported(worldIn, pos))
{
worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn));
}
}
@Override
public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn)
{
if (!this.isSupported(worldIn, pos))
{
worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn));
}
}
@Override
public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance)
{
if (!this.isSupported(worldIn, pos))
{
worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn));
}
}
private static void loosenNeighbors(World worldIn, BlockPos pos)
{
int radius = worldIn.rand.nextInt(4) + 1;
for(int i = -radius; i <= radius; i++)
{
for(int j = -radius; j <= radius; j++)
{
for(int k = -radius; k <= radius; k++)
{
BlockPos offset = pos.west(i).up(j).north(k);
if (worldIn.getBlockState(offset).getBlock() == Blocks.stone)
{
worldIn.setBlockState(offset, _Loose_Stone.looseStone.getDefaultState());
worldIn.scheduleUpdate(offset, _Loose_Stone.looseStone, _Loose_Stone.looseStone.tickRate(worldIn));
}
}
}
}
}
private static boolean isSupported(World worldIn, BlockPos pos)
{
if (isSupportBlock(worldIn.getBlockState(pos.down()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.down().north()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.down().south()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.down().west()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.down().east()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.down().north().west()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.down().north().east()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.down().south().west()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.down().south().east()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.north()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.south()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.west()))) return true;
if (isSupportBlock(worldIn.getBlockState(pos.east()))) return true;
return false;
}
private static boolean isSupportBlock(IBlockState parBlockState)
{
Block block = parBlockState.getBlock();
return block instanceof BlockFence || block instanceof BlockFenceGate || block instanceof BlockWall;
}
}