🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
Страница написана для версии игры:
1.21.4
Страница написана для версии игры:
1.21.4
На этой странице вы познакомитесь с некоторыми ключевыми концепциями, касающимися предметов, а также с тем, как их регистрировать, задавать текстуры, моделировать и давать названия.
Если вы не знали, то все в Майнкрафте хранится в реестрах, и предметы не стали исключением.
Для упрощения регистрации предмета вы можете создать метод, принимающий экземпляр предмета и строковый идентификатор.
Этот метод будет создавать предмет с данным идентификатором и регистрировать его с помощью реестра предметов игры.
Вы можете поместить этот метод в класс под именем ModItems
(или как вы его назовете).
Mojang уже сделали это со своими предметами! Загляните в класс Items
для вдохновения.
public class ModItems {
public static Item register(Item item, RegistryKey<Item> registryKey) {
// Register the item.
Item registeredItem = Registry.register(Registries.ITEM, registryKey.getValue(), 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 RegistryKey<Item> SUSPICIOUS_SUBSTANCE_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricDocsReference.MOD_ID, "suspicious_substance"));
public static final Item SUSPICIOUS_SUBSTANCE = register(
new Item(new Item.Settings().registryKey(SUSPICIOUS_SUBSTANCE_KEY)),
SUSPICIOUS_SUBSTANCE_KEY
);
Однако, если вы сейчас попытаетесь запустить измененный клиент, то увидите, что наш предмет еще не существует в игре! Это происходит потому, что вы не инициализировали класс статически.
Чтобы сделать это, вы можете добавить в свой класс общедоступный статический метод инициализации и вызвать его из вашего класса [инициализатор мода] (./getting-started/project-structure#entrypoints). В настоящее время этот метод не принимает никаких аргументов.
public static void initialize() {
}
public class FabricDocsReferenceItems implements ModInitializer {
@Override
public void onInitialize() {
ModItems.initialize();
}
}
Вызов метода класса статически инициализирует его, если он не был ранее загружен — это означает, что оцениваются все статические
поля. Вот для чего нужен этот фиктивный метод initialize
.
INFO
Если вы хотите добавить предмет в собственную "ItemGroup", ознакомьтесь со страницей Собственные группы предмета для получения дополнительной информации.
Для примера мы добавим этот элемент в ингредиенты 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": "minecraft:item/generated",
"textures": {
"layer0": "fabric-docs-reference:item/suspicious_substance"
}
}
parent
: Это родительская модель, от которой будет унаследована данная модель. В данном случае это модель item/generated
.textures
: Здесь вы определяете текстуры для модели. Ключ layer0
— это текстура, которую будет использовать модель.Большинство элементов будут использовать модель item/generated
в качестве родительской, поскольку это простая модель, которая просто отображает текстуру.
Существуют альтернативы, такие как item/handheld
, которые используются для предметов, которые "удерживаются" в руке игрока, таких как инструменты.
Minecraft автоматически не узнает, где можно найти файлы модели вашего предмета, вам нужно предоставить описание модели предмета.
Создайте JSON-файл описания предмета в assets/<mod id here>/items
с тем же именем файла, что и идентификатор предмета; suspicious_substance.json
.
{
"model": {
"type": "minecraft:model",
"model": "fabric-docs-reference:item/suspicious_substance"
}
}
model
: это свойство, содержащее ссылку на нашу модель. type
: это тип нашей модели. Для большинства предметов это должно быть minecraft:model
model
: это идентификатор модели. Он должен иметь следующую форму: <mod id here>:item/<item name here>
Теперь ваш предмет в игре должен выглядеть так:
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);
В качестве альтернативы, если вы хотите превратить свой предмет в топливо, вы можете использовать событие FuelRegistryEvents.BUILD
:
// 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.
FuelRegistryEvents.BUILD.register((builder, context) -> {
builder.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()
добавляет одну строку в подсказку.