--- a/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/net/minecraft/world/entity/animal/horse/Llama.java
@@ -77,17 +_,23 @@
     @Nullable
     private Llama caravanHead;
     @Nullable
-    private Llama caravanTail;
+    public Llama caravanTail; // Paper
 
     public Llama(EntityType<? extends Llama> entityType, Level level) {
         super(entityType, level);
         this.getNavigation().setRequiredPathLength(40.0F);
+        this.maxDomestication = 30; // Paper - Missing entity API; configure max temper instead of a hardcoded value
     }
 
     public boolean isTraderLlama() {
         return false;
     }
 
+    // CraftBukkit start
+    public void setStrengthPublic(int strength) {
+        this.setStrength(strength);
+    }
+    // CraftBukkit end
     private void setStrength(int strength) {
         this.entityData.set(DATA_STRENGTH_ID, Math.max(1, Math.min(5, strength)));
     }
@@ -147,7 +_,7 @@
         return Llama.Variant.byId(this.entityData.get(DATA_VARIANT_ID));
     }
 
-    private void setVariant(Llama.Variant variant) {
+    public void setVariant(Llama.Variant variant) {
         this.entityData.set(DATA_VARIANT_ID, variant.id);
     }
 
@@ -194,12 +_,12 @@
             f = 10.0F;
             if (this.isTamed() && this.getAge() == 0 && this.canFallInLove()) {
                 flag = true;
-                this.setInLove(player);
+                this.setInLove(player, stack.copy()); // Paper - Fix EntityBreedEvent copying
             }
         }
 
         if (this.getHealth() < this.getMaxHealth() && f > 0.0F) {
-            this.heal(f);
+            this.heal(f, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.EATING); // Paper - Add missing regain reason
             flag = true;
         }
 
@@ -271,17 +_,17 @@
     }
 
     @Override
-    protected SoundEvent getAmbientSound() {
+    public SoundEvent getAmbientSound() {
         return SoundEvents.LLAMA_AMBIENT;
     }
 
     @Override
-    protected SoundEvent getHurtSound(DamageSource damageSource) {
+    public SoundEvent getHurtSound(DamageSource damageSource) {
         return SoundEvents.LLAMA_HURT;
     }
 
     @Override
-    protected SoundEvent getDeathSound() {
+    public SoundEvent getDeathSound() {
         return SoundEvents.LLAMA_DEATH;
     }
 
@@ -313,7 +_,7 @@
 
     @Override
     public int getMaxTemper() {
-        return 30;
+        return super.getMaxTemper(); // Paper - Missing entity API; delegate to parent
     }
 
     @Override
