Source:
<code>private void shootProjectile(final Integer slot, Vector3f gunVec, Vector3f lookVector, DriveableType type, Boolean secondary, float speed) { ItemStack bullet = driveableData.getStackInSlot(slot); ItemBullet bulletItem = (ItemBullet)bullet.getItem(); int damageMultiplier = secondary ? type.damageModifierSecondary : type.damageModifierPrimary; FireableGun fireableGun = new FireableGun(bulletItem.type, bulletItem.type.damageVsLiving*damageMultiplier, bulletItem.type.damageVsDriveable*damageMultiplier, bulletItem.type.bulletSpread, speed); FiredShot shot = new FiredShot(fireableGun, (BulletType) bulletItem.type, this, (EntityPlayerMP) getDriver()); <START> ShootBulletHandler handler = (Boolean isExtraBullet) -> <END> { if(!driverIsCreative()) { ItemStack bulletStack = driveableData.getStackInSlot(slot); bulletStack.setItemDamage(bulletStack.getItemDamage() + 1); if(bulletStack.getItemDamage() == bulletStack.getMaxDamage()) { bulletStack.setItemDamage(0); bulletStack.setCount(bulletStack.getCount() - 1); if(bulletStack.getCount() == 0) bulletStack = ItemStack.EMPTY.copy(); } driveableData.setInventorySlotContents(slot, bulletStack); } }; Vector3f gunVector = Vector3f.add(gunVec, new Vector3f(posX,posY,posZ), null); ShotHandler.fireGun(world, shot, bulletItem.type.numBullets, gunVector, lookVector, handler); if (type.shootSound(secondary) != null) { PacketPlaySound.sendSoundPacket(gunVector.x, gunVector.y, gunVector.z, FlansMod.soundRange, world.provider.getDimension(), type.shootSound(secondary), false); } setShootDelay(type.shootDelay(secondary), secondary); }</code><technical_language>this name more descriptive? ShotFiredSuccessHandler something? bit of shooting is handled</technical_language>

Target:
private void shootProjectile(final Integer slot, Vector3f gunVec, Vector3f lookVector, DriveableType type, Boolean secondary, float speed) { ItemStack bullet = driveableData.getStackInSlot(slot); ItemBullet bulletItem = (ItemBullet)bullet.getItem(); int damageMultiplier = secondary ? type.damageModifierSecondary : type.damageModifierPrimary; FireableGun fireableGun = new FireableGun(bulletItem.type, bulletItem.type.damageVsLiving*damageMultiplier, bulletItem.type.damageVsDriveable*damageMultiplier, bulletItem.type.bulletSpread, speed); FiredShot shot = new FiredShot(fireableGun, bulletItem.type, this, (EntityPlayerMP) getDriver()); ShootBulletHandler handler = (Boolean isExtraBullet) -> { if(!driverIsCreative()) { ItemStack bulletStack = driveableData.getStackInSlot(slot); bulletStack.setItemDamage(bulletStack.getItemDamage() + 1); if(bulletStack.getItemDamage() == bulletStack.getMaxDamage()) { bulletStack.setItemDamage(0); bulletStack.setCount(bulletStack.getCount() - 1); if(bulletStack.getCount() == 0) bulletStack = ItemStack.EMPTY.copy(); } driveableData.setInventorySlotContents(slot, bulletStack); } }; Vector3f gunVector = Vector3f.add(gunVec, new Vector3f(posX,posY,posZ), null); ShotHandler.fireGun(world, shot, bulletItem.type.numBullets, gunVector, lookVector, handler); if (type.shootSound(secondary) != null) { PacketPlaySound.sendSoundPacket(gunVector.x, gunVector.y, gunVector.z, FlansMod.soundRange, world.provider.getDimension(), type.shootSound(secondary), false); } setShootDelay(type.shootDelay(secondary), secondary); }