User Tools

Site Tools


de:tutorial:items

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.

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // an instance of our new item
  4. public static final Item CUSTOM_ITEM = new Item(new FabricItemSettings().method_7892(ItemGroup.field_7932));
  5. [...]
  6. }
Du nutzt das Vannila-Registrierungssystem um den neuen Kontent zu Registrieren. Die Synax ist normalerweise Registry.register(Register Typ, Identifier, Kontent). Register-Typen sind gespeichert als statisches Feld in der Registry-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.
  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // an instance of our new item
  4. public static final Item CUSTOM_ITEM = new Item(new FabricItemSettings().method_7892(ItemGroup.field_7932));
  5.  
  6. @Override
  7. public void onInitialize() {
  8. Registry.register(Registry.field_11142, new Identifier("tutorial", "custom_item"), CUSTOM_ITEM);
  9. }
  10. }
Dein Item wurde nun zu Minecraft hinzugefügt Führ den runClient Gradle-Befehl aus um es in Aktion zu sehen!

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 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:

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.

  1. public class CustomItem extends Item {
  2.  
  3. public CustomItem(Settings settings) {
  4. super(settings);
  5. }
  6. }

Ein praktischer Anwendungsfall für eine benutzerdefinierte Item-Klasse wäre, den Item einen Ton abspielen zu lassen, wenn man ihn verwendet:

  1. public class CustomItem extends Item {
  2.  
  3. public CustomItem(Settings settings) {
  4. super(settings);
  5. }
  6.  
  7. @Override
  8. public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) {
  9. playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F);
  10. return TypedActionResult.success(playerEntity.getStackInHand(hand));
  11. }
  12. }

Ersetze das alte Item-Objekt durch eine Instanz deiner neuen Item-Klasse:

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // an instance of our new item
  4. public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings().method_7892(ItemGroup.field_7932));
  5. [...]
  6. }
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 maxCount(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.

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // Eine Instanz von unserem Item, wenn die max. Stapelgröße 16 betragen soll.
  4. public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings().method_7892(ItemGroup.field_7932)).maxCount(16));
  5. [...]
  6. }

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/items.txt · Last modified: 2022/07/20 13:28 by 127.0.0.1