Skip to content

Таймер исчезновения и наследование возраста (MC 26.1.2)

Этот документ описывает жизненный цикл исчезновения, перевод тиков в секунды, наследование возраста самого молодого предмета и защиту ферм в Minecraft 26.1.2.


📊 Информационный блок функции

СвойствоСпецификация
Имя системыХранитель возраста самого молодого предмета
Ванильный порог исчезновения$6,000\text{ тиков}$ ($300\text{ с} = 5.0\text{ мин}$)
Правило наследования возраста$\text{age}_{\text{merged}} = \min(\text{age}_A, \text{age}_B)$ (выбирается самый молодой)
Задержка подбора$\text{pickupDelay}_{\text{merged}} = \max(\text{pickupDelay}_A, \text{pickupDelay}_B)$ (сохраняется наибольшая)
Целевые поляItemEntity.age и ItemEntity.pickupDelay

⏳ Математика перевода тиков в секунды

В Minecraft таймеры сущностей обновляются со скоростью 20 тиков в секунду:

$$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}$$

В ванильной игре ItemEntity увеличивает поле age на $+1$ каждый игровой тик. При $\text{age} \ge 6000$ предмет навсегда удаляется из мира.


🛡️ Правило сохранения возраста самого молодого предмета

При слиянии двух предметов в Item Clumps уцелевшая сущность выполняет:

$$\text{age}{\text{merged}} = \min(\text{age}{\text{this}}, \text{age}_{\text{other}})$$

Постоянный поток предметов на работающих фермах непрерывно сбрасывает возраст скопления на 0. Пока идет приток предметов, они никогда не пропадут.

Когда производство останавливается, скопление лежит на земле, и таймер возраста доходит до 6000 тиков, удаляя несобранный лут через 5 минут.


💻 Исходный код реализации на Java

Из ItemEntityMixin.java в Minecraft 26.1.2:

java
// 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();
}

🔗 Связанная документация (MC 26.1.2)

Official documentation & web portal for Dasik Igaijinn mods.