package net.geforcemods.securitycraft.blocks.mines; import java.util.Random; import net.geforcemods.securitycraft.api.IIntersectable; import net.geforcemods.securitycraft.entity.EntityBouncingBetty; import net.geforcemods.securitycraft.tileentity.TileEntityOwnable; import net.geforcemods.securitycraft.util.BlockUtils; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockBouncingBetty extends BlockExplosive implements IIntersectable { public static final PropertyBool DEACTIVATED = PropertyBool.create("deactivated"); public BlockBouncingBetty(Material par2Material) { super(par2Material); } @Override public boolean isOpaqueCube(IBlockState state){ return false; } @Override public boolean isNormalCube(IBlockState state){ return false; } @Override public EnumBlockRenderType getRenderType(IBlockState state){ return EnumBlockRenderType.MODEL; } @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { return new AxisAlignedBB(0.200F, 0.000F, 0.200F, 0.800F, 0.200F, 0.800F); } /** * Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z */ @Override public boolean canPlaceBlockAt(World par1World, BlockPos pos){ return par1World.isSideSolid(pos.down(), EnumFacing.UP); } @Override public void onEntityIntersected(World world, BlockPos pos, Entity entity) { if(entity instanceof EntityLivingBase){ this.explode(world, pos); } } @Override public void onBlockClicked(World par1World, BlockPos pos, EntityPlayer par5EntityPlayer){ if(par5EntityPlayer instanceof EntityLivingBase){ this.explode(par1World, pos); } } @Override public void activateMine(World world, BlockPos pos) { BlockUtils.setBlockProperty(world, pos, DEACTIVATED, false); } @Override public void defuseMine(World world, BlockPos pos) { BlockUtils.setBlockProperty(world, pos, DEACTIVATED, true); } @Override public void explode(World par1World, BlockPos pos){ if(par1World.isRemote){ return; } par1World.setBlockToAir(pos); EntityBouncingBetty entitytntprimed = new EntityBouncingBetty(par1World, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F); entitytntprimed.fuse = 15; entitytntprimed.motionY = 0.50D; par1World.spawnEntityInWorld(entitytntprimed); entitytntprimed.playSound(SoundEvent.REGISTRY.getObject(new ResourceLocation("game.tnt.primed")), 1.0F, 1.0F); } /** * Returns the ID of the items to drop on destruction. */ @Override public Item getItemDropped(IBlockState state, Random par2Random, int par3) { return Item.getItemFromBlock(this); } /** * only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative) */ @Override public ItemStack getItem(World par1World, BlockPos pos, IBlockState state){ return new ItemStack(Item.getItemFromBlock(this)); } @Override public IBlockState getStateFromMeta(int meta) { return this.getDefaultState().withProperty(DEACTIVATED, meta == 1 ? true : false); } @Override public int getMetaFromState(IBlockState state) { return (state.getValue(DEACTIVATED).booleanValue() ? 1 : 0); } @Override protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[] {DEACTIVATED}); } @Override public boolean isActive(World world, BlockPos pos) { return !world.getBlockState(pos).getValue(DEACTIVATED).booleanValue(); } @Override public boolean isDefusable() { return true; } @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityOwnable().intersectsEntities(); } }