--- a/net/minecraft/world/entity/AgeableMob.java
+++ b/net/minecraft/world/entity/AgeableMob.java
@@ -23,6 +_,7 @@
     protected int age = 0;
     protected int forcedAge = 0;
     protected int forcedAgeTimer;
+    public boolean ageLocked; // CraftBukkit
 
     protected AgeableMob(EntityType<? extends AgeableMob> entityType, Level level) {
         super(entityType, level);
@@ -70,6 +_,7 @@
     }
 
     public void ageUp(int amount, boolean forced) {
+        if (this.ageLocked) return; // Paper - Honor ageLock
         int age = this.getAge();
         int previousAge = age;
         age += amount * 20;
@@ -109,6 +_,7 @@
         super.addAdditionalSaveData(output);
         output.putInt("Age", this.getAge());
         output.putInt("ForcedAge", this.forcedAge);
+        output.putBoolean("AgeLocked", this.ageLocked); // CraftBukkit
     }
 
     @Override
@@ -116,6 +_,7 @@
         super.readAdditionalSaveData(input);
         this.setAge(input.getIntOr("Age", 0));
         this.forcedAge = input.getIntOr("ForcedAge", 0);
+        this.ageLocked = input.getBooleanOr("AgeLocked", false); // CraftBukkit
     }
 
     @Override
@@ -127,10 +_,27 @@
         super.onSyncedDataUpdated(key);
     }
 
+    // Paper start - EAR 2
+    @Override
+    public void inactiveTick() {
+        super.inactiveTick();
+        if (this.level().isClientSide() || this.ageLocked) { // CraftBukkit
+            this.refreshDimensions();
+        } else {
+            int age = this.getAge();
+            if (age < 0) {
+                this.setAge(++age);
+            } else if (age > 0) {
+                this.setAge(--age);
+            }
+        }
+    }
+    // Paper end - EAR 2
+
     @Override
     public void aiStep() {
         super.aiStep();
-        if (this.level().isClientSide()) {
+        if (this.level().isClientSide() || this.ageLocked) { // CraftBukkit
             if (this.forcedAgeTimer > 0) {
                 if (this.forcedAgeTimer % 4 == 0) {
                     this.level().addParticle(ParticleTypes.HAPPY_VILLAGER, this.getRandomX(1.0), this.getRandomY() + 0.5, this.getRandomZ(1.0), 0.0, 0.0, 0.0);
