🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
Ця сторінка написана для версії:
1.21.4
Ця сторінка написана для версії:
1.21.4
Блоки є будівельними блоками Minecraft (без каламбуру) - як і все інше в Minecraft, вони зберігаються в реєстрах.
Якщо ви завершили сторінку Створення свого першого предмета, цей процес здасться вам дуже знайомим – вам потрібно буде створити метод, який реєструє ваш блок і його блок-предмет.
Якщо ви завершили сторінку Створення свого першого предмета, цей процес здасться вам дуже знайомим – вам потрібно буде створити метод, який реєструє ваш блок і його блок-предмет.
Вам слід помістити цей метод у клас під назвою ModBlocks
(або як ви хочете його назвати).
public class ModBlocks {
private static Block register(String name, Function<AbstractBlock.Settings, Block> blockFactory, AbstractBlock.Settings settings, boolean shouldRegisterItem) {
// Create a registry key for the block
RegistryKey<Block> blockKey = keyOfBlock(name);
// Create the block instance
Block block = blockFactory.apply(settings.registryKey(blockKey));
// Sometimes, you may not want to register an item for the block.
// Eg: if it's a technical block like `minecraft:moving_piston` or `minecraft:end_gateway`
if (shouldRegisterItem) {
// Items need to be registered with a different type of registry key, but the ID
// can be the same.
RegistryKey<Item> itemKey = keyOfItem(name);
BlockItem blockItem = new BlockItem(block, new Item.Settings().registryKey(itemKey));
Registry.register(Registries.ITEM, itemKey, blockItem);
}
return Registry.register(Registries.BLOCK, blockKey, block);
}
private static RegistryKey<Block> keyOfBlock(String name) {
return RegistryKey.of(RegistryKeys.BLOCK, Identifier.of(FabricDocsReference.MOD_ID, name));
}
private static RegistryKey<Item> keyOfItem(String name) {
return RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricDocsReference.MOD_ID, name));
}
}
Як і з предметами, вам потрібно переконатися, що клас завантажено, щоб усі статичні поля, що містять екземпляри вашого блоку, були ініціалізовані.
Ви можете зробити це, створивши фіктивний метод initialize
, який можна викликати в ініціалізаторі мода, щоб запустити статичну ініціалізацію.
INFO
Якщо ви не знаєте, що таке статична ініціалізація, то це процес ініціалізації статичних полів у класі. Це робиться, коли клас завантажується JVM, і робиться до створення будь-яких екземплярів класу.
public class ModBlocks {
// ...
public static void initialize() {}
}
public class FabricDocsReferenceBlocks implements ModInitializer {
@Override
public void onInitialize() {
ModBlocks.initialize();
}
}
Подібно до предметів, блоки приймають клас AbstractBlock.Settings
у своєму конструкторі, який визначає властивості блоку, такі як його звукові ефекти та рівень видобутку.
Ми не будемо розглядати всі варіанти тут — ви можете самостійно переглянути клас, щоб побачити різні варіанти, які мають бути зрозумілими.
Для прикладу ми створимо простий блок, який має властивості ґрунту, але є іншим матеріалом.
register
створити екземпляр Block
з налаштувань блоку, викликавши конструктор Block
.TIP
Ви також можете використовувати AbstractBlock.Settings.copy(AbstractBlock block)
, щоб скопіювати налаштування блоку що існує, у цьому випадку ми могли б використати Blocks.DIRT
, щоб скопіювати налаштування dirt, але для прикладу ми скористаємося конструктором.
public static final Block CONDENSED_DIRT = register(
"condensed_dirt",
Block::new,
AbstractBlock.Settings.create().sounds(BlockSoundGroup.GRASS),
true
);
Щоб автоматично створити блок-предмет ми можемо передати true
параметру shouldRegisterItem
методу register
, який ми створили на попередньому кроці.
Щоб автоматично створити блок-предмет ми можемо передати true
параметру shouldRegisterItem
методу register
, який ми створили на попередньому кроці.
У цьому прикладі ми використаємо спеціальну групу предметів, створену на сторінці Групи власних предметів.
ItemGroupEvents.modifyEntriesEvent(ModItems.CUSTOM_ITEM_GROUP_KEY).register((itemGroup) -> {
itemGroup.add(ModBlocks.CONDENSED_DIRT.asItem());
});
У цьому прикладі ми використаємо спеціальну групу предметів, створену на сторінці Групи власних предметів.
Тепер ви повинні помітити, що ваш блок знаходиться у творчому інвентарі, і його можна розмістити у світі!
Ви повинні розмістити це у функції initialize()
вашого класу.
Однак є кілька проблем: блок-предмет не має назви, і блок не має текстури, моделі блоку чи моделі предмета.
Однак є кілька проблем: блок-предмет не має назви, і блок не має текстури, моделі блоку чи моделі предмета.
{
"block.mod_id.condensed_dirt": "Condensed Dirt"
}
Щоб додати переклад, ви повинні створити ключ перекладу у своєму файлі перекладу - assets/mod-id/lang/en_us.json
, це англійська, для української створіть uk_ua.json
.
Усі текстури блоків можна знайти в теці assets/mod-id/textures/block
- приклад текстури для блоку «Condensed Dirt» можна використовувати безплатно.
Ви можете перезапустити гру або створити свій мод і натиснути F3+T, щоб застосувати зміни, і ви побачите, що блок має назву у творчому інвентарі та інших місцях наприклад екран статистики.
Щоб текстура промальовувалася в грі, ви повинні створити модель блоку, яку можна знайти у файлі assets/mod-id/models/block/condensed_dirt.json
для блоку «Condensed Dirt». Для цього блоку ми будемо використовувати тип моделі block/cube_all
.
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "fabric-docs-reference:block/condensed_dirt"
}
}
Щоб блок позувався у вашому інвентарі, вам потрібно буде створити опис моделі предмета](../items/first-item#creating-the-item-model-description), який вказує на вашу модель блоку. Для цього прикладу опис моделі предмета для блоку «Condensed Dirt» можна знайти у assets/mod-id/items/condensed_dirt.json
.
{
"model": {
"type": "minecraft:model",
"model": "fabric-docs-reference:block/condensed_dirt"
}
}
TIP
Вам потрібно лише створити опис моделі предмета, якщо ви зареєстрували BlockItem
разом зі своїм блоком!
Коли ви завантажуєте гру, ви можете помітити, що текстури все ще немає. Це тому, що вам потрібно додати визначення стану блоку.
Визначення стану блоку використовується для вказівки грі, яку модель промальовувати на основі поточного стану блоку.
Для прикладу блоку, який не має складного стану блока, у визначенні потрібен лише один запис.
Цей файл має міститися в папці assets/mod-id/blockstates
, а його назва має збігатися з ідентифікатором блоку, який використовується під час реєстрації вашого блоку в класі ModBlocks
. Наприклад, якщо ID блоку condensed_dirt
, файл повинен мати назву condensed_dirt.json
.
{
"variants": {
"": {
"model": "fabric-docs-reference:block/condensed_dirt"
}
}
}
TIP
Стани блоків неймовірно складні, тому вони будуть розглянуті далі на їхній окремій сторінці.
Перезапустіть гру або перезавантажте за допомогою F3+T, щоб застосувати зміни – ви зможете побачити блокову текстуру в інвентарі та фізично у світі:
Перезапустіть гру або перезавантажте за допомогою F3+T, щоб застосувати зміни – ви зможете побачити блокову текстуру в інвентарі та фізично у світі:
INFO
Щоб краще зрозуміти таблиці здобичі, ви можете звернутися до сторінки Minecraft Wiki - Таблиці здобичі.
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "fabric-docs-reference:condensed_dirt"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}
Під час розбивання блоку під час виживання ви можете побачити, що блок не падає — можливо, вам потрібна ця функція, однак, щоб ваш блок випадав як предмет під час ламання, ви повинні застосувати його таблицю здобичі — файл таблиці здобичі слід розмістити в теку data/mod-id/loot_table/blocks/
.
Ви також можете захотіти, щоб ваш блок можна було збирати лише певним інструментом - наприклад, ви можете зробити свій блок, що ламається швидше за допомогою лопати.
Ця таблиця здобичі забезпечує випадіння одного предмета з блоку, коли блок ламаний або підірваний вибухом.
hoe.json
axe.json
pickaxe.json
shovel.json
Ви також можете захотіти, щоб ваш блок можна було збирати лише певним інструментом - наприклад, ви можете зробити свій блок, що ламається швидше за допомогою лопати.
Усі теґи інструментів слід розміщувати в теці data/minecraft/tags/block/mineable/
, де назва файлу залежить від типу використовуваного інструменту, одного з наступного:
{
"replace": false,
"values": ["fabric-docs-reference:condensed_dirt"]
}
Вміст файлу досить простий - це список предметів, які потрібно додати в теґ.
Подібним чином теґ рівня майнінгу можна знайти в теці data/minecraft/tags/block/
й відповідає такому формату:
needs_stone_tool.json
- потребує як мінімум кам'яні інструментиneeds_iron_tool.json
- потребує як мінімум залізні інструментиneeds_diamond_tool.json
- потребує як мінімум діамантові інструменти.Файл має той самий формат, що й файл інструменту збору врожаю – список предметів, які потрібно додати до теґу.
Якщо ви додаєте кілька блоків до свого моду, ви можете розглянути можливість використання генерації даних для автоматизації процесу створення моделей блоків і предметів, визначень стану блоків і таблиць здобичі.