Temporizador de Despawn e Herança de Idade (MC 26.1.2)
Este documento detalha o ciclo de vida de despawn, conversão de ticks em segundos, regras de herança de idade mais recente e proteções para farms no Item Clumps para Minecraft 26.1.2.
📊 Ficha Técnica do Recurso
| Propriedade | Especificação |
|---|---|
| Nome do Sistema | Preservador de Despawn por Idade Mais Jovem |
| Limiar de Despawn Vanilla | $6.000\text{ ticks}$ ($300\text{ segundos} = 5.0\text{ minutos}$) |
| Regra de Herança de Idade | $\text{age}_{\text{merged}} = \min(\text{age}_A, \text{age}_B)$ (O item mais jovem prevalece) |
| Regra de Atraso de Coleta | $\text{pickupDelay}_{\text{merged}} = \max(\text{pickupDelay}_A, \text{pickupDelay}_B)$ (Maior atraso mantido) |
| Campo Alvo | ItemEntity.age e ItemEntity.pickupDelay |
⏳ Matemática de Tempo de Ticks para Segundos
No Minecraft, temporizadores de entidades rodam 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}$$
No Minecraft Vanilla, uma entidade ItemEntity incrementa seu campo interno age em $+1$ a cada tick de jogo. Quando $\text{age} \ge 6000$, o item é descartado permanentemente do mundo.
🛡️ Regra de Proteção do Item Mais Jovem
Quando dois itens se fundem no Item Clumps, a entidade sobrevivente executa:
$$\text{age}{\text{merged}} = \min(\text{age}{\text{this}}, \text{age}_{\text{other}})$$
O fluxo contínuo de itens em farms ativas reinicia repetidamente a idade do agrupamento para 0. Enquanto a farm estiver gerando itens ativamente, nenhum item sofrerá despawn.
Assim que a farm para de produzir itens, o agrupamento permanece no chão e o temporizador de idade avança até 6000 ticks, limpando os itens após 5 minutos de inatividade.
💻 Implementação do Código-Fonte Java Real
De ItemEntityMixin.java no 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();
}