Skip to content

Снижение урона и вероятность (26.1.2)

Математическое свойствоЗначение
Всего единиц урона$\text{amount} \times 100$
Базовое целочисленное деление$\lfloor (\text{amount} \times 100) / \text{percent} \rfloor$
Остаток$(\text{amount} \times 100) \pmod{\text{percent}}$
Случайная проверкаrandom.nextInt(percent) < remainder
Границы целых чисел$\ge 0$ (глобальное по умолчанию: 200, переопределения: 0 = наследование)
Нижний предел нулевого уронаГарантированно $0$ при Режиме бога или успешном броске вероятностного поглощения

🛡️ Почему перехват урона гарантирует 100% безопасность сохранений?

Durability Multiplier is engineered to never mutate item NBT or DataComponents stored in world save files.

Почему нельзя напрямую изменять DataComponents.MAX_DAMAGE?

  1. Нулевое загрязнение мира: Изменение максимальной прочности навсегда запекает измененные значения в инвентарях игроков, сундуках и сохранениях. Если игрок удалит мод или изменит GameRules, предметы останутся поврежденными или измененными навсегда.
  2. Мгновенная горячая перезагрузка: Изменение /gamerule ig:dm_percent_global немедленно вступает в силу для каждого предмета в мире без сканирования инвентарей или пересоздания предметов.
  3. Баланс починки и наковальни: Стоимость ремонта на наковальне и поглощение опыта чарами «Починка» рассчитываются на основе стандартной прочности без переполнения чисел или штрафов.

Вместо этого мод динамически перехватывает события урона во время выполнения через ItemStackDurabilityMixin и применяет вероятностное масштабирование урона (ту же архитектуру, что и ванильные чары Прочность).


📐 Точный алгоритм масштабирования

Когда предмет используется (нанося урон originalAmount, обычно 1 при разрушении блока или ударе):

java
public static int calculateScaledDamage(int originalAmount, int percent, RandomSource random) {
    if (originalAmount <= 0)
        return 0;
    if (percent <= 0 || percent == 100)
        return originalAmount;

    int totalDamageUnits = originalAmount * 100;
    int baseDamage = totalDamageUnits / percent;
    int remainder = totalDamageUnits % percent;
    if (remainder > 0 && random.nextInt(percent) < remainder) {
        baseDamage++;
    }
    return baseDamage;
}

🎲 Матрица распределения вероятностей

Для события с 1 единицей урона (originalAmount = 1)

ПроцентЭффективный множительБаза (100 / P)Остаток (100 % P)Шанс урона за ударОжидаемый урон за ударОтносительная прочность
25%$0.25\times$40$100%$ (4 урона)$4.00$$0.25\times$ (износ в 4 раза быстрее)
50%$0.50\times$20$100%$ (2 урона)$2.00$$0.50\times$ (износ в 2 раза быстрее)
75%$0.75\times$125$100%$ (1) + $33.3%$ (+1)$1.33$$0.75\times$ (износ в 1.33 раза быстрее)
100%$1.00\times$ (Ваниль)10$100%$ (1 урон)$1.00$$1.00\times$ (Стандарт)
150%$1.50\times$0100$\frac{100}{150} \approx 66.67%$ (1 урон)$0.67$$1.50\times$
200%$2.00\times$0100$\frac{100}{200} = 50.00%$ (1 урон)$0.50$$2.00\times$
300%$3.00\times$0100$\frac{100}{300} \approx 33.33%$ (1 урон)$0.33$$3.00\times$
500%$5.00\times$0100$\frac{100}{500} = 20.00%$ (1 урон)$0.20$$5.00\times$
1000%$10.00\times$0100$\frac{100}{1000} = 10.00%$ (1 урон)$0.10$$10.00\times$

📈 Независимые случайные проверки и закон больших чисел

Поскольку поглощение урона рассчитывается независимо при каждом ударе (как у ванильных чар «Прочность»):

  • При 500% (5x) каждый удар независимо бросает шанс $20%$ получить 1 урон и $80%$ получить 0.
  • В кратких испытаниях инструмент может получить 1 урон через 2 удара или через 8 ударов.
  • За весь срок службы инструмента (например, 1 561 использование алмазного топора) общее число сломанных блоков математически сходится к $\approx 7 805$ использований (ровно $5\times$).

Пусть $N$ — ванильная прочность предмета, а $P$ — активный процент ($P \ge 100$). Количество использований $U$ до поломки подчиняется отрицательному биномиальному распределению со средним значением:

$$\mathbb{E}[U] = N \times \frac{P}{100}$$

На протяжении тысяч использований закон больших чисел гарантирует, что общая прочность сойдется к ровно $\frac{P}{100}$ ванильной прочности.

Official documentation & web portal for Dasik Igaijinn mods.