Собственная броня 1.21.8
Вы узнаете как создавать собственные комплекты брони.
WARNING
Эта страница написана для версии 1.21.8.
Документация для старых версий может быть неполной.
Броня дает игроку повышенную защиту от атак мобов и других игроков.
Создание класса для материалов брони
Технически вам не нужен специальный класс для материала вашей брони, но в любом случае это хорошая практика, учитывая количество статических полей, которые вам понадобятся.
В этом примере мы создадим класс GuiditeArmorMaterial для хранения наших статических полей.
Базовая прочность
Эта константа будет использоваться в методе Item.Properties#maxDamage(int damageValue) при создании наших предметов брони. Она также потребуется в качестве параметра в конструкторе ArmorMaterial, когда мы позже создадим наш объект ArmorMaterial.
java
public static final int BASE_DURABILITY = 15;1
Если вы пытаетесь определить сбалансированную базовую прочность, вы можете обратиться к экземплярам материалов ванильных доспехов, которые можно найти в интерфейсе ArmorMaterials.
Ключ реестра ассетов оборудования
Хотя нам не нужно регистрировать наш ArmorMaterial в каких-либо реестрах, игра будет использовать его для поиска соответствующих текстур для нашей брони. Обычно хорошей практикой является хранить любые ключи реестра как константы.
java
public static final ResourceKey<EquipmentAsset> GUIDITE_ARMOR_MATERIAL_KEY = ResourceKey.create(EquipmentAssets.ROOT_ID, ResourceLocation.fromNamespaceAndPath(FabricDocsReference.MOD_ID, "guidite"));1
Мы передадим это конструктору ArmorMaterial позже.
Экземпляр ArmorMaterial
Чтобы создать наш материал, нам нужно создать новый экземпляр записи ArmorMaterial, здесь будут использоваться константы базового ключа реестра прочности и материала.
java
public static final ArmorMaterial INSTANCE = new ArmorMaterial(
BASE_DURABILITY,
Map.of(
ArmorType.HELMET, 3,
ArmorType.CHESTPLATE, 8,
ArmorType.LEGGINGS, 6,
ArmorType.BOOTS, 3
),
5,
SoundEvents.ARMOR_EQUIP_IRON,
0.0F,
0.0F,
REPAIRS_GUIDITE_ARMOR,
GUIDITE_ARMOR_MATERIAL_KEY
);1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Конструктор ArmorMaterial принимает следующие параметры в указанном порядке:
| Параметр | Описание |
|---|---|
durability | Базовая прочность всех частей брони, которая используется при расчете общей прочности каждого отдельного частей брони, в котором используется этот материал. Это должна быть базовая константа прочности, которую вы создали ранее. |
defense | Сопоставление EquipmentType (перечисление, представляющее каждый слот для брони) с целым значением, которое указывает защитную ценность материала при использовании в соответствующем слоте для брони. |
enchantmentValue | "Зачаровываемость" предметов брони, в которых используется этот материал. |
equipSound | Запись в реестре звукового события, которое воспроизводится, когда вы надеваете броню, в которой используется этот материал. Для получения дополнительной информации о звуках посетите страницу Пользовательские звуки. |
toughness | Плавающее значение, которое отражает "прочность" материала брони - по сути, то, насколько хорошо броня будет поглощать урон. |
knockbackResistance | Плавающее значение, представляющее собой величину сопротивления удару, которую материал брони обеспечивает владельцу. |
repairIngredient | Метка предмета, представляющая все предметы, которые могут быть использованы для ремонта доспехов из этого материала в наковальне. |
assetId | Ключ реестра EquipmentAsset. Это должна быть константа ключа реестра активов оборудования, созданная вами ранее. |
Если вам трудно определить значения для любого из параметров, вы можете обратиться к экземплярам ArmorMaterial, которые можно найти в интерфейсе ArmorMaterials.
Создание предметов брони
Теперь, когда вы зарегистрировали материал, вы можете создать предметы брони в своем классе ModItems:
Очевидно, что комплект брони необязательно должен включать все типы предметов, вы можете иметь комплект, состоящий только из ботинок, штанов и т.д. — классический черепаший панцирь — хороший пример комплекта брони с отсутствующими слотами.
В отличие от ToolMaterial, ArmorMaterial не хранит никакой информации о прочности предметов. По этой причине базовая прочность должна быть добавлена вручную к предметам Item.Properties при их регистрации.
Это достигается путем передачи константы BASE_DURABILITY, которую мы создали ранее, в метод maxDamage в классе Item.Properties.
java
public static final Item GUIDITE_HELMET = register(
"guidite_helmet",
Item::new,
new Item.Properties().humanoidArmor(GuiditeArmorMaterial.INSTANCE, ArmorType.HELMET)
.durability(ArmorType.HELMET.getDurability(GuiditeArmorMaterial.BASE_DURABILITY))
);
public static final Item GUIDITE_CHESTPLATE = register("guidite_chestplate",
Item::new,
new Item.Properties().humanoidArmor(GuiditeArmorMaterial.INSTANCE, ArmorType.CHESTPLATE)
.durability(ArmorType.CHESTPLATE.getDurability(GuiditeArmorMaterial.BASE_DURABILITY))
);
public static final Item GUIDITE_LEGGINGS = register(
"guidite_leggings",
Item::new,
new Item.Properties().humanoidArmor(GuiditeArmorMaterial.INSTANCE, ArmorType.LEGGINGS)
.durability(ArmorType.LEGGINGS.getDurability(GuiditeArmorMaterial.BASE_DURABILITY))
);
public static final Item GUIDITE_BOOTS = register(
"guidite_boots",
Item::new,
new Item.Properties().humanoidArmor(GuiditeArmorMaterial.INSTANCE, ArmorType.BOOTS)
.durability(ArmorType.BOOTS.getDurability(GuiditeArmorMaterial.BASE_DURABILITY))
);1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Вам также потребуется добавить предметы в группу предметов, если вы хотите, чтобы они были доступны из творческого инвентаря.
Как и для всех элементов, для них также следует создать ключи перевода.
Текстуры и Модели
Вам нужно будет создать набор текстур для предметов и набор текстур для самой брони, когда ее носят "гуманоидные" существа (игроки, зомби, скелеты и т.д.).
Текстуры и модели предметов
Эти текстуры ничем не отличаются от других предметов — вам необходимо создать текстуры и создать общую сгенерированную модель предмета, что было рассмотрено в руководстве Создание вашего первого предмета.
В качестве примера вы можете использовать следующие текстуры и модель JSON в качестве справочного материала.
INFO
Вам понадобятся файлы моделей JSON для всех предметов, а не только для шлема, принцип тот же, что и для других моделей предметов.
json
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "fabric-docs-reference:item/guidite_helmet"
}
}1
2
3
4
5
6
2
3
4
5
6
Как видите, в игре предметы брони должны иметь подходящие модели:

Текстуры брони
Когда существо наденет вашу броню, ничего не будет показано. Это происходит потому, что вам не хватает текстур и определений моделей оборудования.

Для текстуры брони есть два слоя, оба должны присутствовать.
Ранее мы создали константу ResourceKey<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/.
Константа ResourceKey<EquipmentAsset>, которую мы создали ранее, будет определять имя файла JSON. В данном случае это будет guidite.json.
Так как мы планируем добавлять только "гуманоидов" (шлем, нагрудник, поножи, ботинки и т.д.) части брони, определение модели нашего снаряжения, будут выглядеть следующим образом:
json
{
"layers": {
"humanoid": [
{
"texture": "fabric-docs-reference:guidite"
}
],
"humanoid_leggings": [
{
"texture": "fabric-docs-reference:guidite"
}
]
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
При наличии текстур и определения модели снаряжения вы сможете увидеть свою броню на объектах, которые ее носят:



