Броня в семи местах и три зоны урона

- В реестр заведены 46 предметов одежды ремейка: слот, слой, какие части тела
  закрывает и сколько снимает из каждого вида вреда. Данные выгружены в items.csv
  (extract-items.py), в коде у каждого предмета armor(...).
- Семь мест: голова, лицо, грудь (2 слоя), ноги (2 слоя), руки, стопы, полный
  костюм. Пояс не делали - в ремейке его нет, есть только быстрая панель.
- Inventory сервера: семь мест по два слоя, вещи надеваются и снимаются.
- Damage: зона урона по точке попадания (голова верхние 0.4, ноги нижние 0.4),
  множители голова 2, тело 1, ноги 0.75; одежда снимает вред только там, где
  закрывает.
- Пакет Attack (цель, точка попадания, рука) и клиентский патч, который его
  шлёт. У игрока появилась жизнь.
- В items.csv добавлены колонки armor_slot, armor_layer, armor_zones.

Тесты: протокол 24 + 10, сервер 85. Форк собирается чисто, 3279 классов.
This commit is contained in:
sasheg dev
2026-10-21 22:43:52 +03:00
parent 9980c1561d
commit 7505ddd84e
18 changed files with 1188 additions and 262 deletions
@@ -265,6 +265,26 @@ public final class RsxNetworkManager extends NetworkManager {
}
}
/**
* Tells the server where a hit landed.
*
* The server counts the damage, and it needs to know where the hit
* landed: a hit on the head is worth twice a hit on the body.
*/
public static void reportAttack(Minecraft mc, net.minecraft.entity.Entity target) {
RsxNetworkManager manager = active();
if (manager == null || mc == null || target == null) {
return;
}
if (mc.objectMouseOver == null
|| mc.objectMouseOver.typeOfHit != net.minecraft.util.math.RayTraceResult.Type.ENTITY) {
return;
}
net.minecraft.util.math.Vec3d hit = mc.objectMouseOver.hitVec;
manager.send(Packets.ATTACK, new Packets.Attack(target.getEntityId(),
(float) hit.x, (float) hit.y, (float) hit.z, Packets.Attack.HAND_MAIN));
}
/**
* Asks the server to read its box file again.
*