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

You can feed adult donkeys, horses, llamas or mules with a high temper value, but hand animation and animal eating animation/sounds are not played

    XMLWordPrintable

Details

    • Bug
    • Status: Open
    • Resolution: Unresolved
    • 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
    • None
    • Confirmed
    • (Unassigned)

    Description

      The bug

      You can feed adult donkeys, horses or mules with a high temper value. Furthermore, no visual feedback (hand animation and animal eating animation/sounds) is played though the hay bales/sugar are actually consumed.

      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.
      3. Very rarely, animations and sounds will be played one time.
      4. No animations and sounds are played.
      5. Notice how the food is actually consumed, i.e. it is not a desync.

      Expected result

      Animations and sounds should be played, or you should not be able to feed said animal.

      Analysis (tentative)

      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.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              ampolive [Helper] ampolive
              Votes:
              3 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                CHK: