Uploaded image for project: 'Minecraft: Java Edition'
  1. Minecraft: Java Edition
  2. MC-233276

You can feed adult donkeys, horses, llamas or mules with maximum Temper value, and hand animation is not played

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • 23w41a
    • 1.17.1, 21w37a, 21w38a, 21w39a, 21w40a, 21w41a, 21w42a, 21w43a, 21w44a, 1.18 Pre-release 1, 1.18 Pre-release 2, 1.18 Pre-release 4, 1.18 Pre-release 5, 1.18 Pre-release 6, 1.18 Pre-release 8, 1.18 Release Candidate 3, 1.18, 1.18.1 Release Candidate 2, 1.18.1, 22w03a, 22w06a, 1.18.2 Pre-release 1, 22w11a, 22w17a, 22w18a, 1.19 Pre-release 1, 1.19, 1.19.1 Pre-release 5, 1.19.2, 22w42a, 22w46a, 23w06a, 1.19.4, 23w18a, 1.20 Release Candidate 1, 1.20, 1.20.1, 1.20.2
    • Confirmed
    • Mob behaviour, Player Animation
    • 1098630

      The bug

      You can feed adult donkeys, horses or mules with maximum Temper value, and the hand animation is not played.

      The distinction of this issue from MC-93825 is that it is NOT a desync, and it is not MC-236341 as it happens only with a high temper value, and all food exhibits this behavior. However, sometimes golden carrots do play animation and sounds on the first time.

      To reproduce

      1. Summon a donkey, horse, llama or mule with a Temper value of 100, e.g.
        /summon horse ~ ~ ~ {Temper:100}
        
      2. Give the animal any food.
        Very rarely, animations and sounds will be played one time.
        No animations and sounds are played.
      3. Notice how the food is actually consumed, i.e. it is not a desync.

      Expected result

      You should not be able to feed said animal; as per MC-201599, it should show the hand animation but the animal should not consume the food (this was the behavior in 1.15.2).

      Analysis (tentative)

      Code analysis by BugCrusherszz can be found in this comment.

      I think that this is the piece of code that causes the issue, but I might be wrong.

      net.minecraft.world.entity.animal.horse.AbstractHorse.java (Mojang mappings, 1.18-pre1)
      ...
      protected boolean handleEating(Player $$0, ItemStack $$1) {
              boolean $$2 = false;
              ...
              if ($$5 > 0 && ($$2 || !this.isTamed()) && this.getTemper() < this.getMaxTemper()) {
                  $$2 = true;
                  if (!this.level.isClientSide) {
                      this.modifyTemper($$5);
                  }
              }
             if ($$2) {
                  this.eating();
                  this.gameEvent(GameEvent.EAT, this.eyeBlockPosition());
              }
             ...
      

      If the animal's temper is equal or more than its max temper and it is not tamed, $$2 is not set to true, so the game event and animations will not play. At least, this is what I understood.

            elvendorke [Mojang] elvendorke
            ampolive [Mod] ampolive
            Votes:
            11 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved:
              CHK: