====== Ein Item hinzufügen ====== ==== Einstieg ==== Ein Item hinzuzufügen ist eines der ersten Schritte beim Modden. Du musst dein ''Item''-Objekt hinzufügen, es registrieren und eine Textur geben. Um zusätzliches Verhalten zu einem Item hinzuzufügen, musst du eine benutzerdefinierte Item-Klasse. In diesem Tutorial und allen weiteren, wird "tutorial" als Platzhalter genutzt. Wenn du eine eigene Mod-ID hast, fühl dich frei, diese stattdessen zu nuztzen. ==== Registrierung eines Item ==== Als erstes, erstelle eine Instanz von ''Item''. Wir speichern es oben in der Initialisierer-Klasse. Der Konstruktor benötigt eine ''Item.Settings'' (oder eine ''FabricItemSettings'')-Instanz, welches genutzt wird, um Sachen wie Haltbarkeit, Kategorie oder max. Stapelgröße festzulegen. public class ExampleMod implements ModInitializer { // an instance of our new item public static final class_1792 CUSTOM_ITEM = new class_1792(new FabricItemSettings().method_7892(class_1761.field_7932)); [...] } Du nutzt das Vannila-Registrierungssystem um den neuen Kontent zu Registrieren. Die Synax ist normalerweise ''.(Register Typ, , Kontent)''. Register-Typen sind gespeichert als statisches Feld in der ''''-Klasse, und der ''Identifier'' kennzeichnet den Inhalt. Der Kontent ist die Instanz von was immer du hinzufügen willst. Dies kann überall aufgerufen werden, solange es während der Initialisierung auftritt. public class ExampleMod implements ModInitializer { // an instance of our new item public static final class_1792 CUSTOM_ITEM = new class_1792(new FabricItemSettings().method_7892(class_1761.field_7932)); @Override public void onInitialize() { class_2378.method_10230(class_2378.field_11142, new class_2960("tutorial", "custom_item"), CUSTOM_ITEM); } } Dein Item wurde nun zu Minecraft hinzugefügt Führ den ''runClient'' Gradle-Befehl aus um es in Aktion zu sehen! {{:tutorial:2019-02-17_16.50.44.png?400|}} ==== Item Texturen hinzufügen ==== Das Registrieren von Texturen benötigt Model .json-Dateien und ein Texturbild. Du wirst sie zu deinem Ressourcenverzeichnis hinzufügen. Der direkte Pfad für beides ist: Item-Model: .../resources/assets/mod-id/models/item/custom_item.json Item-Texture: .../resources/assets/mod-id/textures/item/custom_item.png Unsere Beispieltextur kann unter [[https://i.imgur.com/CqLSMEQ.png|diesem Link]] gefunden werden. Wenn du dein Item im ersten Schritt richtig registriert hast, beschwert sich Minecraft auf ähnliche Weise wegen fehlender Textur bei dir: [Server-Worker-1/WARN]: Unable to load model: 'tutorial:custom_item#inventory' referenced from: tutorial:custom_item#inventory: java.io.FileNotFoundException: tutorial:models/item/custom_item.json It conveniently tells you exactly where it expects your asset[s] to be found-- when in doubt, check the log. Ein typisches Item-Modell(Beispiel): { "parent": "item/generated", "textures": { "layer0": "tutorial:item/custom_item" } } Das ''parent'' von deinem Item ändert, wie es in der Hand gerendert wird und ist nützlich für Dinge wie Block-Items im Inventar. "item/handheld" wird für Werkzeuge, die am unterem linken Eck von der Textur gehalten werden, genutzt. textures/layer0 ist der Ort, an dem deine Textur gespeichert ist. Das finale Ergebnis: {{:tutorial:item_texture.png?400|}} ==== Erstellen einer Item-Klasse ==== Um zusätzliches Verhalten zu deinem Item hinzuzufügen musst du eine Item-Klasse generieren. Der Standart-Konstruktor benötigt ein ''Item.Settings''-Objekt. public class CustomItem extends class_1792 { public CustomItem(class_1793 settings) { super(settings); } } Ein praktischer Anwendungsfall für eine benutzerdefinierte Item-Klasse wäre, den Item einen Ton abspielen zu lassen, wenn man ihn verwendet: public class CustomItem extends class_1792 { public CustomItem(class_1793 settings) { super(settings); } @Override public class_1271 method_7836(class_1937 world, class_1657 playerEntity, class_1268 hand) { playerEntity.method_5783(class_3417.field_14983, 1.0F, 1.0F); return class_1271.method_22427(playerEntity.method_5998(hand)); } } Ersetze das alte -Objekt durch eine Instanz deiner neuen Item-Klasse: public class ExampleMod implements ModInitializer { // an instance of our new item public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings().method_7892(class_1761.field_7932)); [...] } Wenn du alles richtig gemacht hast, spielt das Item beim nutzen des Items einen Ton ab. ==== Was, wenn ich die max. Stapelgröße von meinem Item festlegen möchte? ==== Dafür würdest du ''(int size)'' in den ''FabricItemSettings'' um die max. Stapelgröße festzulegen. Beachte, dass dies nicht gesetzt werden kann, wenn das Item beschädigt werden kann, da sonst eine RuntimeException geworfen wird. public class ExampleMod implements ModInitializer { // Eine Instanz von unserem Item, wenn die max. Stapelgröße 16 betragen soll. public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings().method_7892(class_1761.field_7932)).method_7889(16)); [...] } ==== Mach dein Item zu Brennstoff oder kompostierbar ==== Wenn du dein Item in Brennstoff verwandeln willst, um es in einem Ofen zu nutzen, kannst du es ins ''FuelRegistry'' eintragen, ein Beispiel: public class ExampleMod implements ModInitializer { [...] @Override public void onInitialize() { [...] FuelRegistry.INSTANCE.add(CUSTOM_ITEM, 300) } } Ähnlich kannst du ''CompostingChanceRegistry'' nutzen um es in einem Komposter kompostierbar zu machen. ==== Nächste Schritte ==== [[de:tutorial:itemgroup|Füge dein Item in eine eigene Item-Gruppe hinzu.]].