Je crois avoir déterminé l'algorithme pour la chute de sable et de gravier ; je l'ai déjà écrit. sur Minecraft Wiki . J'utiliserai le terme "sable" pour désigner le sable ou le gravier.
Lorsque le sable tombe, c'est un entité comme tous les autres objets se déplaçant librement. Cette entité tombe sous l'influence de la gravité jusqu'à ce qu'elle heurte quelque chose de solide sur son fond. Cela provoque une tentative de placement d'un bloc solide à l'emplacement de la grille cubique contenant le point central inférieur du sable tombant . Ensuite, si ce cube est occupé par un bloc (comme une dalle ou une torche), le sable se transforme en ressource (le cube rotatif que vous pouvez ramasser).
Ainsi, comme le montre la description ci-dessus, le sable peut se briser autrement qu'en tombant sur les torches :
- Une tête de piston se déplaçait vers le haut à travers le cube lorsque le sable a atterri.
- Un autre bloc de sable a atterri dans ce cube pendant que le sable y entrait.
- Un piston pousse un bloc dans le cube que le sable occupe déjà en partie. (C'est ce qui se passe dans votre exemple de tour de sable).
Afin d'éviter de briser le sable avec les mécanismes de piston, ne poussez pas les blocs dans l'espace où le sable est en train de tomber.