🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
This page is written for:
1.21
This page is written for:
1.21
Броня дает игроку повышенную защиту от атак мобов и других игроков.
Материалы брони, как и предметы и блоки, необходимо регистрировать. Создадим класс ModArmorMaterials
для организации хранения наших материалов для брони.
Вам нужно будет добавить статический метод initialize()
к этому классу и вызвать его из точки входа вашего мода, чтобы зарегистрировать материалы.
// Within the ModArmorMaterials class
public static void initialize() {};
WARNING
Убедитесь, что вызываете этот метод до регистрации предметов, так как материалы должны регистрироваться до создания предметов.
@Override
public void onInitialize() {
ModArmorMaterials.initialize();
}
Внутри класса ModArmorMaterials
необходимо создать статический метод для регистрации материалов брони. Этот метод должен возвращать запись материала в реестре, которая в дальнейшем будет использована в конструкторе ArmorItem
для создания предмета брони.
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(FabricDocsReference.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(FabricDocsReference.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);
}
TIP
Если вам сложно оценить значение любого из этих свойств, рассмотрите возможность изучения стандартных материалов брони в классе ArmorMaterials
.
При создании материала брони вам необходимо определить следующие свойства:
WARNING
Обязательно укажите стоимость каждого типа доспехов, которые вы планируете создать, и зарегистрируйте их как предмет. Если вы создадите предмет для брони без установленного значения очков защиты, игра сломается, а в следствии вылетит.
Карта defensePoints
используется для определения количества очков защиты, которые будет обеспечивать каждая часть брони. Чем выше число, тем большую защиту обеспечит элемент брони. Карта должна содержать запись для каждого типа доспехов.
Свойство «зачаровываемость» определяет, насколько легко можно зачаровать доспехи. Чем выше число, тем больше чар может получить броня.
Свойство equipSound
— это звук, который будет воспроизводиться при надевании доспехов. Этот звук должен быть записью реестра SoundEvent
. Если вы планируете создавать собственные звуки, а не полагаться на стандартные звуки в классе SoundEvents
, рассмотрите возможность заглянуть на страницу Пользовательские звуковые события.
Свойство repairIngredientSupplier
является поставщиком Ингредиента
, который используется для ремонта брони. Этот ингредиент может быть практически любым, рекомендуется установить его таким же, как ингредиент материала, который использовался для изготовления самих предметов брони.
Свойство «прочность» определяет, какой урон может поглотить броня. Чем выше число, тем больше урона поглотит броня.
Свойство «Сопротивление отбрасыванию» определяет, насколько сильно отбрасывает игрока при ударе. Чем выше число, тем меньше отбрасывание получит игрок.
Свойство dyeable
— это логическое значение, определяющее, можно ли красить броню. Если установлено значение true
, броню можно красить с помощью красителей на верстаке.
Если вы решили сделать свою броню окрашиваемой, то слои брони и текстуры предметов должны быть предназначены для окрашивания, поскольку краска будет накладываться на текстуру, а не заменять ее. Взгляните, например, на классическую кожаную броню из Minecraft: текстуры выполнены в оттенках серого, а краска нанесена поверх нее, из-за чего броня меняет цвет.
Теперь, когда вы создали вспомогательный метод, который можно использовать для регистрации материалов брони, вы можете зарегистрировать свои собственные материалы брони как статическое поле в классе ModArmorMaterials
.
Для этого примера мы создадим броню Guidite со следующими свойствами:
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);
Теперь, когда вы зарегистрировали материал, вы можете создать предметы брони в своем классе ModItems
:
Очевидно, что комплект брони необязательно должен включать все типы предметов, вы можете иметь комплект, состоящий только из ботинок, штанов и т.д. — классический черепаший панцирь — хороший пример комплекта брони с отсутствующими слотами.
В отличие от ToolMaterial
, ArmorMaterial
не хранит никакой информации о прочности предметов. По этой причине прочность необходимо вручную добавлять в «Item.Settings» предметов брони при их регистрации.
Это достигается с помощью метода maxDamage
в классе Item.Settings
. Различные слоты брони имеют разную базовую прочность, которая обычно умножается на общий множитель материала брони, но можно использовать и жестко запрограммированные значения.
Для брони Guidite мы будем использовать общий множитель брони, хранящийся вместе с материалом брони:
public static final int GUIDITE_DURABILITY_MULTIPLIER = 15;
Затем мы можем создать предметы брони, используя константу прочности:
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");
Вам также потребуется добавить предметы в группу предметов, если вы хотите, чтобы они были доступны из творческого инвентаря.
Как и для всех элементов, для них также следует создать ключи перевода.
Вам нужно будет создать два набора текстур:
Эти текстуры ничем не отличаются от других предметов — вам необходимо создать текстуры и создать общую сгенерированную модель предмета, что было рассмотрено в руководстве Создание вашего первого предмета.
В качестве примера вы можете использовать следующие текстуры и модель JSON в качестве справочного материала.
INFO
Вам понадобятся файлы моделей JSON для всех предметов, а не только для шлема, принцип тот же, что и для других моделей предметов.
{
"parent": "item/generated",
"textures": {
"layer0": "fabric-docs-reference:item/guidite_helmet"
}
}
Как видите, в игре предметы брони должны иметь подходящие модели:
Когда сущность носит вашу броню, в настоящее время отображается отсутствующая текстура:
.
Для текстуры брони есть два слоя, оба должны присутствовать.
Поскольку в нашем случае имя материала брони — guidite
, то расположение текстур будет следующим:
assets/<mod-id>/textures/models/armor/guidite_layer_1.png
assets/<mod-id>/textures/models/armor/guidite_layer_2.png
Первый слой содержит текстуры для шлема и нагрудника, а второй слой содержит текстуры для штанов и ботинок.
При наличии этих текстур вы сможете увидеть свою броню на существах, которые ее носят:
.