🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
Страница написана для версии игры:
1.21.4
Страница написана для версии игры:
1.21.4
Броня дает игроку повышенную защиту от атак мобов и других игроков.
Технически вам не нужен специальный класс для материала вашей брони, но в любом случае это хорошая практика, учитывая количество статических полей, которые вам понадобятся.
В этом примере мы создадим класс GuiditeArmorMaterial
для хранения наших статических полей.
Эта константа будет использоваться в методе Item.Settings#maxDamage(int damageValue)
при создании наших предметов брони. Она также потребуется в качестве параметра в конструкторе ArmorMaterial
, когда мы позже создадим наш объект ArmorMaterial
.
public static final int BASE_DURABILITY = 15;
Если вы пытаетесь определить сбалансированную базовую прочность, вы можете обратиться к экземплярам материалов ванильных доспехов, которые можно найти в интерфейсе ArmorMaterials
.
Хотя нам не нужно регистрировать наш ArmorMaterial
в каких-либо реестрах, игра будет использовать его для поиска соответствующих текстур для нашей брони. Обычно хорошей практикой является хранить любые ключи реестра как константы.
public static final RegistryKey<EquipmentAsset> GUIDITE_ARMOR_MATERIAL_KEY = RegistryKey.of(EquipmentAssetKeys.REGISTRY_KEY, Identifier.of(FabricDocsReference.MOD_ID, "guidite"));
Мы передадим это конструктору ArmorMaterial
позже.
ArmorMaterial
Чтобы создать наш материал, нам нужно создать новый экземпляр записи ArmorMaterial
, здесь будут использоваться константы базового ключа реестра прочности и материала.
public static final ArmorMaterial INSTANCE = new ArmorMaterial(
BASE_DURABILITY,
Map.of(
EquipmentType.HELMET, 3,
EquipmentType.CHESTPLATE, 8,
EquipmentType.LEGGINGS, 6,
EquipmentType.BOOTS, 3
),
5,
SoundEvents.ITEM_ARMOR_EQUIP_IRON,
0.0F,
0.0F,
REPAIRS_GUIDITE_ARMOR,
GUIDITE_ARMOR_MATERIAL_KEY
);
Конструктор ArmorMaterial
принимает следующие параметры в указанном порядке:
Параметр | Описание |
---|---|
durability | Базовая прочность всех частей брони, которая используется при расчете общей прочности каждого отдельного частей брони, в котором используется этот материал. Это должна быть базовая константа прочности, которую вы создали ранее. |
defense | Сопоставление EquipmentType (перечисление, представляющее каждый слот для брони) с целым значением, которое указывает защитную ценность материала при использовании в соответствующем слоте для брони. |
enchantmentValue | "Зачаровываемость" предметов брони, в которых используется этот материал. |
equipSound | Запись в реестре звукового события, которое воспроизводится, когда вы надеваете броню, в которой используется этот материал. Для получения дополнительной информации о звуках посетите страницу Пользовательские звуки. |
toughness | Плавающее значение, которое отражает "прочность" материала брони - по сути, то, насколько хорошо броня будет поглощать урон. |
knockbackResistance | Плавающее значение, представляющее собой величину сопротивления удару, которую материал брони обеспечивает владельцу. |
repairIngredient | Метка предмета, представляющая все предметы, которые могут быть использованы для ремонта доспехов из этого материала в наковальне. |
assetId | Ключ реестра EquipmentAsset . Это должна быть константа ключа реестра активов оборудования, созданная вами ранее. |
Если вам трудно определить значения для любого из параметров, вы можете обратиться к экземплярам ArmorMaterial
, которые можно найти в интерфейсе ArmorMaterials
.
Теперь, когда вы зарегистрировали материал, вы можете создать предметы брони в своем классе ModItems
:
Очевидно, что комплект брони необязательно должен включать все типы предметов, вы можете иметь комплект, состоящий только из ботинок, штанов и т.д. — классический черепаший панцирь — хороший пример комплекта брони с отсутствующими слотами.
В отличие от ToolMaterial
, ArmorMaterial
не хранит никакой информации о прочности предметов. По этой причине базовая прочность должна быть добавлена вручную к предметам Item.Settings
при их регистрации.
Это достигается путем передачи константы BASE_DURABILITY
, которую мы создали ранее, в метод maxDamage
в классе Item.Settings
.
public static final RegistryKey<Item> GUIDITE_HELMET_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricDocsReference.MOD_ID, "guidite_helmet"));
public static final Item GUIDITE_HELMET = register(new ArmorItem(GuiditeArmorMaterial.INSTANCE, EquipmentType.HELMET, new Item.Settings().registryKey(GUIDITE_HELMET_KEY).maxDamage(EquipmentType.HELMET.getMaxDamage(GuiditeArmorMaterial.BASE_DURABILITY))), GUIDITE_HELMET_KEY);
public static final RegistryKey<Item> GUIDITE_CHESTPLATE_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricDocsReference.MOD_ID, "guidite_chestplate"));
public static final Item GUIDITE_CHESTPLATE = register(new ArmorItem(GuiditeArmorMaterial.INSTANCE, EquipmentType.CHESTPLATE, new Item.Settings().registryKey(GUIDITE_CHESTPLATE_KEY).maxDamage(EquipmentType.CHESTPLATE.getMaxDamage(GuiditeArmorMaterial.BASE_DURABILITY))), GUIDITE_CHESTPLATE_KEY);
public static final RegistryKey<Item> GUIDITE_LEGGINGS_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricDocsReference.MOD_ID, "guidite_leggings"));
public static final Item GUIDITE_LEGGINGS = register(new ArmorItem(GuiditeArmorMaterial.INSTANCE, EquipmentType.LEGGINGS, new Item.Settings().registryKey(GUIDITE_LEGGINGS_KEY).maxDamage(EquipmentType.LEGGINGS.getMaxDamage(GuiditeArmorMaterial.BASE_DURABILITY))), GUIDITE_LEGGINGS_KEY);
public static final RegistryKey<Item> GUIDITE_BOOTS_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricDocsReference.MOD_ID, "guidite_boots"));
public static final Item GUIDITE_BOOTS = register(new ArmorItem(GuiditeArmorMaterial.INSTANCE, EquipmentType.BOOTS, new Item.Settings().registryKey(GUIDITE_BOOTS_KEY).maxDamage(EquipmentType.BOOTS.getMaxDamage(GuiditeArmorMaterial.BASE_DURABILITY))), GUIDITE_BOOTS_KEY);
Вам также потребуется добавить предметы в группу предметов, если вы хотите, чтобы они были доступны из творческого инвентаря.
Как и для всех элементов, для них также следует создать ключи перевода.
Вам нужно будет создать набор текстур для предметов и набор текстур для самой брони, когда ее носят "гуманоидные" существа (игроки, зомби, скелеты и т.д.).
Эти текстуры ничем не отличаются от других предметов — вам необходимо создать текстуры и создать общую сгенерированную модель предмета, что было рассмотрено в руководстве Создание вашего первого предмета.
В качестве примера вы можете использовать следующие текстуры и модель JSON в качестве справочного материала.
INFO
Вам понадобятся файлы моделей JSON для всех предметов, а не только для шлема, принцип тот же, что и для других моделей предметов.
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "fabric-docs-reference:item/guidite_helmet"
}
}
Как видите, в игре предметы брони должны иметь подходящие модели:
Когда существо наденет вашу броню, ничего не будет показано. Это происходит потому, что вам не хватает текстур и определений моделей оборудования.
Для текстуры брони есть два слоя, оба должны присутствовать.
Ранее мы создали константу RegistryKey<EquipmentAsset>
с именем GUIDITE_ARMOR_MATERIAL_KEY
, которую мы передали в наш конструктор ArmorMaterial
. Рекомендуется называть текстуру аналогичным образом, поэтому в нашем случае это guidite.png
assets/<mod_id>/textures/entity/equipment/humanoid/guid item.png
- Содержит текстуры верхней части тела и ботинок.assets/<mod_id>/textures/entity/equipment/humanoid_leggings/guid item.png
- Содержит текстуры ног.TIP
Если вы обновляетесь до версии 1.21.4 со старой версии игры, то текстура брони layer0.png
будет помещена в папку humanoid
, а текстура брони layer1.png
- в папку humanoid_leggings
.
Далее вам нужно будет создать соответствующее определение модели оборудования. Они находятся в папке /assets/<mod_id>/equipment/
.
Константа RegistryKey<EquipmentAsset>
, которую мы создали ранее, будет определять имя файла JSON. В данном случае это будет guidite.json
.
Так как мы планируем добавлять только "гуманоидов" (шлем, нагрудник, поножи, ботинки и т.д.) части брони, определение модели нашего снаряжения, будут выглядеть следующим образом:
{
"layers": {
"humanoid": [
{
"texture": "fabric-docs-reference:guidite"
}
],
"humanoid_leggings": [
{
"texture": "fabric-docs-reference:guidite"
}
]
}
}
При наличии текстур и определения модели снаряжения вы сможете увидеть свою броню на объектах, которые ее носят: