🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
This page is written for version:
1.21
This page is written for version:
1.21
На этой странице вы познакомитесь с некоторыми ключевыми концепциями, касающимися предметов, а также с тем, как их регистрировать, задавать текстуры, моделировать и давать названия.
Если вы не знали, то все в Майнкрафте хранится в реестрах, и предметы не стали исключением.
Для упрощения регистрации предмета вы можете создать метод, принимающий экземпляр предмета и строковый идентификатор.
Этот метод будет создавать предмет с данным идентификатором и регистрировать его с помощью реестра предметов игры.
Вы можете поместить этот метод в класс под именем ModItems
(или как вы его назовете).
Mojang уже сделали это со своими предметами! Загляните в класс Items
для вдохновения.
public class ModItems {
public static Item register(Item item, String id) {
// Create the identifier for the item.
Identifier itemID = Identifier.of(FabricDocsReference.MOD_ID, id);
// Register the item.
Item registeredItem = Registry.register(Registries.ITEM, itemID, item);
// Return the registered item!
return registeredItem;
}
Теперь вы можете зарегистрировать предмет, используя метод.
Конструктор предмета принимает экземпляр класса Items.Settings
в качестве параметра. Этот класс позволяет вам настраивать параметры предмета через различные методы.
TIP
If you want to change your item's stack size, you can use the maxCount
method in the Items.Settings
/FabricItemSettings
class.
Это не сработает, если вы пометили предмет как повреждаемый, потому что размер для повреждаемых предметов всегда равен 1, для предотвращения эксплойтов дублирования.
public static final Item SUSPICIOUS_SUBSTANCE = register(
new Item(new Item.Settings()),
"suspicious_substance"
);
Однако, когда вы перейдете в игру, то увидите, что нашего предмета не существует! Это потому что вы инициализировали класс не статически.
Для этого вы можете добавить в свой класс публичный статический метод инициализации и вызывать его из класса ModInitializer
. В настоящее время этот метод не принимает никаких аргументов.
public static void initialize() {
}
public class FabricDocsReferenceItems implements ModInitializer {
@Override
public void onInitialize() {
ModItems.initialize();
}
}
Вызов метода класса статически инициализирует его, если он не был ранее загружен — это означает, что оцениваются все статические
поля. Вот для чего нужен этот фиктивный метод initialize
.
INFO
Если вы хотите добавить предмет в собственную категорию предметов, загляните в Пользовательские категории предметов для дополнительной информации.
Для примера мы добавим этот элемент в ингредиенты ItemGroup
, вам нужно будет использовать события группы элементов Fabric API, а именно ItemGroupEvents.modifyEntriesEvent
Это может быть сделано в методе initialize
вашего класса.
// Get the event for modifying entries in the ingredients group.
// And register an event handler that adds our suspicious item to the ingredients group.
ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS)
.register((itemGroup) -> itemGroup.add(ModItems.SUSPICIOUS_SUBSTANCE));
Запустив игру, вы можете увидеть, что наш предмет зарегистрирован и находится в категории предметов "ингредиенты":
Однако, не хватает следующего:
Сейчас у предмета нет перевода, поэтому вам необходимо его добавить. Ключ перевода уже предоставлен Minecraft: item.mod_id.suspicious_substance
.
Создайте новый файл JSON: src/main/resources/assets/<mod id here>/lang/en_us.json
и введите ключ перевода, а также его значение:
{
"item.mod_id.suspicious_substance": "Suspicious Substance"
}
Вы можете перезапустить игру либо скомпилировать ваш мод и нажать F3 + T для подтверждения изменений.
Чтобы задать вашему предмету текстуру и модель, просто создайте изображение текстуры 16x16 для вашего предмета и сохраните его по адресуassets/<mod id here>/textures/item
. Назовите файл текстуры, так же как предмет, но c расширением .png
.
В качестве примера вы можете использовать этот пример текстуры для suspicious_substance.png
При перезапуске/перезагрузке игры вы должны увидеть, что у предмета по-прежнему нет текстуры, это потому, что вам нужно будет добавить модель, использующую эту текстуру.
Вы собираетесь создать простую модель «item/generated», которая принимает на входе только текстуру и ничего больше.
Создайте модель JSON в папке assets/<mod id here>/models/item
с тем же именем, что и у элемента; suspicious_substance.json
{
"parent": "item/generated",
"textures": {
"layer0": "fabric-docs-reference:item/suspicious_substance"
}
}
parent
: Это родительская модель, от которой будет унаследована данная модель. В данном случае это модель item/generated
.textures
: Здесь вы определяете текстуры для модели. Ключ layer0
— это текстура, которую будет использовать модель.Большинство элементов будут использовать модель item/generated
в качестве родительской, поскольку это простая модель, которая просто отображает текстуру.
Существуют альтернативы, такие как item/handheld, который используется для предметов, удерживаемых в руке игрока, например, для инструментов.
Теперь ваш предмет в игре должен выглядеть так:
API Fabric предоставляет различные реестры, которые можно использовать для добавления дополнительных свойств к вашему элементу.
Например, если вы хотите сделать свой предмет компостируемым, то вы можете использовать CompostableItemRegistry
:
// Add the suspicious substance to the composting registry with a 30% chance of increasing the composter's level.
CompostingChanceRegistry.INSTANCE.add(ModItems.SUSPICIOUS_SUBSTANCE, 0.3f);
Также если вы хотите сделать ваш предмет топливом, вы можете использовать класс FuelRegistry
:
// Add the suspicious substance to the registry of fuels, with a burn time of 30 seconds.
// Remember, Minecraft deals with logical based-time using ticks.
// 20 ticks = 1 second.
FuelRegistry.INSTANCE.add(ModItems.SUSPICIOUS_SUBSTANCE, 30 * 20);
Если вы хотите добавить рецепт создания вашего предмета, вам необходимо поместить JSON-файл рецепта в папку data/<mod id here>/recipe
.
Для получения более подробной информации о формате рецепта ознакомьтесь со следующими ресурсами:
Если вы хотите, чтобы у вашего элемента была настраиваемая подсказка, вам нужно будет создать класс, расширяющий Item
, и переопределить метод appendTooltip
.
INFO
В этом примере используется класс LightningStick
, созданный на странице Взаимодействия пользовательских элементов.
@Override
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
tooltip.add(Text.translatable("itemTooltip.fabric-docs-reference.lightning_stick").formatted(Formatting.GOLD));
}
Каждый вызов add()
добавляет одну строку в подсказку.