--- a/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
+++ b/net/minecraft/world/entity/projectile/ThrownExperienceBottle.java
@@ -24,7 +_,7 @@
     }
 
     @Override
-    protected Item getDefaultItem() {
+    public Item getDefaultItem() {
         return Items.EXPERIENCE_BOTTLE;
     }
 
@@ -37,10 +_,17 @@
     protected void onHit(HitResult result) {
         super.onHit(result);
         if (this.level() instanceof ServerLevel) {
-            this.level().levelEvent(2002, this.blockPosition(), -13083194);
+            // CraftBukkit - moved to after event
             int i = 3 + this.level().random.nextInt(5) + this.level().random.nextInt(5);
-            ExperienceOrb.award((ServerLevel)this.level(), result.getLocation(), i);
-            this.discard();
+            // CraftBukkit start
+            org.bukkit.event.entity.ExpBottleEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callExpBottleEvent(this, result, i);
+            i = event.getExperience();
+            if (event.getShowEffect()) {
+                this.level().levelEvent(net.minecraft.world.level.block.LevelEvent.PARTICLES_SPELL_POTION_SPLASH, this.blockPosition(), net.minecraft.world.item.alchemy.PotionContents.BASE_POTION_COLOR);
+            }
+            // CraftBukkit end
+            ExperienceOrb.award((ServerLevel)this.level(), result.getLocation(), i, org.bukkit.entity.ExperienceOrb.SpawnReason.EXP_BOTTLE, this.getOwner(), this); // Paper
+            this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
         }
     }
 }
