Броня дает игроку повышенную защиту от атак мобов и других игроков.
Создание класса для материалов брони
Материалы брони, как и предметы и блоки, необходимо регистрировать. Создадим класс ModArmorMaterials для организации хранения наших материалов для брони.
Вам нужно будет добавить статический метод initialize() к этому классу и вызвать его из точки входа вашего мода, чтобы зарегистрировать материалы.
java
// Within the ModArmorMaterials class
public static void initialize() {};1
2
2
WARNING
Убедитесь, что вызываете этот метод до регистрации предметов, так как материалы должны регистрироваться до создания предметов.
java
@Override
public void onInitialize() {
ModArmorMaterials.initialize();
}1
2
3
4
2
3
4
Внутри класса ModArmorMaterials необходимо создать статический метод для регистрации материалов брони. Этот метод должен возвращать запись материала в реестре, которая в дальнейшем будет использована в конструкторе ArmorItem для создания предмета брони.
java
public static RegistryEntry<ArmorMaterial> registerMaterial(String id, Map<ArmorItem.Type, Integer> defensePoints, int enchantability, RegistryEntry<SoundEvent> equipSound, Supplier<Ingredient> repairIngredientSupplier, float toughness, float knockbackResistance, boolean dyeable) {
// Get the supported layers for the armor material
List<ArmorMaterial.Layer> layers = List.of(
// The ID of the texture layer, the suffix, and whether the layer is dyeable.
// We can just pass the armor material ID as the texture layer ID.
// We have no need for a suffix, so we'll pass an empty string.
// We'll pass the dyeable boolean we received as the dyeable parameter.
new ArmorMaterial.Layer(Identifier.of(ExampleMod.MOD_ID, id), "", dyeable)
);
ArmorMaterial material = new ArmorMaterial(defensePoints, enchantability, equipSound, repairIngredientSupplier, layers, toughness, knockbackResistance);
// Register the material within the ArmorMaterials registry.
material = Registry.register(Registries.ARMOR_MATERIAL, Identifier.of(ExampleMod.MOD_ID, id), material);
// The majority of the time, you'll want the RegistryEntry of the material - especially for the ArmorItem constructor.
return RegistryEntry.of(material);
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Свойства материала брони
TIP
Если вам сложно оценить значение любого из этих свойств, рассмотрите возможность изучения стандартных материалов брони в классе ArmorMaterials.
При создании материала брони вам необходимо определить следующие свойства:
Очки защиты
WARNING
Обязательно укажите стоимость каждого типа доспехов, которые вы планируете создать, и зарегистрируйте их как предмет. Если вы создадите предмет для брони без установленного значения очков защиты, игра сломается, а в следствии вылетит.
Карта defensePoints используется для определения количества очков защиты, которые будет обеспечивать каждая часть брони. Чем выше число, тем большую защиту обеспечит элемент брони. Карта должна содержать запись для каждого типа доспехов.
Зачарования
Свойство «зачаровываемость» определяет, насколько легко можно зачаровать доспехи. Чем выше число, тем больше чар может получить броня.
Звук экипировки
Свойство equipSound — это звук, который будет воспроизводиться при надевании доспехов. Этот звук должен быть записью реестра SoundEvent. Если вы планируете создавать собственные звуки, а не полагаться на стандартные звуки в классе SoundEvents, рассмотрите возможность заглянуть на страницу Пользовательские звуковые события.
Ингредиент(ы) для ремонта
Свойство repairIngredientSupplier является поставщиком Ингредиента, который используется для ремонта брони. Этот ингредиент может быть практически любым, рекомендуется установить его таким же, как ингредиент материала, который использовался для изготовления самих предметов брони.
Прочность
Свойство «прочность» определяет, какой урон может поглотить броня. Чем выше число, тем больше урона поглотит броня.
Сопротивление отбрасыванию
Свойство «Сопротивление отбрасыванию» определяет, насколько сильно отбрасывает игрока при ударе. Чем выше число, тем меньше отбрасывание получит игрок.
Окрашиваемый
Свойство dyeable — это логическое значение, определяющее, можно ли красить броню. Если установлено значение true, броню можно красить с помощью красителей на верстаке.
Если вы решили сделать свою броню окрашиваемой, то слои брони и текстуры предметов должны быть предназначены для окрашивания, поскольку краска будет накладываться на текстуру, а не заменять ее. Взгляните, например, на классическую кожаную броню из Minecraft: текстуры выполнены в оттенках серого, а краска нанесена поверх нее, из-за чего броня меняет цвет.
Регистрация материала брони
Теперь, когда вы создали вспомогательный метод, который можно использовать для регистрации материалов брони, вы можете зарегистрировать свои собственные материалы брони как статическое поле в классе ModArmorMaterials.
Для этого примера мы создадим броню Guidite со следующими свойствами:
java
public static final RegistryEntry<ArmorMaterial> GUIDITE = registerMaterial("guidite",
// Defense (protection) point values for each armor piece.
Map.of(
ArmorItem.Type.HELMET, 3,
ArmorItem.Type.CHESTPLATE, 8,
ArmorItem.Type.LEGGINGS, 6,
ArmorItem.Type.BOOTS, 3
),
// Enchantability. For reference, leather has 15, iron has 9, and diamond has 10.
5,
// The sound played when the armor is equipped.
SoundEvents.ITEM_ARMOR_EQUIP_IRON,
// The ingredient(s) used to repair the armor.
() -> Ingredient.ofItems(ModItems.SUSPICIOUS_SUBSTANCE),
0.0F,
0.0F,
// Guidite is NOT dyeable, so we will pass false.
false);1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Создание предметов брони
Теперь, когда вы зарегистрировали материал, вы можете создать предметы брони в своем классе ModItems:
Очевидно, что комплект брони необязательно должен включать все типы предметов, вы можете иметь комплект, состоящий только из ботинок, штанов и т.д. — классический черепаший панцирь — хороший пример комплекта брони с отсутствующими слотами.
Долговечность
В отличие от ToolMaterial, ArmorMaterial не хранит никакой информации о прочности предметов. По этой причине прочность необходимо вручную добавлять в «Item.Settings» предметов брони при их регистрации.
Это достигается с помощью метода maxDamage в классе Item.Settings. Различные слоты брони имеют разную базовую прочность, которая обычно умножается на общий множитель материала брони, но можно использовать и жестко запрограммированные значения.
Для брони Guidite мы будем использовать общий множитель брони, хранящийся вместе с материалом брони:
java
public static final int GUIDITE_DURABILITY_MULTIPLIER = 15;1
Затем мы можем создать предметы брони, используя константу прочности:
java
public static final Item GUIDITE_HELMET = register(new ArmorItem(ModArmorMaterials.GUIDITE, ArmorItem.Type.HELMET, new Item.Settings().maxDamage(ArmorItem.Type.HELMET.getMaxDamage(ModArmorMaterials.GUIDITE_DURABILITY_MULTIPLIER))), "guidite_helmet");
public static final Item GUIDITE_CHESTPLATE = register(new ArmorItem(ModArmorMaterials.GUIDITE, ArmorItem.Type.CHESTPLATE, new Item.Settings().maxDamage(ArmorItem.Type.CHESTPLATE.getMaxDamage(ModArmorMaterials.GUIDITE_DURABILITY_MULTIPLIER))), "guidite_chestplate");
public static final Item GUIDITE_LEGGINGS = register(new ArmorItem(ModArmorMaterials.GUIDITE, ArmorItem.Type.LEGGINGS, new Item.Settings().maxDamage(ArmorItem.Type.LEGGINGS.getMaxDamage(ModArmorMaterials.GUIDITE_DURABILITY_MULTIPLIER))), "guidite_leggings");
public static final Item GUIDITE_BOOTS = register(new ArmorItem(ModArmorMaterials.GUIDITE, ArmorItem.Type.BOOTS, new Item.Settings().maxDamage(ArmorItem.Type.BOOTS.getMaxDamage(ModArmorMaterials.GUIDITE_DURABILITY_MULTIPLIER))), "guidite_boots");1
2
3
4
2
3
4
Вам также потребуется добавить предметы в группу предметов, если вы хотите, чтобы они были доступны из творческого инвентаря.
Как и для всех элементов, для них также следует создать ключи перевода.
Текстурирование и моделирование
Вам нужно будет создать два набора текстур:
- Текстуры и модели самих предметов.
- Фактическая текстура брони, которая видна, когда существо носит броню.
Текстуры и модели предметов
Эти текстуры ничем не отличаются от других предметов — вам необходимо создать текстуры и создать общую сгенерированную модель предмета, что было рассмотрено в руководстве Создание вашего первого предмета.
В качестве примера вы можете использовать следующие текстуры и модель JSON в качестве справочного материала.
INFO
Вам понадобятся файлы моделей JSON для всех предметов, а не только для шлема, принцип тот же, что и для других моделей предметов.
json
{
"parent": "item/generated",
"textures": {
"layer0": "example-mod:item/guidite_helmet"
}
}1
2
3
4
5
6
2
3
4
5
6
Как видите, в игре предметы брони должны иметь подходящие модели:

Текстуры и модели брони
Когда сущность носит вашу броню, в настоящее время отображается отсутствующая текстура:

Для текстуры брони есть два слоя, оба должны присутствовать.
Поскольку в нашем случае имя материала брони — guidite, то расположение текстур будет следующим:
assets/example-mod/textures/models/armor/guidite_layer_1.pngassets/example-mod/textures/models/armor/guidite_layer_2.png
Первый слой содержит текстуры для шлема и нагрудника, а второй слой содержит текстуры для штанов и ботинок.
При наличии этих текстур вы сможете увидеть свою броню на существах, которые ее носят:



