Типи шкоди визначають типи шкоди, яку можуть отримати сутності. Починаючи з Minecraft 1.19.4, з'явилося створення нових типів пошкоджень стають керованими даними, тобто вони створюються за допомогою файлів JSON.
Створення типу шкоди
Створімо спеціальний тип шкоди під назвою Tater. Почнімо з того, що створимо JSON файл для вашого типу шкоди. Цей файл буде розміщено в каталозі data вашого мода, у підкаталозі з назвою damage_type.
resources/data/fabric-docs-reference/damage_type/tater.jsonВін має таку структуру:
json
{
"exhaustion": 0.1,
"message_id": "tater",
"scaling": "when_caused_by_living_non_player"
}1
2
3
4
5
2
3
4
5
Цей спеціальний тип шкоди збільшує 0,1 у виснаженні від голоду кожного разу, коли гравець отримує шкоду, коли шкоду нанесено живим джерелом, проте не є гравцем (наприклад, блоком). Крім того, сума завданої шкоди буде збільшуватися зі складністю у світі
INFO
Зверніться до Minecraft Wiki, щоб дізнатися про всі можливі ключі та значення.
Доступ до типів шкоди за допомогою коду
Коли нам потрібно отримати доступ до нашого спеціального типу пошкодження через код, ми будемо використовувати його RegistryKey для створення екземпляра з DamageSource.
RegistryKey можна отримати таким чином:
java
public static final RegistryKey<DamageType> TATER_DAMAGE = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, Identifier.of(FabricDocsReference.MOD_ID, "tater"));1
Використання типів шкоди
Щоб продемонструвати використання власних типів шкоди, ми використаємо власний блок, нехай це буде Tater Block. Зробімо так, що коли жива істота наступає на Tater Block, вона отримує тип шкоди Tater.
Ви можете перевизначити onSteppedOn, щоб завдати цієї шкоди.
Ми починаємо зі створення DamageSource нашого спеціального типу шкоди.
java
DamageSource damageSource = new DamageSource(
world.getRegistryManager()
.getOrThrow(RegistryKeys.DAMAGE_TYPE)
.getEntry(FabricDocsReferenceDamageTypes.TATER_DAMAGE.getValue()).get()
);1
2
3
4
5
2
3
4
5
Потім ми викликаємо entity.damage() з нашим DamageSource і сумою.
java
entity.damage(serverWorld, damageSource, 5.0f);1
Повна реалізація блоку:
java
public class TaterBlock extends Block {
public TaterBlock(Settings settings) {
super(settings);
}
@Override
public void onSteppedOn(World world, BlockPos pos, BlockState state, Entity entity) {
if (entity instanceof LivingEntity && world instanceof ServerWorld serverWorld) {
DamageSource damageSource = new DamageSource(
world.getRegistryManager()
.getOrThrow(RegistryKeys.DAMAGE_TYPE)
.getEntry(FabricDocsReferenceDamageTypes.TATER_DAMAGE.getValue()).get()
);
entity.damage(serverWorld, damageSource, 5.0f);
}
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Тепер щоразу, коли жива істота наступає на наш спеціальний блок, вона отримує 5 шкоди (2,5 серця), нашим типом шкоди.
Власне сповіщення про смерть
Ви можете визначити повідомлення про смерть для типу шкоди у форматі death.attack.message_id у нашому файл en_us.json (це англійська, для української створіть uk_ua.json) мода.
json
{
// ...
"death.attack.tater": "%1$s died from Tater damage!",
// ...
}1
2
3
4
5
2
3
4
5
Після смерті від нашого типу шкоди ви побачите таке повідомлення про смерть:

Теґи типу шкоди
Деякі типи шкоди можуть обійти обладунки, ефекти тощо. Теґи використовуються для керування такими властивостями типів шкоди.
Ви можете знайти наявні теґи типу шкоди в data/minecraft/tags/damage_type.
INFO
Зверніться до Minecraft Wiki, щоб отримати повний список теґів типу шкоди.
Додамо наш тип шкоди Tater до теґу типу шкоди bypasses_armor.
Щоб додати наш тип шкоди до одного з цих теґів, ми створюємо файл JSON у просторі імен minecraft.
data/minecraft/tags/damage_type/bypasses_armor.jsonЗ таким змістом:
json
{
"values": [
"fabric-docs-reference:tater"
]
}1
2
3
4
5
2
3
4
5
Переконайтеся, що ваш теґ не замінює наявний теґ, встановивши для ключа replace значення false.


