Temporizador de desaparición y herencia de edad (MC 26.1.2)
Este documento detalla el ciclo de vida de desaparición, el cálculo de conversión de ticks a segundos, las reglas de herencia de edad más reciente y salvaguardas para granjas en Item Clumps para Minecraft 26.1.2.
📊 Ficha técnica de características
| Propiedad | Especificación |
|---|---|
| Nombre del sistema | Preservador de desaparición por edad más reciente |
| Umbral de desaparición Vanilla | $6,000\text{ ticks}$ ($300\text{ segundos} = 5.0\text{ minutos}$) |
| Regla de herencia de edad | $\text{age}_{\text{merged}} = \min(\text{age}_A, \text{age}_B)$ (El objeto más reciente prevalece) |
| Regla de retardo de recogida | $\text{pickupDelay}_{\text{merged}} = \max(\text{pickupDelay}_A, \text{pickupDelay}_B)$ (Se conserva el retardo mayor) |
| Campo objetivo | ItemEntity.age e ItemEntity.pickupDelay |
⏳ Cálculo de tiempo de Ticks a Segundos
En Minecraft, los temporizadores de entidades funcionan a 20 ticks por segundo:
$$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}$$
En Minecraft Vanilla, una entidad ItemEntity incrementa su campo interno age en $+1$ cada tick del juego. Cuando $\text{age} \ge 6000$, el objeto se elimina permanentemente del mundo.
🛡️ Regla de salvaguarda del objeto más reciente
Cuando dos objetos se fusionan en Item Clumps, la entidad superviviente ejecuta:
$$\text{age}{\text{merged}} = \min(\text{age}{\text{this}}, \text{age}_{\text{other}})$$
El flujo continuo de objetos en granjas activas reinicia repetidamente la edad del grupo a 0. Mientras la granja genere objetos activamente, ningún objeto desaparecerá jamás.
Una vez que la granja deja de producir objetos, el grupo permanece en el suelo y el temporizador avanza hasta 6000 ticks, limpiando de forma segura los objetos tras 5 minutos.
💻 Implementación del código fuente Java real
De ItemEntityMixin.java en 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();
}