This isn't realted to your problem but,
public EntityBullet(World worldIn, EntityLivingBase shooter, float size, double speed, float damage) {
this.damage = ItemGun.damage;
Why the hell do you pass the damage to the constructor and then get the damage from the item?
public static float damage;
public ItemGun(float damage, float spread, double speed) {
ItemGun.damage = damage;
Second, why the hell is the variable static? As soon as you try to create two guns with different damage values, the second one will overwrite the first.
Now:
protected void onHit(RayTraceResult raytraceResultIn)
This method is protected meaning that it can't be called by any class outside of this class (and any subclasses). You are not calling this method meaning that it is never called. What did you expect to happen?