Блоки є будівельними блоками Minecraft (без каламбуру) — як і все інше в Minecraft, вони зберігаються в реєстрах.
Підготовка вашого класу блоків
Якщо ви завершили сторінку створення свого першого предмета, цей процес здасться вам дуже знайомим — вам потрібно буде створити метод, який реєструє ваш блок і його блок-предмет.
Вам слід помістити цей метод у клас під назвою ModBlocks (або як ви хочете його назвати).
Mojang робить щось надзвичайно подібне з усталеними блоками; ви можете звернутися до класу Blocks, щоб побачити, як вони це роблять.
java
public class ModBlocks {
private static Block register(String name, Function<BlockBehaviour.Properties, Block> blockFactory, BlockBehaviour.Properties settings, boolean shouldRegisterItem) {
// Create a registry key for the block
ResourceKey<Block> blockKey = keyOfBlock(name);
// Create the block instance
Block block = blockFactory.apply(settings.setId(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.
ResourceKey<Item> itemKey = keyOfItem(name);
BlockItem blockItem = new BlockItem(block, new Item.Properties().setId(itemKey).useBlockDescriptionPrefix());
Registry.register(BuiltInRegistries.ITEM, itemKey, blockItem);
}
return Registry.register(BuiltInRegistries.BLOCK, blockKey, block);
}
private static ResourceKey<Block> keyOfBlock(String name) {
return ResourceKey.create(Registries.BLOCK, Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, name));
}
private static ResourceKey<Item> keyOfItem(String name) {
return ResourceKey.create(Registries.ITEM, Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, name));
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Як і з предметами, вам потрібно переконатися, що клас завантажено, щоб усі статичні поля, що містять екземпляри вашого блока, були ініціалізовані.
Ви можете зробити це, створивши фіктивний метод ініціалізації, який можна викликати в ініціалізаторі мода, щоб запустити статичну ініціалізацію.
INFO
Якщо ви не знаєте, що таке статична ініціалізація, то це процес ініціалізації статичних полів у класі. Це робиться, коли клас завантажується JVM, і робиться до створення будь-яких екземплярів класу.
java
public class ModBlocks {
// ...
public static void initialize() {}
}1
2
3
4
5
2
3
4
5
java
public class ExampleModBlocks implements ModInitializer {
@Override
public void onInitialize() {
ModBlocks.initialize();
}
}1
2
3
4
5
6
2
3
4
5
6
Створення та реєстрація вашого блока
Подібно до предметів, блоки приймають у своєму конструкторі клас BlockBehavior.Properties, який визначає властивості блока, такі як його звукові ефекти та рівень добування.
Ми не будемо розглядати всі варіанти тут — ви можете самостійно переглянути клас, щоб побачити різні варіанти, які мають бути зрозумілими.
Для прикладу ми створимо простий блок, який має властивості ґрунту, але є іншим матеріалом.
- Ми створюємо параметри наших блоків подібно до того, як ми створювали параметри предметів у посібнику щодо предметів.
- Ми кажемо методу
registerстворити екземплярBlockз налаштувань блока, викликавши конструкторBlock.
TIP
Ви також можете використовувати BlockBehavior.Properties.ofFullCopy(BlockBehavior block), щоб скопіювати налаштування блока що існує, у цьому випадку ми могли б використати Blocks.DIRT, щоб скопіювати налаштування ґрунту, але для прикладу ми скористаємося конструктором.
java
public static final Block CONDENSED_DIRT = register(
"condensed_dirt",
Block::new,
BlockBehaviour.Properties.of().sound(SoundType.GRASS),
true
);1
2
3
4
5
6
7
2
3
4
5
6
7
Щоб автоматично створити блок-предмет ми можемо передати true параметру shouldRegisterItem методу register, який ми створили на попередньому кроці.
Додавання предмета блока до вкладки творчості
Оскільки BlockItem створюється та реєструється автоматично, щоб додати його до вкладки творчості, ви повинні використати метод Block.asItem(), щоб отримати екземпляр BlockItem.
Для цього прикладу ми додамо блок на вкладку BUILDING_BLOCKS. Щоб замість цього додати блок на вкладку спеціального оголошення, перегляньте власні вкладки творчості.
java
ItemGroupEvents.modifyEntriesEvent(CreativeModeTabs.BUILDING_BLOCKS).register((itemGroup) -> {
itemGroup.accept(ModBlocks.CONDENSED_DIRT.asItem());
});1
2
3
2
3
Ви повинні розмістити це у функції initialize() вашого класу.
Тепер ви повинні помітити, що ваш блок знаходиться в інвентарі творчості, і його можна розмістити у світі!

Однак є кілька проблем: блок-предмет не має назви, і блок не має текстури, моделі блока чи моделі предмета.
Додання перекладу для блока
Щоб додати переклад, ви повинні створити ключ перекладу у своєму файлі перекладу — assets/example-mod/lang/en_us.json, це англійська, для української створіть uk_ua.json.
Minecraft використовуватиме цей переклад в інвентарі творчості та інших місцях, де показано його назву, наприклад у повідомленнях команд.
json
{
"block.example-mod.condensed_dirt": "Condensed Dirt"
}1
2
3
2
3
Ви можете перезапустити гру або створити свій мод і натиснути F3+T, щоб застосувати зміни, і ви побачите, що блок має назву в інвентарі творчості та інших місцях наприклад екран статистики.
Моделі й текстури
Усі текстури блоків можна знайти в теці assets/example-mod/textures/block — приклад текстури для блока «Condensed Dirt» можна використовувати безплатно.
Щоб текстура промальовувалася в грі, ви повинні створити модель блока, яку можна знайти у файлі assets/example-mod/models/block/condensed_dirt.json для блока «Condensed Dirt». Для цього блока ми будемо використовувати тип моделі block/cube_all.
json
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "example-mod:block/condensed_dirt"
}
}1
2
3
4
5
6
2
3
4
5
6
Щоб блок позувався у вашому інвентарі, вам потрібно буде створити клієнтський предмет, який вказує на вашу модель блока. Для цього прикладу клієнтського предмета для блока «Condensed Dirt» можна знайти за адресою assets/example-mod/items/condensed_dirt.json.
json
{
"model": {
"type": "minecraft:model",
"model": "example-mod:block/condensed_dirt"
}
}1
2
3
4
5
6
2
3
4
5
6
TIP
Вам потрібно лише створити клієнтський предмет, якщо ви зареєстрували BlockItem разом зі своїм блоком!
Коли ви завантажуєте гру, ви можете помітити, що текстури все ще немає. Це тому, що вам потрібно додати визначення стану блока.
Створення визначення стану блока
Визначення стану блока використовується для вказівки грі, яку модель рендерити на основі поточного стану блока.
Для прикладу блока, який не має складного стану блока, у визначенні потрібен лише один запис.
Цей файл має міститися в папці assets/example-mod/blockstates, а його ім’я має збігатися з ID блока, використаним під час реєстрації вашого блока в класі ModBlocks. Наприклад, якщо ID блока condensed_dirt, файл повинен мати назву condensed_dirt.json.
json
{
"variants": {
"": {
"model": "example-mod:block/condensed_dirt"
}
}
}1
2
3
4
5
6
7
2
3
4
5
6
7
TIP
Стани блоків неймовірно складні, тому вони будуть розглянуті далі на їхній окремій сторінці.
Перезапустіть гру або перезавантажте за допомогою F3+T, щоб застосувати зміни — ви зможете побачити текстуру блока в інвентарі та фізично у світі:

Додання здобичі для блока
Під час ламання блока в режимі виживання ви можете побачити, що блок не падає — можливо, вам потрібна ця функція, однак, щоб ваш блок випав як предмет під час ламання, ви повинні запровадити його таблицю здобичі — файл таблиці здобичі слід розмістити в теці data/example-mod/loot_table/blocks/.
INFO
Щоб краще зрозуміти таблиці здобичі, ви можете звернутися до сторінки Вікі Minecraft— Таблиці здобичі.
json
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "example-mod:condensed_dirt"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Ця таблиця здобичі забезпечує випадіння одного предмета з блока, коли блок ламаний або підірваний вибухом.
Рекомендація інструмента для збирання
Ви також можете захотіти, щоб ваш блок можна було збирати лише певним інструментом — наприклад, ви можете зробити свій блок, що ламається швидше за допомогою лопати.
Усі теґи інструментів слід розміщувати в теці data/minecraft/tags/block/mineable/, де назва файлу залежить від типу використовуваного інструмента, одного з наступного:
hoe.jsonaxe.jsonpickaxe.jsonshovel.json
Вміст файлу досить простий — це список предметів, які потрібно додати в теґ.
Цей приклад додає блок «Condensed Dirt» до теґу shovel.
json
{
"replace": false,
"values": ["example-mod:condensed_dirt"]
}1
2
3
4
2
3
4
Якщо ви бажаєте, щоб для добування блока був потрібний інструмент, додайте .requiresCorrectToolForDrops() до налаштувань блока, а також додайте відповідний теґ рівня добування.
Рівні добування
Подібним чином теґ рівня добування можна знайти в теці data/minecraft/tags/block/ й відповідає такому формату:
needs_stone_tool.json— потребує як мінімум кам'яні інструментиneeds_iron_tool.json— потребує як мінімум залізні інструментиneeds_diamond_tool.json— потребує як мінімум діамантові інструменти.
Файл має той самий формат, що й файл інструмента збирання — список предметів, які потрібно додати до теґу.
Додаткові уточнення
Якщо ви додаєте кілька блоків до свого мода, ви можете розглянути можливість використання генерації даних для автоматизації процесу створення моделей блоків і предметів, визначень стану блоків і таблиць здобичі.






