package net.geforcemods.securitycraft.blocks; import static net.minecraftforge.common.util.ForgeDirection.EAST; import static net.minecraftforge.common.util.ForgeDirection.NORTH; import static net.minecraftforge.common.util.ForgeDirection.SOUTH; import static net.minecraftforge.common.util.ForgeDirection.WEST; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.geforcemods.securitycraft.entity.EntitySecurityCamera; import net.geforcemods.securitycraft.main.mod_SecurityCraft; import net.geforcemods.securitycraft.network.packets.PacketCRemoveLGView; import net.geforcemods.securitycraft.tileentity.TileEntitySecurityCamera; import net.geforcemods.securitycraft.util.BlockUtils; import net.geforcemods.securitycraft.util.PlayerUtils; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class BlockSecurityCamera extends BlockContainer { public BlockSecurityCamera(Material par2Material) { super(par2Material); } public boolean renderAsNormalBlock(){ return false; } public boolean isNormalCube(){ return false; } public boolean isOpaqueCube(){ return false; } public int getRenderType(){ return -1; } @Override public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) { return false; } public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4){ return null; } public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int x, int y, int z){ int meta = par1IBlockAccess.getBlockMetadata(x, y, z); if(meta == 3 || meta == 7){ this.setBlockBounds(0.275F, 0.250F, 0.000F, 0.700F, 0.800F, 0.850F); }else if(meta == 4 || meta == 8){ this.setBlockBounds(0.275F, 0.250F, 0.150F, 0.700F, 0.800F, 1.000F); }else if(meta == 2 || meta == 6){ this.setBlockBounds(0.125F, 0.250F, 0.275F, 1.000F, 0.800F, 0.725F); }else{ this.setBlockBounds(0.000F, 0.250F, 0.275F, 0.850F, 0.800F, 0.725F); } } public int onBlockPlaced(World par1World, int par2, int par3, int par4, int par5, float par6, float par7, float par8, int par9){ int k1 = par9 & 8; byte b0 = -1; if(par5 == 2 && par1World.isSideSolid(par2, par3, par4 + 1, NORTH)){ b0 = 4; } if(par5 == 3 && par1World.isSideSolid(par2, par3, par4 - 1, SOUTH)){ b0 = 3; } if(par5 == 4 && par1World.isSideSolid(par2 + 1, par3, par4, WEST)){ b0 = 2; } if(par5 == 5 && par1World.isSideSolid(par2 - 1, par3, par4, EAST)){ b0 = 1; } return b0 + k1; } public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, Block par5Block) { int metadata = par1World.getBlockMetadata(par2, par3, par4); if(metadata == 1) { if(!par1World.isSideSolid(par2 - 1, par3, par4, EAST)) { BlockUtils.destroyBlock(par1World, par2, par3, par4, true); } }else if(metadata == 2) { if(!par1World.isSideSolid(par2 + 1, par3, par4, WEST)) { BlockUtils.destroyBlock(par1World, par2, par3, par4, true); } }else if(metadata == 3) { if(!par1World.isSideSolid(par2, par3, par4 - 1, SOUTH)) { BlockUtils.destroyBlock(par1World, par2, par3, par4, true); } }else if(metadata == 4) { if(!par1World.isSideSolid(par2, par3, par4 + 1, NORTH)) { BlockUtils.destroyBlock(par1World, par2, par3, par4, true); } } } public void breakBlock(World par1World, int par2, int par3, int par4, Block par5Block, int par6){ mod_SecurityCraft.network.sendToAll(new PacketCRemoveLGView(par2, par3, par4, par1World.provider.dimensionId)); } public boolean canPlaceBlockOnSide(World par1World, int par2, int par3, int par4, int par5){ ForgeDirection dir = ForgeDirection.getOrientation(par5); return (dir == NORTH && par1World.isSideSolid(par2, par3, par4 + 1, NORTH)) || (dir == SOUTH && par1World.isSideSolid(par2, par3, par4 - 1, SOUTH)) || (dir == WEST && par1World.isSideSolid(par2 + 1, par3, par4, WEST )) || (dir == EAST && par1World.isSideSolid(par2 - 1, par3, par4, EAST )); } public boolean canPlaceBlockAt(World world, int x, int y, int z) { return !world.getBlock(x, y, z).isReplaceable(world, x, y, z) ^ //exclusive or (world.isSideSolid(x - 1, y, z, EAST) || world.isSideSolid(x + 1, y, z, WEST) || world.isSideSolid(x, y, z - 1, SOUTH) || world.isSideSolid(x, y, z + 1, NORTH)); } public boolean canProvidePower() { return true; } public int isProvidingWeakPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5){ return BlockUtils.isMetadataBetween(par1IBlockAccess, par2, par3, par4, 7, 10) ? 15 : 0; } public int isProvidingStrongPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5){ return BlockUtils.isMetadataBetween(par1IBlockAccess, par2, par3, par4, 7, 10) ? 15 : 0; } public void mountCamera(World world, int par2, int par3, int par4, int par5, EntityPlayer player){ if(!world.isRemote && player.ridingEntity == null){ PlayerUtils.sendMessageToPlayer(player, StatCollector.translateToLocal("tile.securityCamera.name"), StatCollector.translateToLocal("messages.securityCamera.mounted"), EnumChatFormatting.GREEN); } if(player.ridingEntity != null && player.ridingEntity instanceof EntitySecurityCamera){ EntitySecurityCamera dummyEntity = new EntitySecurityCamera(world, par2, par3, par4, par5, (EntitySecurityCamera) player.ridingEntity); world.spawnEntityInWorld(dummyEntity); player.mountEntity(dummyEntity); return; } EntitySecurityCamera dummyEntity = new EntitySecurityCamera(world, par2, par3, par4, par5, player); world.spawnEntityInWorld(dummyEntity); player.mountEntity(dummyEntity); for(Object e : world.loadedEntityList) { if(e instanceof EntityLiving) { if(((EntityLiving)e).getAttackTarget() == player) ((EntityLiving)e).setAttackTarget(null); } } } public Item getItemDropped(int par1, Random par2Random, int par3){ return Item.getItemFromBlock(mod_SecurityCraft.securityCamera); } @SideOnly(Side.CLIENT) public Item getItem(World par1World, int par2, int par3, int par4){ return Item.getItemFromBlock(mod_SecurityCraft.securityCamera); } public TileEntity createNewTileEntity(World world, int par2) { return new TileEntitySecurityCamera().nameable(); } }