Іноді вам може знадобитися, щоб зовнішній вигляд блоків оброблявся спеціально в грі. Наприклад, деякі блоки можуть виглядати прозорими, а інші можуть мати відтінок.
Розгляньмо, як ми можемо маніпулювати зовнішнім виглядом блока.
Для цього прикладу зареєструймо блок. Якщо ви не знайомі з цим процесом, спершу прочитайте про реєстрацію блока.
java
public static final Block WAXCAP_BLOCK = Registry.register(
BuiltInRegistries.BLOCK,
Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "waxcap"),
new Block(BlockBehaviour.Properties.of()
.noCollision()
.instabreak()
.offsetType(BlockBehaviour.OffsetType.XYZ)
.setId(WAXCAP_BLOCK_KEY)
));1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Обов’язково додайте:
- Стан блока у
/blockstates/waxcap.json - Модель блока у
/models/block/waxcap.json - Текстура у
/textures/block/waxcap.png
Якщо все правильно, ви зможете побачити блок у грі. Однак ви помітите, що в розміщеному блоку виглядає неправильно.

Це пояснюється тим, що текстура з прозорістю вимагатиме трохи додаткових налаштувань.
Маніпулювання зовнішнім виглядом блока
Навіть якщо текстура вашого блока прозора або напівпрозора, вона все одно виглядатиме непрозорою. Щоб виправити це, вам потрібно встановити _шар розділу чанку.
Шари розділів чанків — це категорії, які використовуються для групування різних типів поверхонь блоків для рендеру. Це дозволяє грі використовувати правильні візуальні ефекти та оптимізацію для кожного типу.
Нам потрібно зареєструвати наш блок у правильному шарі розділу чанку. Стандартна гра пропонує наступні варіанти.
SOLID: усталене, суцільний блок без жодної прозорості.CUTOUTіCUTOUT_MIPPED: блок, який використовує прозорість, наприклад скло або квіти.CUTOUT_MIPPEDмати кращий вигляд на відстані.TRANSLUCENT: блок, який використовує напівпрозорі (частково прозорі) пікселі, наприклад кольорове скло або воду.
У нашому прикладі є прозорість, тому він використовуватиме CUTOUT.
У своєму ініціалізаторі клієнта зареєструйте свій блок у правильному ChunkSectionLayer за допомогою BlockRenderLayerMap Fabric API.
java
BlockRenderLayerMap.putBlock(ExampleModAppearance.WAXCAP_BLOCK, ChunkSectionLayer.CUTOUT);1
Тепер ваш блок повинен мати належну прозорість.

Постачальники кольору блока
Попри те, що наш блок має кращий виглядає в грі, його текстура має відтінки сірого. Ми могли б динамічно застосовувати колірний відтінок, наприклад, як стандартне листя змінює колір залежно від біомів.
API Fabric надає ColorProviderRegistry для реєстрації постачальника кольору відтінку, який ми будемо використовувати для динамічного кольору блока.
Скористаймося цим API, щоб зареєструвати відтінок таким чином, що коли наш блок Waxcap розміщено на траві, він виглядатиме зеленим, інакше буде коричневим.
У вашому ініціалізаторі клієнта зареєструйте свій блок у ColorProviderRegistry разом із відповідною логікою.
java
ColorProviderRegistry.BLOCK.register((blockState, blockAndTintGetter, blockPos, i) -> {
if (blockAndTintGetter != null && blockPos != null) {
BlockState stateBelow = blockAndTintGetter.getBlockState(blockPos.below());
if (stateBelow.is(Blocks.GRASS_BLOCK)) {
return 0x98FB98; // Color code in hex format
}
}
return 0xFFDAB9; // Color code in hex format
}, ExampleModAppearance.WAXCAP_BLOCK);1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Тепер блок буде тонований залежно від місця його розміщення.


