--- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -231,14 +_,14 @@
 
     @Override
     public int getMaxAirSupply() {
-        return 6000;
+        return this.maxAirTicks; // CraftBukkit - SPIGOT-6907: re-implement LivingEntity#setMaximumAir()
     }
 
     public Axolotl.Variant getVariant() {
         return Axolotl.Variant.byId(this.entityData.get(DATA_VARIANT));
     }
 
-    private void setVariant(Axolotl.Variant variant) {
+    public void setVariant(Axolotl.Variant variant) {
         this.entityData.set(DATA_VARIANT, variant.getId());
     }
 
@@ -449,10 +_,10 @@
         if (effect == null || effect.endsWithin(2399)) {
             int i = effect != null ? effect.getDuration() : 0;
             int min = Math.min(2400, 100 + i);
-            player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, min, 0), this);
+            player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, min, 0), this, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.AXOLOTL); // CraftBukkit
         }
 
-        player.removeEffect(MobEffects.MINING_FATIGUE);
+        player.removeEffect(MobEffects.MINING_FATIGUE, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.AXOLOTL); // Paper - Add missing effect cause
     }
 
     @Override
@@ -461,29 +_,29 @@
     }
 
     @Override
-    protected SoundEvent getHurtSound(DamageSource damageSource) {
+    public SoundEvent getHurtSound(DamageSource damageSource) {
         return SoundEvents.AXOLOTL_HURT;
     }
 
     @Nullable
     @Override
-    protected SoundEvent getDeathSound() {
+    public SoundEvent getDeathSound() {
         return SoundEvents.AXOLOTL_DEATH;
     }
 
     @Nullable
     @Override
-    protected SoundEvent getAmbientSound() {
+    public SoundEvent getAmbientSound() {
         return this.isInWater() ? SoundEvents.AXOLOTL_IDLE_WATER : SoundEvents.AXOLOTL_IDLE_AIR;
     }
 
     @Override
-    protected SoundEvent getSwimSplashSound() {
+    public SoundEvent getSwimSplashSound() {
         return SoundEvents.AXOLOTL_SPLASH;
     }
 
     @Override
-    protected SoundEvent getSwimSound() {
+    public SoundEvent getSwimSound() {
         return SoundEvents.AXOLOTL_SWIM;
     }
 
@@ -544,6 +_,13 @@
     ) {
         return level.getBlockState(pos.below()).is(BlockTags.AXOLOTLS_SPAWNABLE_ON);
     }
+
+    // CraftBukkit start - SPIGOT-6907: re-implement LivingEntity#setMaximumAir()
+    @Override
+    public int getDefaultMaxAirSupply() {
+        return AXOLOTL_TOTAL_AIR_SUPPLY;
+    }
+    // CraftBukkit end
 
     public static enum AnimationState {
         PLAYING_DEAD,
