🇩🇪 Deutsch (German)
🇩🇪 Deutsch (German)
Erscheinungsbild
🇩🇪 Deutsch (German)
🇩🇪 Deutsch (German)
Erscheinungsbild
Diese Seite ist für folgende Version geschrieben:
1.21
Diese Seite ist für folgende Version geschrieben:
1.21
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.
Um die Registrierung von Items zu vereinfachen, kannst du eine Methode erstellen, die eine Instanz eines Items und einen String-Bezeichner 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
.
public class ModItems {
public static Item register(Item item, String id) {
// Create the identifier for the item.
Identifier itemID = Identifier.of(FabricDocsReference.MOD_ID, id);
// Register the item.
Item registeredItem = Registry.register(Registries.ITEM, itemID, item);
// Return the registered item!
return registeredItem;
}
Mit der Methode kannst du nun ein Item registrieren.
Der Item-Konstruktor nimmt eine Instanz der Klasse Items.Settings
als Parameter entgegen. Mit dieser Klasse kannst du die Eigenschaften des Items mit Hilfe verschiedener Erstellungsmethoden konfigurieren.
TIP
If you want to change your item's stack size, you can use the maxCount
method in the Items.Settings
/FabricItemSettings
class.
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.
public static final Item SUSPICIOUS_SUBSTANCE = register(
new Item(new Item.Settings()),
"suspicious_substance"
);
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 braucht diese Methode nichts zu enthalten.
public static void initialize() {
}
public class FabricDocsReferenceItems implements ModInitializer {
@Override
public void onInitialize() {
ModItems.initialize();
}
}
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.
INFO
Wenn du den Artikel einer benutzerdefinierten ItemGroup
hinzufügen möchtest, findest du weitere Informationen auf der Seite Benutzerdefinierte Itemgruppe.
Für ein Beispiel, in dem wir dieses Element zu den Zutaten ItemGroup
hinzufügen, musst du die Itemgruppen-Events der Fabric API verwenden - insbesondere ItemGroupEvents.modifyEntriesEvent
.
Dies kann in der Methode initialize
deiner Itemklasse geschehen.
// 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(ItemGroups.INGREDIENTS)
.register((itemGroup) -> itemGroup.add(ModItems.SUSPICIOUS_SUBSTANCE));
Wenn du das Spiel lädst, kannst du sehen, dass unser Item registriert wurde und sich in der Gruppe der Zutaten befindet:
Es fehlen jedoch folgende Punkte:
Für das Item gibt es derzeit keine Übersetzung, du musst also eine hinzufügen. Der Übersetzungsschlüssel wurde bereits von Minecraft bereitgestellt: item.mod_id.suspicious_substance
.
Erstelle eine neue JSON-Datei unter dem Pfad src/main/resources/assets/<mod id here>/lang/en_us.json
und setze den Übersetzungsschlüssel und seinen Wert:
{
"item.mod_id.suspicious_substance": "Suspicious Substance"
}
Du kannst entweder das Spiel neu starten oder deinen Mod bauen und F3+T drücken, um die Änderungen zu übernehmen.
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/<mod id here>/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.
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.
Du wirst ein einfaches item/generated
-Modell erstellen, das eine Eingabetextur und sonst nichts enthält.
Erzeuge das Modell JSON im Ordner assets/<mod id here>/models/item
, mit dem gleichen Namen wie das Element; suspicious_substance.json
{
"parent": "item/generated",
"textures": {
"layer0": "fabric-docs-reference:item/suspicious_substance"
}
}
parent
: Dies ist das Elternmodell von dem dieses Modell erben wird. In diesem Fall ist es das Modell item/generated
.textures
: Dies ist der Ort, wo du die Textur für das modell definierst. Der layer0
Schlü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.
Dein Item sollte nun im Spiel wie folgt aussehen:
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 CompostableItemRegistry
verwenden:
// 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);
Alternativ, wenn du dein Item zu einem Brennstoff machen willst, kannst du alternativ die Klasse FuelRegistry
verwenden:
// 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.
FuelRegistry.INSTANCE.add(ModItems.SUSPICIOUS_SUBSTANCE, 30 * 20);
Wenn du ein Crafting-Rezept für deine Items hinzufügen möchtest, musst du eine Rezept-JSON-Datei in den Ordner data/<mod id here>/recipe
legen.
Weitere Informationen über das Rezeptformat findest du in diesen Ressourcen:
Wenn du möchtest, dass dein Item einen benutzerdefinierten Tooltip hat, musst du eine Klasse erstellen, die Item
erbt und die Methode appendTooltip
überschreibt.
INFO
In diesem Beispiel wird die Klasse LightningStick
verwendet, die auf der Seite Benutzerdefinierte Iteminteraktionen erstellt wurde.
@Override
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
tooltip.add(Text.translatable("itemTooltip.fabric-docs-reference.lightning_stick").formatted(Formatting.GOLD));
}
Jeder Aufruf von add()
fügt dem Tooltip eine Zeile hinzu.