🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
Ця сторінка написана для версії:
1.21.4
Ця сторінка познайомить вас з деякими ключовими поняттями, пов’язаними з предметами, а також з тим, як їх можна реєструвати, текстурувати, моделювати та називати.
Ця сторінка познайомить вас з деякими ключовими поняттями, пов’язаними з предметами, а також з тим, як їх можна реєструвати, текстурувати, моделювати та називати.
Щоб спростити реєстрацію предметів, ви можете створити метод, який приймає ідентифікатор рядка, деякі параметри предмета та фабрику для створення екземпляра Item
.
Щоб спростити реєстрацію предметів, ви можете створити метод, який приймає екземпляр предмета та ідентифікатор рядка.
Цей метод створить предмет із наданим ідентифікатором і зареєструє його в реєстрі предметів гри.
Mojang також робить це зі своїми предметами! Щоб отримати натхнення, перегляньте клас Items
.
public class ModItems {
public static Item register(String name, Function<Item.Settings, Item> itemFactory, Item.Settings settings) {
// Create the item key.
RegistryKey<Item> itemKey = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricDocsReference.MOD_ID, name));
// Create the item instance.
Item item = itemFactory.apply(settings.registryKey(itemKey));
// Register the item.
Registry.register(Registries.ITEM, itemKey, item);
return item;
}
}
Зверніть увагу на використання інтерфейсу функції
для фабрики, який згодом дозволить нам указати, як ми хочемо створити наш елемент із налаштувань елемента за допомогою Item::new
.
Тепер ви можете зареєструвати товар за допомогою методу зараз.
Метод реєстратору приймає екземпляр класу Item.Settings
як параметр. Цей клас дозволяє вам налаштовувати властивості предмета за допомогою різних методів конструктора.
TIP
If you want to change your item's stack size, you can use the maxCount
method in the Item.Settings
class.
Це не спрацює, якщо ви позначили предмет як такий, що може бути пошкоджений, оскільки розмір стосу завжди дорівнює 1 для предметів, які можна пошкодити, щоб запобігти повторюваним експлойтам.
public static final Item SUSPICIOUS_SUBSTANCE = register("suspicious_substance", Item::new, new Item.Settings());
Item::new
повідомляє функції реєстратору створити екземпляр Item
з Item.Settings
шляхом виклику конструктора Item
(new Item(...)
), який приймає Item.Settings
як параметр.
Однак, якщо ви зараз спробуєте запустити модифікований клієнт, ви побачите, що наш предмет ще не існує в грі! Це тому, що ви не ініціалізували клас статично.
Для цього ви можете додати загальнодоступний статичний метод ініціалізації до свого класу та викликати його з класу ініціалізатора мода. Наразі цей метод не потребує нічого всередині.
public static void initialize() {
}
public class FabricDocsReferenceItems implements ModInitializer {
@Override
public void onInitialize() {
ModItems.initialize();
}
}
Виклик методу в класі статично ініціалізує його, якщо він не був попередньо завантажений - це означає, що всі статичні
поля оцінюються. Ось для чого цей фіктивний метод ініціалізації
.
INFO
Якщо ви хочете додати предмет до спеціальної ItemGroup
, перегляньте сторінку власні групи предметів для отримання додаткової інформації.
Для прикладу ми додамо цей предмет до інгредієнтів ItemGroup
, вам потрібно буде використовувати події групи предметів Fabric API, зокрема ItemGroupEvents.modifyEntriesEvent
Для прикладу ми додамо цей предмет до інгредієнтів ItemGroup
, вам потрібно буде використовувати події групи предметів Fabric API, зокрема ItemGroupEvents.modifyEntriesEvent
// 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/lang/en_us.json
і введіть ключ перекладу та його значення:
{
"item.mod_id.suspicious_substance": "Suspicious Substance"
}
Ви можете перезапустити гру або створити свій мод і натиснути F3+T, щоб застосувати зміни.
Щоб надати вашому предмету текстуру та модель, просто створіть зображення текстури 16x16 для свого предмета та збережіть його в теці assets/mod-id/textures/item
. Назвіть файл текстури так само, як ідентифікатор предмета, але з розширенням .png
.
Для прикладу ви можете використовувати цей приклад текстури для suspicious_substance.png
Для прикладу ви можете використовувати цей приклад текстури для suspicious_substance.png
Під час перезавантаження/перезавантаження гри ви повинні побачити, що предмет все ще не має текстури, тому що вам потрібно буде додати модель, яка використовує цю текстуру.
Ви збираєтеся створити просту модель item/generated
, яка приймає вхідну текстуру і нічого більше.
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "fabric-docs-reference:item/suspicious_substance"
}
}
parent
: це батьківська модель, яку ця модель успадкує. У цьому випадку це модель item/generated
.textures
: тут ви визначаєте текстури для моделі. Ключ layer0
— це текстура, яку використовуватиме модель.Більшість предметів використовуватимуть модель item/generated
як батьківську, оскільки це проста модель, яка лише показує текстуру.
Більшість предметів використовуватимуть модель item/generated
як батьківську, оскільки це проста модель, яка лише показує текстуру.
Minecraft не визначає автоматично, де можна знайти файли моделей ваших предметів, нам потрібно надати опис моделі предмета.
Minecraft не визначає автоматично, де можна знайти файли моделей ваших предметів, нам потрібно надати опис моделі предмета.
{
"model": {
"type": "minecraft:model",
"model": "fabric-docs-reference:item/suspicious_substance"
}
}
model
: це властивість, яка містить посилання на нашу модель. type
: це тип нашої моделі. Для більшості предметів це має бути minecraft:модель
model
: це ідентифікатор моделі. Він повинен мати таку форму: mod-id:item/item_name
Тепер ваш предмет у грі має виглядати так:
Тепер ваш предмет у грі має виглядати так:
API Fabric надає різні реєстри, які можна використовувати для додавання додаткових властивостей до вашого предмета.
API Fabric надає різні реєстри, які можна використовувати для додавання додаткових властивостей до вашого предмета.
// 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/recipe
.
Якщо ви хочете додати рецепт виготовлення для свого предмета, вам потрібно буде розмістити JSON-файл рецепту в теці data/mod-id/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()
додаватиме один рядок до підказки.
Кожен виклик add()
додаватиме один рядок до підказки.