private void tryAbility(EntityLivingBase mob, EntityLivingBase target) { if (target == null || !mob.canEntityBeSeen(target)) { return; } if (mob.getDistanceToEntity(target) > MIN_DISTANCE) { double diffX = target.posX - mob.posX; double diffY = target.boundingBox.minY + (double) (target.height / 2.0F) - (mob.posY + (double) (mob.height / 2.0F)); double diffZ = target.posZ - mob.posZ; mob.renderYawOffset = mob.rotationYaw = -((float) Math.atan2(diffX, diffZ)) * 180.0F / (float) Math.PI; mob.worldObj.playAuxSFXAtEntity( (EntityPlayer) null, 1008, (int) mob.posX, (int) mob.posY, (int) mob.posZ, 0); EntityLargeFireball entFB = new EntityLargeFireball(mob.worldObj, mob, diffX, diffY, diffZ); double spawnOffset = 2.0D; Vec3 mobLook = mob.getLook(1.0F); entFB.posX = mob.posX + mobLook.xCoord * spawnOffset; entFB.posY = mob.posY + (double) (mob.height / 2.0F) + 0.5D; entFB.posZ = mob.posZ + mobLook.zCoord * spawnOffset; mob.worldObj.spawnEntityInWorld(entFB); } }