mojira.dev
MC-259926

Interpolation animation of Display entities is non-deterministic

The bug:

Interpolation animation of Display entities is non-deterministic for map and pack creators. That is, creators cannot guarantee that players will see the animation they want players to see. For example,

  • Players who enter a server at different times may see different animations

  • Players who move back and forth (which makes chunks unloaded and loaded) may see weird animations

  • Players who exit and re-enter the level may see wrong animations

How to reproduce:

For convenience, I'll give a way that can be reproduced in the single-player world:

  • Summon a small Text Display with nbt:

/execute summon text_display run data merge entity @s {text:'"test"',billboard:"center"}
  • Change the size and start interpolation:

/data merge entity @e[type=minecraft:text_display,limit=1] {background:4294901760L,transformation:{scale:[10.0,10.0,10.0]},start_interpolation:0,interpolation_duration:1000}
  • Notice the text is scaling. When scaling, exit the world and re-enter it.

  • ❌ Notice the animation will jump to the end without continuing mid-interpolation.

Analyse:

The "previous" data of the entity is saved only on the client, which means that the server has no control over the data. This is a nightmare for content creators, as they have absolutely no guarantee that players will see the correct animation.

Linked issues

Attachments

Comments 7

It appears to be animating assuming the previous state was the default transform.

Related: MC-259964
Be sure to test this current bug in spawn chunks in singleplayer to ensure you don't hit this related bug

This is currently blocked by MC-260208 in 23w07a

For consideration, should MC-259964 and MC-260208 be merged into MC-259926 as different example cases for how interpolation has inconsistent behavior?

I should note, the repro example works. Rethinking it, it may be better to say, the issue has slightly changed in that there is no in-process animation now on world join (but possibly later given a certain wait time) for any of the examples. Overall, the issues in my last comment are probably tied to one overall issue with how interpolation is processed after reload.

I agree that MC-259964 can be merged with this. But MC-260208 is not related, which is about the calculation of interpolation time, and the other two are about the storage and synchronization of previous data.

Can confirm in 1.20.3 rc 1

Former user

(Unassigned)

Confirmed

Platform

Normal

Commands, Entities

23w06a, 23w07a, 1.19.4 Pre-release 1, 1.19.4 Release Candidate 1, 1.19.4 Release Candidate 3, 1.19.4, 1.20 Pre-release 4, 1.20.3 Release Candidate 1, 1.21.1, 1.21.8 Release Candidate 1

Retrieved