Despawn-Timer & Altersvererbung (MC 26.1.2)
Dieses Dokument beschreibt den Despawn-Lebenszyklus, Tick-zu-Sekunden-Umrechnung, Altersvererbungsregeln und Farm-Schutzmechanismen in Item Clumps für Minecraft 26.1.2.
📊 Feature-Infobox
| Eigenschaft | Spezifikation |
|---|---|
| Systemname | Bewahrer des Alters des jüngsten Items |
| Vanilla-Despawn-Schwelle | $6.000\text{ Ticks}$ ($300\text{ Sekunden} = 5.0\text{ Minuten}$) |
| Altersvererbungsregel | $\text{age}_{\text{merged}} = \min(\text{age}_A, \text{age}_B)$ (Jüngstes Item gewinnt) |
| Aufhebeverzögerungsregel | $\text{pickupDelay}_{\text{merged}} = \max(\text{pickupDelay}_A, \text{pickupDelay}_B)$ (Längste Verzögerung bleibt) |
| Zielfeld | ItemEntity.age und ItemEntity.pickupDelay |
⏳ Zeitberechnung: Ticks zu Sekunden
In Minecraft laufen Entitäts-Timer mit 20 Ticks pro Sekunde:
$$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}$$
In Vanilla Minecraft erhöht eine ItemEntity ihr internes Feld age jeden Tick um $+1$. Bei $\text{age} \ge 6000$ wird das Item dauerhaft aus der Welt gelöscht.
🛡️ Schutzregel für das jüngste Item
Wenn zwei Items in Item Clumps verschmelzen, führt die verbleibende Entität Folgendes aus:
$$\text{age}{\text{merged}} = \min(\text{age}{\text{this}}, \text{age}_{\text{other}})$$
Kontinuierlicher Itemfluss in aktiven Farmen setzt das Stapelalter wiederholt auf 0 zurück. Solange die Farm Items erzeugt, verschwindet kein Item.
Sobald keine neuen Items nachkommen, zählt der Timer von 0 bis 6000 Ticks hoch und entfernt ungesammelte Items nach 5 Minuten Inaktivität sicher.
💻 Reale Java-Quellcode-Implementierung
Aus ItemEntityMixin.java in 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();
}