Diese Seite wird dich in einige Schlüssel-Konzepte von Items einführen und wie du sie registrierst, eine Textur, ein Model und einen Namen gibst.
Falls du es nicht weißt, alles in Minecraft wird in Registern gespeichert, genauso wie Items.
Deine Item-Klasse vorbereiten
Um die Registrierung von Items zu vereinfachen, kannst du eine Methode erstellen, die einen String Identifikator, einige Eigenschaften des Items und eine Factory zur Erstellung der Item-Instanz akzeptiert.
Diese Methode erstellt einen Item mit dem angegebenen Bezeichner und registriert ihn in der Item Registry des Spiels.
Du kannst diese Methode in eine Klasse namens ModItems (oder wie immer du die Klasse nennen willst) einfügen.
Mojang macht das auch mit ihren Items! Inspiriere dich von der Klasse Items.
java
public class ModItems {
public static <GenericItem extends Item> GenericItem register(String name, Function<Item.Properties, GenericItem> itemFactory, Item.Properties settings) {
// Create the item key.
ResourceKey<Item> itemKey = ResourceKey.create(Registries.ITEM, Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, name));
// Create the item instance.
GenericItem item = itemFactory.apply(settings.setId(itemKey));
// Register the item.
Registry.register(BuiltInRegistries.ITEM, itemKey, item);
return item;
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Beachte, wie wir ein GenericItem verwenden, wodurch wir dieselbe Methode register zum Registrieren aller Arten von Items verwenden können, die von Item erben. Beachte die Verwendung eines Function Interface für die Factory, das es uns später ermöglichen wird, zu spezifizieren, wie wir unser Item aus den Eigenschaften des Items mit Item::new erstellen wollen.
Ein Item registrieren
Mit der Methode kannst du nun ein Item registrieren.
Die Methode register nimmt eine Instanz von der Klasse Item.InteractionResult als Parameter entgegen. Mit dieser Klasse kannst du die Eigenschaften des Items mit Hilfe verschiedener Erstellungsmethoden konfigurieren.
TIP
Wenn du die Stapelgröße deines Items ändern möchtest, kannst du die Methode stacksTo in der Klasse Item.Properties verwenden.
Dies funktioniert nicht, wenn du das Item als beschädigungsfähig markiert hast, da die Stackgröße für beschädigungsfähige Gegenstände immer 1 ist, um Duplikations-Exploits zu verhindern.
java
public static final Item SUSPICIOUS_SUBSTANCE = register("suspicious_substance", Item::new, new Item.Properties());1
Item::new weist die Funktion register an, eine Instanz von Item aus einer Instanz von Item.Properties zu erzeugen, indem sie den Item-Konstruktor (new Item(...)) aufruft, der eine Instanz von Item.Properties als Parameter entgegennimmt.
Wenn du nun jedoch versuchst, den modifizierten Client auszuführen, kannst du sehen, dass unser Item im Spiel noch nicht existiert! Der Grund dafür ist, dass du die Klasse nicht statisch initialisiert hast.
Um dies zu tun, kannst du eine öffentliche, statische Methode zur initialisierung deiner Klasse hinzufügen und diese in deiner Mod-Initialisierer Klasse aufrufen. Derzeit benötigt diese Methode keine Inhalte.
java
public static void initialize() {
}1
2
3
2
3
java
public class ExampleModItems implements ModInitializer {
@Override
public void onInitialize() {
ModItems.initialize();
}
}1
2
3
4
5
6
2
3
4
5
6
Der Aufruf einer Methode einer Klasse initialisiert diese statisch, wenn sie nicht vorher geladen wurde - das bedeutet, dass alle static Felder ausgewertet werden. Dafür ist diese Dummy-Methode initialize gedacht.
Ein Item zu einem Kreativtab hinzufügen
INFO
Wenn du ein Item zu einem benutzerdefinierten CreativeModeTab hinzufügen möchtest, findest du weitere Informationen auf der Seite Benutzerdefinierte Kreativtabs.
Für ein Beispiel, in dem wir dieses Item zu dem Zutaten CreativeModeTab hinzufügen, musst du die Kreativtab-Events der Fabric API verwenden - insbesondere ItemGroupEvents.modifyEntriesEvent
Dies kann in der Methode initialize deiner Itemklasse geschehen.
java
// Get the event for modifying entries in the ingredients group.
// And register an event handler that adds our suspicious item to the ingredients group.
ItemGroupEvents.modifyEntriesEvent(CreativeModeTabs.INGREDIENTS)
.register((itemGroup) -> itemGroup.accept(ModItems.SUSPICIOUS_SUBSTANCE));1
2
3
4
2
3
4
Wenn du das Spiel lädst, kannst du sehen, dass unser Item registriert wurde und sich in der Gruppe der Zutaten im Kreativtab befindet:

Es fehlen jedoch folgende Punkte:
- Itemmodell
- Textur
- Übersetzung (Name)
Das Item benennen
Für das Item gibt es derzeit keine Übersetzung, du musst also eine hinzufügen. Der Übersetzungsschlüssel wurde bereits von Minecraft bereitgestellt: item.example-mod.suspicious_substance.
Erstelle eine neue JSON-Datei unter dem Pfad src/main/resources/assets/example-mod/lang/en_us.json und setze den Übersetzungsschlüssel und seinen Wert:
json
{
"item.example-mod.suspicious_substance": "Suspicious Substance"
}1
2
3
2
3
Du kannst entweder das Spiel neu starten oder deinen Mod bauen und F3+T drücken, um die Änderungen zu übernehmen.
Ein Client Item, eine Textur und ein Modell hinzufügen
Damit dein Item ein ansprechendes Erscheinungsbild hat, muss Folgendes gegeben sein:
Eine Textur hinzufügen
INFO
Für weitere Informationen zu diesem Thema, sieh dir die Item Modelle Seite an.
Um deinem Item eine Textur und ein Modell zu geben, erstelle einfach ein 16x16 Texturbild für dein Item und speichere es im Ordner assets/example-mod/textures/item. Benenne die Texturdatei genauso wie den Bezeichner des Items, aber mit der Erweiterung .png.
Als Beispiel kannst du diese Textur für suspicious_substance.png verwenden
Ein Modell hinzufügen
Wenn du das Spiel neu startest/ladest, solltest du sehen, dass das Item immer noch keine Textur hat, weil du ein Modell hinzufügen musst, das diese Textur verwendet.
Wenn du das Spiel neu startest/ladest, solltest du sehen, dass das Item immer noch keine Textur hat, weil du ein Modell hinzufügen musst, das diese Textur verwendet.
Erzeuge das Modell JSON im Ordner assets/example-mod/models/item, mit dem gleichen Namen wie das Element; suspicious_substance.json
json
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "example-mod:item/suspicious_substance"
}
}1
2
3
4
5
6
2
3
4
5
6
Das Modell JSON niederbrechen
parent: Dies ist das Elternmodell von dem dieses Modell erben wird. In diesem Fall ist es das Modellitem/generated.textures: Dies ist der Ort, wo du die Textur für das modell definierst. Derlayer0Schlüssel ist die Textur, die das Modell nutzen wird.
Die meisten Items werden das Modell item/generated als übergeordnetes Modell verwenden, da es ein einfaches Modell ist, das nur die Textur anzeigt.
Es gibt Alternativen, z. B. item/handheld, das für Items verwendet wird, die der Spieler in der Hand hält, wie z. B. Werkzeuge.
Ein Client Item erstellen
Minecraft weiß nicht automatisch, wo die Dateien deiner Item-Modelle zu finden sind, deswegen müssen wir ein Client Item zur Verfügung stellen.
Erstelle das JSON für das Client Item im Verzeichnis assets/example-mod/items, mit demselben Dateinamen wie der Bezeichner des Items: suspicious_substance.json.
json
{
"model": {
"type": "minecraft:model",
"model": "example-mod:item/suspicious_substance"
}
}1
2
3
4
5
6
2
3
4
5
6
Das Client Item JSON aufschlüsseln
model: Das ist die Eigenschaft, die die Referenz zu unserem Modell beinhaltet.type: Dies ist der Typ unseres Modell. Für die meisten Items sollte diesminecraft:modelseinmodel: Dies ist die Bezeichnung des Modells. Es sollte diese Form haben:example-mod:item/item_name
Dein Item sollte nun im Spiel wie folgt aussehen:

Das Item kompostierbar oder zu einem Brennstoff machen
Die Fabric API bietet verschiedene Register, die verwendet werden können, um zusätzliche Eigenschaften zu deinen Items hinzuzufügen.
Wenn du zum Beispiel dein Item kompostierbar machen willst, kannst du die CompostingChanceRegistry verwenden:
java
// Add the suspicious substance to the composting registry with a 30% chance of increasing the composter's level.
CompostingChanceRegistry.INSTANCE.add(ModItems.SUSPICIOUS_SUBSTANCE, 0.3f);1
2
2
Alternativ, wenn du dein Item zu einem Brennstoff machen willst, kannst du das Event FuelRegistryEvents.BUILD verwenden:
java
// Add the suspicious substance to the registry of fuels, with a burn time of 30 seconds.
// Remember, Minecraft deals with logical based-time using ticks.
// 20 ticks = 1 second.
FuelRegistryEvents.BUILD.register((builder, context) -> {
builder.add(ModItems.SUSPICIOUS_SUBSTANCE, 30 * 20);
});1
2
3
4
5
6
2
3
4
5
6
Hinzufügen eines einfachen Craftingrezepts
Wenn du ein Crafting-Rezept für deine Items hinzufügen möchtest, musst du eine Rezept-JSON-Datei in den Ordner data/example-mod/recipe legen.
Weitere Informationen über das Rezeptformat findest du in diesen Ressourcen:
Benutzerdefinierte Tooltips
Wenn du möchtest, dass dein Item einen benutzerdefinierten Tooltip hat, musst du eine Klasse erstellen, die Item erbt und die Methode appendHoverText überschreibt.
INFO
In diesem Beispiel wird die Klasse LightningStick verwendet, die auf der Seite Benutzerdefinierte Iteminteraktionen erstellt wurde.
java
@Override
public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay displayComponent, Consumer<Component> textConsumer, TooltipFlag type) {
textConsumer.accept(Component.translatable("itemTooltip.example-mod.lightning_stick").withStyle(ChatFormatting.GOLD));
}1
2
3
4
5
2
3
4
5
Jeder Aufruf von accept() fügt dem Tooltip eine Zeile hinzu.





