Minuteur de Disparition & Héritage d'Âge (MC 26.1.2)
Ce document détaille le cycle de vie de disparition, conversion des ticks en secondes, règles d'héritage d'âge récent et sécurité des usines dans Item Clumps pour Minecraft 26.1.2.
📊 Fiche Technique de Fonctionnalité
| Propriété | Spécification |
|---|---|
| Nom du Système | Préservateur de Disparition par l'Âge le Plus Récent |
| Seuil de Disparition Vanilla | $6,000\text{ ticks}$ ($300\text{ secondes} = 5.0\text{ minutes}$) |
| Règle d'Héritage d'Âge | $\text{age}_{\text{merged}} = \min(\text{age}_A, \text{age}_B)$ (L'item le plus récent l'emporte) |
| Délai de Ramassage | $\text{pickupDelay}_{\text{merged}} = \max(\text{pickupDelay}_A, \text{pickupDelay}_B)$ (Plus long délai conservé) |
| Champs Ciblés | ItemEntity.age et ItemEntity.pickupDelay |
⏳ Calcul Temporel : Ticks vers Secondes
Dans Minecraft, les minuteurs d'entités s'exécutent à 20 ticks par seconde :
$$1\text{ second} = 20\text{ ticks}$$ $$1\text{ minute} = 60\text{ seconds} = 1,200\text{ ticks}$$ $$5\text{ minutes} = 300\text{ seconds} = 6,000\text{ ticks}$$
Dans Minecraft Vanilla, une entité ItemEntity incrémente son champ age de $+1$ à chaque tick. Lorsque $\text{age} \ge 6000$, l'item est définitivement supprimé du monde.
🛡️ Règle de Préservation de l'Item le Plus Récent
Lorsque deux items fusionnent dans Item Clumps, l'entité survivante exécute :
$$\text{age}{\text{merged}} = \min(\text{age}{\text{this}}, \text{age}_{\text{other}})$$
Le flux continu d'items dans les fermes actives réinitialise continuellement l'âge de l'amas à 0. Tant que la ferme produit, aucun item ne disparaît.
Dès que la production s'arrête, l'amas reste au sol et le compteur atteint 6000 ticks, supprimant sans risque les items non ramassés après 5 minutes.
💻 Implémentation du Code Source Java Réel
Depuis ItemEntityMixin.java dans Minecraft 26.1.2 :
// Complete Merge: larger stack absorbs the smaller stack
if (otherCount < thisCount) {
thisStack.setCount(thisCount + otherCount);
this.setItem(thisStack);
this.pickupDelay = Math.max(this.pickupDelay, ((ItemEntityMixin)(Object)other).pickupDelay);
this.age = Math.min(this.age, ((ItemEntityMixin)(Object)other).age);
other.discard();
} else {
otherStack.setCount(thisCount + otherCount);
other.setItem(otherStack);
((ItemEntityMixin)(Object)other).pickupDelay = Math.max(((ItemEntityMixin)(Object)other).pickupDelay, this.pickupDelay);
((ItemEntityMixin)(Object)other).age = Math.min(((ItemEntityMixin)(Object)other).age, this.age);
this.discard();
}