--- a/net/minecraft/world/item/SnowballItem.java
+++ b/net/minecraft/world/item/SnowballItem.java
@@ -10,26 +10,51 @@
 import net.minecraft.world.level.Level;
 
 public class SnowballItem extends Item {
+
     public SnowballItem(Item.Properties settings) {
         super(settings);
     }
 
     @Override
     public InteractionResultHolder<ItemStack> use(Level world, Player user, InteractionHand hand) {
-        ItemStack itemStack = user.getItemInHand(hand);
-        world.playSound((Player)null, user.getX(), user.getY(), user.getZ(), SoundEvents.SNOWBALL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
+        ItemStack itemstack = user.getItemInHand(hand);
+
+        // CraftBukkit - moved down
+        // world.playSound((EntityHuman) null, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEffects.SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
         if (!world.isClientSide) {
-            Snowball snowball = new Snowball(world, user);
-            snowball.setItem(itemStack);
-            snowball.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F);
-            world.addFreshEntity(snowball);
+            Snowball entitysnowball = new Snowball(world, user);
+
+            entitysnowball.setItem(itemstack);
+            entitysnowball.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F);
+            // Paper start
+            com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entitysnowball.getBukkitEntity());
+            if (event.callEvent() && world.addFreshEntity(entitysnowball)) {
+                user.awardStat(Stats.ITEM_USED.get(this));
+                if (event.shouldConsume() && !user.getAbilities().instabuild) {
+                    // Paper end
+                    itemstack.shrink(1);
+                } else if (user instanceof net.minecraft.server.level.ServerPlayer) {  // Paper
+                    ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();  // Paper
+                }
+
+                world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.SNOWBALL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
+            } else { // Paper
+                if (user instanceof net.minecraft.server.level.ServerPlayer) ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory(); // Paper
+                return InteractionResultHolder.fail(itemstack); // Paper
+            }
         }
+        // CraftBukkit end
 
+        /* // Paper tart - moved up
         user.awardStat(Stats.ITEM_USED.get(this));
-        if (!user.getAbilities().instabuild) {
-            itemStack.shrink(1);
+        // CraftBukkit start - moved up
+        /*
+        if (!entityhuman.getAbilities().instabuild) {
+            itemstack.shrink(1);
         }
+        */
+        // Paper end
 
-        return InteractionResultHolder.sidedSuccess(itemStack, world.isClientSide());
+        return InteractionResultHolder.sidedSuccess(itemstack, world.isClientSide());
     }
 }
