🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
This page is written for:
1.21
This page is written for:
1.21
Типы урона определяют типы повреждений, которые могут получить сущности. Начиная с Minecraft 1.19.4, создание новых типов урона стало управляться данными, то есть они создаются с использованием файлов JSON.
Давайте создадим собственный тип повреждений под названием Tater. Начнем с создания JSON-файла для вашего индивидуального типа урона. Этот файл будет помещён в директорию вашего мода: data
, в подпапку с названием damage_type
.
resources/data/fabric-docs-reference/damage_type/tater.json
Он имеет следующую структуру:
{
"exhaustion": 0.1,
"message_id": "tater",
"scaling": "when_caused_by_living_non_player"
}
Этот пользовательский тип урона увеличивает истощение голодом на 0,1 каждый раз, когда игрок получает урон, когда урон наносится живым, неигровым источником (например, блоком). Кроме того, количество нанесенного урона будет масштабироваться в зависимости от сложности мира
INFO
Все возможные ключи и значения можно найти на Minecraft Wiki.
Когда нам нужно получить доступ к нашему пользовательскому типу урона через код, мы будем использовать его RegistryKey
для создания экземпляра DamageSource
.
RegistryKey
можно получить следующим образом:
public static final RegistryKey<DamageType> TATER_DAMAGE = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, Identifier.of("fabric-docs-reference", "tater"));
Чтобы продемонстрировать использование пользовательских типов урона, мы будем использовать пользовательский блок под названием Tater Block. Давайте сделаем так, что когда живое существо наступает на Tater Block, оно наносит Tater урон.
Вы можете переопределить onSteppedOn
, чтобы нанести этот урон.
Начнем с создания DamageSource
нашего пользовательского типа урона.
DamageSource damageSource = new DamageSource(
world.getRegistryManager()
.get(RegistryKeys.DAMAGE_TYPE)
.entryOf(FabricDocsReferenceDamageTypes.TATER_DAMAGE));
Затем мы вызываем entity.damage()
с нашим DamageSource
и суммой.
entity.damage(damageSource, 5.0f);
Полная реализация блока:
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) {
DamageSource damageSource = new DamageSource(
world.getRegistryManager()
.get(RegistryKeys.DAMAGE_TYPE)
.entryOf(FabricDocsReferenceDamageTypes.TATER_DAMAGE));
entity.damage(damageSource, 5.0f);
}
}
}
Теперь, когда живое существо наступит на наш блок, оно получит 5 единиц урона (2,5 сердца) с использованием нашего типа урона.
Вы можете определить сообщение о смерти для типа урона в формате death.attack.<message_id>
в файле en_us.json
.
"item.minecraft.potion.effect.tater": "Tater Potion",
После смерти от нашего типа урона вы увидите следующее сообщение о смерти:
Некоторые типы урона могут обходить броню, обходить эффекты сущности и т.д. Теги используются для управления этими свойствами типов урона.
Существующие теги типов урона можно найти в data/minecraft/tags/damage_type
.
INFO
Полный список тегов типов урона см. на Minecraft Wiki.
Давайте добавим наш тип урона Tater к тегу типа урона bypasses_armor
.
Чтобы добавить наш тип урона к одному из этих тегов, мы создаем JSON-файл в пространстве имен minecraft
.
data/minecraft/tags/damage_type/bypasses_armor.json
Со следующим содержанием:
{
"replace": false,
"values": [
"fabric-docs-reference:tater"
]
}
Убедитесь, что ваш тег не заменяет существующий тег, установив ключ replace
в значение false
.