Už jsme si ukázali, jak přidat do hry item, dále si ukážeme, jak přidat blok. Později si pro blok vytvoříme i vlastní model a přidáme mu nějakou funkčnost.
Jako první si přidáme hlínu, která bude vyrobená z 9 hlíny. Takže to bude takový pevný blok hlíny.
Vytvoření projektu
Na stránkách fabricmc.net/develop/template si vytvoříme projekt s následujícím nastavením:
- Mod name
- Custom Block
- Package Name
com.example.block
- Minecraft Version
1.21
Zbytek necháme v základním nastavení a stáhneme si template. Ten po stažení extrahujeme a otevřeme soubor build.gradle. Počkáme, až se nám projekt nastaví a poté projekt zavřeme a znovu otevřeme, aby se dokončilo nastavení.
Přidání bloku
Stejně jako jsme měli u itemu třídu ModItems, kde jsme měly všechny itemy, tak i zde si vytvoříme třídu, kde budeme mít všechny bloky. Tuto třídu nazveme ModBlocks.
Vytvoření třídy
Třídu vytvoříme kliknutím pravým tlačítkem myši na složku a zvolíme New > Java Class

Stejně jako u itemu si i pro bloky vytvoříme metodu, která nám blok registruje a v tomto případě si přidáme i možnost, že nám k bloku přidá item. Ne všechny bloky totiž musí mít i item. Například bloky portálu nemají item a můžete je položit jen pomocí příkazu setblock.
Ve třídě ModBlocks si tedy vytvoříme metodu register, která bude vracet vytvořený blok (typ Block) a jako parametry budeme mít:
- blok, který chceme registrovat
Block block
- klíč (identifikátor), pod kterým chceme blok registrovat
RegistryKey<Block> blockKey
- zda chceme přidat i item nebo ne
boolean registerItem
public static Block register(Block block, RegistryKey<Block> blockKey, boolean registerItem)Registrace itemu k bloku
V metodě nejprve registrujeme item, pokud je hodnota registerItem rovna true.
if (registerItem)Dále si vytvoříme klíč, pod kterým chceme item registrovat a uložíme si jej do proměnné itemKey. Tento klíč vytvoříme pomocí metody RegistryKey.of a jako argumenty uvedeme typ klíče RegistryKeys.ITEM a dále identifikátor, pod kterým chceme item přidat. Tento identifikátor bude stejný jako u bloku a ten už máme v parametru blockKey - hodnotu získáme pomocí blockKey.getValue().
var itemKey = RegistryKey.of(RegistryKeys.ITEM, blockKey.getValue());Vytvoříme si item k bloku (typ BlockItem), který bude vycházet z přidávaného bloku (parametr block) a bude mít základní nastavení new Item.Settings().
BlockItem blockItem = new BlockItem(block, new Item.Settings());Na závěr item přidáme do registrů pomocí metody Registry.register. Jako argumenty uvedeme
- typ registru
Registries.ITEM
- klíč, pod kterým chceme item přidat
- proměnná
itemKey
- proměnná
- a samotný item, který chceme přidat
- proměnná
blockItem
- proměnná
Registry.register(Registries.ITEM, itemKey, blockItem);Celý kód s registrací itemu bude vypadat následovně
if (registerItem) {
var itemKey = RegistryKey.of(RegistryKeys.ITEM, blockKey.getValue());
BlockItem blockItem = new BlockItem(block, new Item.Settings());
Registry.register(Registries.ITEM, itemKey, blockItem);
}Registrace bloku
Blok registrujeme stejně jako item, jen zvolíme registr Registries.BLOCK. Tuto hodnotu vrátíme pomocí slova return.
return Registry.register(Registries.BLOCK, blockKey, block);Celá metoda pro registraci bloku (a itemu) bude vypadat následovně:
public static Block register(Block block, RegistryKey<Block> blockKey, boolean registerItem) {
if (registerItem) {
var itemKey = RegistryKey.of(RegistryKeys.ITEM, blockKey.getValue());
BlockItem blockItem = new BlockItem(block, new Item.Settings());
Registry.register(Registries.ITEM, itemKey, blockItem);
}
return Registry.register(Registries.BLOCK, blockKey, block);
}Metoda initialize
Dále potřebujeme přidat metodu, která zajistí, že se všechny bloky v této třídě vytvoří. V této metodě zatím nebude žádný kód a ani nebude vracet žádnou hodnotu.
public static void initialize() { }Vytvoření a nastavení bloku
Pro přidání bloku si nejprve musíme vytvořit klíč, pod kterým chceme blok registrovat.
Bude to proměnná, která nebude měnit svoji hodnotu public static final typu RegistryKey<Block> (klíč pro registraci bloku) s názvem CONDENSED_DIRT_KEY.
Klíč vytvoříme pomocí metody RegistryKey.of. Jako argumenty uvádíme
- typ klíče
RegistryKeys.BLOCK
- identifikátor, pod kterým chceme blok přidat
- identifikátor je hodnota
id-módu:název(např.minecraft:dirt) - metoda
Identifier.ofs argumenty id módu (to máme uložené vCustomBlock.MOD_ID) a samotný název blokucondensed_dirt
- identifikátor je hodnota
public static final RegistryKey<Block> CONDENSED_DIRT_KEY = RegistryKey.of(
RegistryKeys.BLOCK,
Identifier.of(CustomBlock.MOD_ID,"condensed_dirt")
);Nyní už máme vše potřebné pro registraci bloku, takže si jej můžeme vytvořit pomocí naší metody register a uložit si jej do proměnné public static final Block CONDENSED_DIRT. Jako argumenty metody uvedeme
- blok, který chceme registrovat
- vytvoříme pomocí
new Block - jako argument uvádíme nastavení, které získáme ze třídy
AbstractBlock- zatím nám stačí základní nastavení
AbstractBlock.Settings.create()
- zatím nám stačí základní nastavení
- vytvoříme pomocí
- klíč, pod kterým chceme blok registrovat
- proměnná
CONDENSED_DIRT_KEY
- proměnná
- informaci, zda chceme vytvořit i item nebo ne
- hodnota
true(ano) nebofalse(ne)
- hodnota
public static final Block CONDENSED_DIRT = register(
new Block(AbstractBlock.Settings.create()),
CONDENSED_DIRT_KEY,
true
);Tím máme veškeré věci na přidání bloku hotové, ale když hru spustíme, tak se blok ještě nepřidá. To si vyřešíme v následující lekci.
Celý kód třídy ModBlocks
public class ModBlocks {
public static final RegistryKey<Block> CONDENSED_DIRT_KEY = RegistryKey.of(
RegistryKeys.BLOCK,
Identifier.of(CustomBlock.MOD_ID,"condensed_dirt")
);
public static final Block CONDENSED_DIRT = register(
new Block(AbstractBlock.Settings.create()),
CONDENSED_DIRT_KEY,
true
);
public static void initialize() { }
public static Block register(Block block, RegistryKey<Block> blockKey, boolean registerItem) {
if (registerItem) {
var itemKey = RegistryKey.of(RegistryKeys.ITEM, blockKey.getValue());
BlockItem blockItem = new BlockItem(block, new Item.Settings());
Registry.register(Registries.ITEM, itemKey, blockItem);
}
return Registry.register(Registries.BLOCK, blockKey, block);
}
}