V této lekci si ukážeme, jak do hry přidat vlastní item.
Abychom si usnadnili práci při přidávání itemů, tak si vytvoříme novou třídu ModItems, která bude obsahovat všechny itemy, které náš mód přidává.
Umístění třídy
Nové třídy budeme umisťovat do stejné složky, kde je naše hlavní třída
CustomItem. Složka by se měla jmenovat podle názvu balíčku, který jste si zvolili při vytváření módu - v mém případě tedycom.example.item.
Třídu přidáme tak, že klikneme pravým tlačítkem myši na složku a zvolíme New > Java Class. Zobrazí se nám okno, kam zadáme název třídy - v našem případě tedy ModItems. Vytvoření třídy potvrdíme klávesou Enter.
Aktuálně by tedy struktura souborů měla vypadat následovně:

Připomenutí
Veškerý kód píšeme vždy mezi složené závorky
{}
Jako první si přidáme metodu, která nám zajistí registraci itemu.
Ve třídě ModItems si tedy vytvoříme metodu register:
public static Item register(Item item, String id) {
}- k této metodě můžeme přistupovat odkudkoliv
public static - jako hodnotu vrací registrovaný item
Item - a jako parametry budeme předávat item, který chceme registrovat a id, pod kterým chceme daný item registrovat
- item bude typu
Item - id bude textový řetězec - typ
String
- item bude typu
Identifikátor
Při registraci itemu si nejprve potřebujeme vytvořit identifikátor, pod kterým item registrujeme. Identifikátor je například minecraft:stone. Skládá se tedy ze dvou částí:
namespace- to je část před
:- používá se název módu
- to je část před
path- to je část za
:- mělo by to odpovídat anglickému názvu itemu
- to je část za
Vytvoříme si tedy proměnnou itemID typu Identifier, do které si uložíme identifikátor itemu. Ten vytvoříme pomocí metody of ze třídy Identifier. U této metody potřebujeme uvést právě namespace a path.
namespacemůžeme použít název módu, který máme uložený v proměnnéMOD_IDve tříděCustomItem.pathbude parametrid, který jsme definovali v naší metoděregister
Identifier itemID = Identifier.of(CustomItem.MOD_ID, id);Přidání itemu do registrů
V Minecraftu se vše ukládá do tzv. registrů. Máme registry na itemy, bloky, kapaliny, enchanty, entity, dimenze, biomy atd. Všechny registry najdete na Minecraft wiki. Do těchto registrů můžeme samozřejmě i přidávat nové věci. V této části si ukážeme, jak přidat nový item.
Vytvoříme proměnnou registeredItem typu Item, kam si uložíme registrovaný item. Samotná registrace se provádí pomocí metody register ze třídy Registry.
Jako první argument musíme specifikovat, do jakého registru chceme přidávat. Seznam všech registrů je ve třídě Registries - my přidáváme item, takže vybereme ITEM. Dále musíme uvést identifikátor itemu - proměnná itemID. A jako poslední samotný item, který chceme registrovat - parametr item.
Item registeredItem = Registry.register(Registries.ITEM, itemID, item);Vrácení hodnoty
Jako poslední věc musíme vrátit registrovaný item, abychom ho po registraci mohli dále používat. To uděláme pomocí slova return a za to uvedeme hodnotu, kterou chceme vrátit. V našem případě proměnná registeredItem.
Celý kód bude vypadat následovně:
public static Item register(Item item, String id) {
Identifier itemID = Identifier.of(FabricDocsReference.MOD_ID, id);
Item registeredItem = Registry.register(Registries.ITEM, itemID, item);
return registeredItem;
}Tip
Pokud chcete, aby váš kód vypadal o něco lépe (správné odsazení textu, mezery, atd.), tak můžete použít klávesovou zkratku Ctrl+Alt+L
Registrování itemu
Nyní můžeme použít naši vytvořenou metodu k registraci itemu.
Ve třídě ModItems si vytvoříme proměnnou MAGIC_DUST typu Item
- hodnotu proměnné nebudeme chtít po vytvoření měnit a zároveň k ní chceme přistupovat odkudkoliv, proto proměnnou nastavíme jako
public static final
Do proměnné nyní uložíme výsledek metody register, kde jako argument uvedeme item a id. Item musíme vytvořit nový. To uděláme pomocí slova new a názvu třídy (Item). Třída item ale potřebuje jako argument nastavení itemu. Opět tedy vytvoříme nový objekt, ale tentokrát to bude třída Settings. Třída je obsažena v balíčku Item, takže musíme použít Item.Settings. Item se základním nastavením tedy vytvoříme pomocí:
new Item(new Item.Settings())Dále potřebujeme uvést ještě id itemu, která chceme registrovat. Můžeme použít stejný název jako jsme použili u názvu proměnné - suspicious_substance.
Celý kód registrace itemu a uložení do proměnné bude vypadat následovně:
public static final Item MAGIC_DUST = register(
new Item(new Item.Settings()),
"magic_dust"
);Pokud bychom nyní spustili hru, tak se item ještě nepřidá, protože musíme v hlavní třídě našeho módu říct, že má použít naši třídu ModItems.
Na to si ve třídě ModItems vytvoříme metodu initialize, která se používá na provedení nastavení třídy. Tato metoda bude opět public static, abychom k ní mohli přistupovat odkudkoliv. A jako návratový typ nebude vracet nic, což se v programování označuje slovem void. Metoda zatím nebude obsahovat žádný kód a bude tedy vypadat následovně:
public static void initialize() {
}Celá třída ModItems pak bude vypadat následovně:
public class ModItems {
public static final Item MAGIC_DUST = register(
new Item(new Item.Settings()),
"magic_dust"
);
public static void initialize() {
}
public static Item register(Item item, String id) {
Identifier itemID = Identifier.of(CustomItem.MOD_ID, id);
Item registeredItem = Registry.register(Registries.ITEM, itemID, item);
return registeredItem;
}
}V hlavní třídě našeho módu (CustomItem) pak naši třídu s itemy použijeme tak, že do metody onInitialize přidáme volání metody initialize ze třídy ModItems:
public class CustomItem implements ModInitializer {
public static final String MOD_ID = "custom-item";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
@Override
public void onInitialize() {
LOGGER.info("Hello Fabric world!");
ModItems.initialize();
}
}Když nyní mód spustíme, tak bychom item měli mít ve hře. Item zatím nemá žádnou texturu ani název a jediný způsob, jako ho nyní můžeme získat je přes příkaz:
/give @s custom-item:magic_dust