--- a/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
+++ b/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
@@ -10,8 +10,12 @@
 import net.minecraft.world.item.alchemy.Potions;
 import net.minecraft.world.level.Level;
 import net.minecraft.world.phys.HitResult;
+// CraftBukkit start
+import org.bukkit.event.entity.EntityRemoveEvent;
+// CraftBukkit end
 
 public class ThrownExperienceBottle extends ThrowableItemProjectile {
+
     public ThrownExperienceBottle(EntityType<? extends ThrownExperienceBottle> type, Level world) {
         super(type, world);
     }
@@ -31,17 +35,28 @@
 
     @Override
     protected double getDefaultGravity() {
-        return 0.07;
+        return 0.07D;
     }
 
     @Override
     protected void onHit(HitResult hitResult) {
         super.onHit(hitResult);
         if (this.level() instanceof ServerLevel) {
-            this.level().levelEvent(2002, this.blockPosition(), PotionContents.getColor(Potions.WATER));
+            // CraftBukkit - moved to after event
+            // this.level().levelEvent(2002, this.blockPosition(), PotionContents.getColor(Potions.WATER));
             int i = 3 + this.level().random.nextInt(5) + this.level().random.nextInt(5);
-            ExperienceOrb.award((ServerLevel)this.level(), this.position(), i);
-            this.discard();
+
+            // CraftBukkit start
+            org.bukkit.event.entity.ExpBottleEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callExpBottleEvent(this, hitResult, i);
+            i = event.getExperience();
+            if (event.getShowEffect()) {
+                this.level().levelEvent(2002, this.blockPosition(), PotionContents.getColor(Potions.WATER));
+            }
+            // CraftBukkit end
+
+            ExperienceOrb.award((ServerLevel) this.level(), this.position(), i, org.bukkit.entity.ExperienceOrb.SpawnReason.EXP_BOTTLE, this.getOwner(), this); // Paper
+            this.discard(EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
         }
+
     }
 }
