V této kapitole si ukážeme, jak si přidat vlastní skupinu itemů (záložka v kreativním inventáři) a přidáme si crafting recept k hůlce, kterou jsme tvořili v předchozích hodinách.

Crafting recept k hůlce

Recept na vyrobení hůlky může vypadat například následovně:

Kopie souboru

Abychom nemuseli celý soubor s receptem psát od začátku, tak můžeme vzít recept na magic_dust, zkopírovat jej a poté jen změnit hodnoty, které chceme. To můžeme udělat tak, že na soubor s receptem magic_dust.json klikneme levým tlačítkem myši a použijeme zkratku Ctrl+C na zkopírování a ihned jej vložíme na stejné místo pomocí Ctrl+V. Zobrazí se nám okno, kde můžeme zkopírovaný soubor přejmenovat. Soubor pojmenujeme podle id naší hůlky, což je lightning_stick.json.

Umístění crafting receptů

Soubory s crafting recepty najdeme ve složce resources/data/custom-item/recipe

Aktuálně tedy soubor s receptem bude vypadat stejně jako pro item magic_dust.

Vzor si podle naší předlohy můžeme změnit následovně:

"pattern": [
 "OLO",
 "LML",
 "OLO"
],

Skupina itemů v crafting receptu

V crafting receptu můžeme kromě konkrétních itemů použít také skupiny itemů. Spoustu takových skupin ve hře již existuje a označují se podobně jako itemy jen jejich id začíná znakem # například skupina všech vln #minecraft:wool nebo skupina všech kmenů stromu #minecraft:logs. Tyto skupiny můžeme v crafting receptu použít tak, že u klíče použijeme vlastnost tag místo item.

Můžeme tedy nastavit, že v crafting receptu můžeme použít jakýkoliv druh dřeva.

  "key": {
    "O": {
      "item": "minecraft:obsidian"
    },
    "L": {
      "tag": "minecraft:logs"
    },
    "M": {
      "item": "custom-item:magic_dust"
    }
  },

Zbytek nastavíme na konkrétní itemy, tak jak jsme zvyklí.

Upozornění

Pokud chceme použít námi přidaný item, tak nesmíme zapomenout změnit id módu na custom-item.

Jako poslední změníme, co z crafting receptu dostaneme.

  "result": {
    "id": "custom-item:lightning_stick",
    "count": 1
  }

Upozornění

Výsledný počet itemů nesmí být větší, než maximální počet itemů v jednom stacku. Proto doporučuji zkontrolovat, jakou hodnotu máte nastavenou v souboru ModItems. Pokud nastavíte vyšší hodnotu, tak se vám hra nespustí.

Podrobnosti

Podrobnosti o vytváření crafting receptu najdete v kapitole 06 Crafting recept

Celý soubor s crafting receptem bude vypadat následovně:

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "OLO",
    "LML",
    "OLO"
  ],
  "key": {
    "O": {
      "item": "minecraft:obsidian"
    },
    "L": {
      "tag": "minecraft:logs"
    },
    "M": {
      "item": "custom-item:magic_dust"
    }
  },
  "result": {
    "id": "custom-item:lightning_stick",
    "count": 1
  }
}

Vlastní skupina itemů

Itemy, které si přidáme můžeme kromě existujících skupin dát také do vlastní skupiny, kde budou všechny itemy z našeho módu. Na to potřebujeme 2 věci - klíč, pod kterým skupinu registrujeme a poté samotnou skupinu, kde nastavíme, jak má záložka vypadat.

Poznámka

Následující kód budeme přidávat do třídy ModItems. Proměnné píšeme do těla třídy, takže stejně jako například naše vytvořené itemy.

Klíč skupiny

Nejprve si vytvoříme klíč, pod kterým skupinu později přidáme. Tento klíč funguje podobně jako například u itemů, boků atd. I tyto skupiny mají totiž vlastní id, pod kterými jej registrujeme. Klíč si zatím uložíme do proměnné CUSTOM_ITEM_GROUP_KEY, abychom jej později mohli využít.

Klíč vytváříme pomocí metody of ze třídy RegistryKey. Jako první argument uvádíme typ klíče - skupina itemů (RegistryKeys.ITEM_GROUP). Druhý argument je identifikátor, pod kterým chceme skupinu registrovat. Identifikátor má stejný tvar jako u itemů a bloků - id-módu:název-skupiny. Id módu máme uložené v naší hlavní třídě CustomItem.

Kód bude vypadat následovně:

public static final RegistryKey<ItemGroup> CUSTOM_ITEM_GROUP_KEY = RegistryKey.of(
	RegistryKeys.ITEM_GROUP,
	Identifier.of(CustomItem.MOD_ID, "item_group")
);

Vzhled skupiny

Dále si vytvoříme samotnou skupinu a nastavíme si, jak má skupina vypadat. Nastavíme si obrázek skupiny a její název. Tuto skupinu si uložíme do proměnné CUSTOM_ITEM_GROUP.

Skupinu vytváříme pomocí metody builder ze třídy FabricItemGroup. Dále si pomocí dalších metod nastavíme, jak má skupina vypadat.

Obrázek skupiny

Obrázek si nastavíme pomocí metody icon, kde jako argument uvádíme lambda funkci ve tvaru () -> hodnota. Jako hodnotu uvádíme stack itemu, který chceme nastavit jako ikonu. Pokud chceme použít náš item magic_dust, tak použijeme hodnotu new ItemStack(ModItems.MAGIC_DUST).

Název skupiny

Název skupiny nastavíme pomocí metody displayName. Pokud chceme, abychom mohli název skupiny přeložit, tak musíme jako hodnotu použít metodu translatable ze třídy Text s argumentem, který určuje, pod jakým klíčem se bude přeložený text nacházet. Klíč by měl být ve tvaru typ.název. Typ je například item, blok atd.

Na závěr použijeme metodu build a tím skupinu vytvoříme.

Kód bude vypadat následovně:

public static final ItemGroup CUSTOM_ITEM_GROUP = FabricItemGroup.builder()
	.icon(() -> new ItemStack(ModItems.MAGIC_DUST))
	.displayName(Text.translatable("itemGroup.custom-item"))
	.build();

Registrace skupiny

Dále musíme skupinu přidat do registrů hry. To uděláme v metodě initialize pomocí metody register ze třídy Registry. Jako argumenty uvádíme, do jakého registru chceme přidávat, klíč, pod kterým chceme přidávat a jako poslední uvádíme, co chceme přidat.

Kód tedy bude vypadat následovně:

Registry.register(Registries.ITEM_GROUP, CUSTOM_ITEM_GROUP_KEY, CUSTOM_ITEM_GROUP);

Přidání itemů do skupiny

Přidání itemů do skupiny pak funguje stejně jako u jakékoliv jiného předmětu pomocí metody modifyEntriesEvent ze třídy ItemGroupEvents. Jen tentokrát přidáváme do skupiny s klíčem, který máme uložený v proměnné CUSTOM_ITEM_GROUP_KEY.

Podrobnosti

Podrobnosti o přidání itemů do skupiny najdete v kapitole 04 Přidání itemu část 2 - Přidání itemu do kreativního inventáře

Kód pro přidání našich dvou itemů do nově vytvořené skupiny bude vypadat následovně:

ItemGroupEvents.modifyEntriesEvent(CUSTOM_ITEM_GROUP_KEY)
	 .register(itemGroup -> {
		  itemGroup.add(ModItems.MAGIC_DUST);
		  itemGroup.add(ModItems.LIGHTNING_STICK);
	 });

Pokud nyní hru spustíme, tak bychom měli vidět novou skupinu itemů, ve které budou naše dva itemy.

Skupina se nachází až na další stránce, které můžete přepínat pomocí šipek.

Naše skupina by měla vypadat následujícím způsobem:

Název skupiny

Název skupiny aktuálně odpovídá klíči, který jsme zvolili pro překlad. Samotný název si změníme v jedné z následujících lekcí.

Celý kód třídy ModItems bude vypadat následovně (pro přehlednost jsou předchozí části kódu vynechané a nahrazené //...) :

public class ModItems {
    //...
    public static final RegistryKey<ItemGroup> CUSTOM_ITEM_GROUP_KEY = RegistryKey.of(
            RegistryKeys.ITEM_GROUP,
            Identifier.of(CustomItem.MOD_ID, "item_group")
    );
 
    public static final ItemGroup CUSTOM_ITEM_GROUP = FabricItemGroup.builder()
            .icon(() -> new ItemStack(ModItems.MAGIC_DUST))
            .displayName(Text.translatable("itemGroup.custom-item"))
            .build();
 
    public static void initialize() {
        Registry.register(Registries.ITEM_GROUP, CUSTOM_ITEM_GROUP_KEY, CUSTOM_ITEM_GROUP);
 
        ItemGroupEvents.modifyEntriesEvent(CUSTOM_ITEM_GROUP_KEY)
                .register(itemGroup -> {
                    itemGroup.add(ModItems.MAGIC_DUST);
                    itemGroup.add(ModItems.LIGHTNING_STICK);
                });
        //...
    }
    //...
}