Werkzeuge und Waffen 26.1.2
Lerne, wie du deine eigenen Werkzeuge erstellst und deren Eigenschaften konfigurierst.
Werkzeuge sind für das Überleben und das Vorankommen unerlässlich, denn sie ermöglichen es den Spielern, Ressourcen zu sammeln, Gebäude zu bauen und sich zu verteidigen.
Ein Werkzeugmaterial erstellen
Du kannst ein Werkzeugmaterial erstellen, indem du ein neues ToolMaterial-Objekt instanziierst und es in einem Feld speicherst, das später verwendet werden kann, um die Werkzeugelemente zu erstellen, die das Material verwenden.
java
public static final ToolMaterial GUIDITE_TOOL_MATERIAL = new ToolMaterial(
INCORRECT_FOR_GUIDITE_TOOL, // incorrect blocks for drops
455, // durability
5.0F, // speed
1.5F, // attack damage bonus
22, // enchantment value
GuiditeArmorMaterial.REPAIRS_GUIDITE_ARMOR // repair items
);1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Der ToolMaterial-Konstruktor akzeptiert die folgenden Parameter, in dieser spezifischen Reihenfolge:
| Parameter | Beschreibung |
|---|---|
incorrectBlocksForDrops | Wenn ein Block im Tag incorrectBlocksForDrops ist, bedeutet das, dass der Block keine Gegenstände fallen lässt, wenn man ein Werkzeug aus diesem ToolMaterial zum abbauen dieses Blocks benutzt.Befindet sich ein Block im Tag incorrectBlocksForDrops, bedeutet dies, dass der Block keine Item fallen lässt, wenn du ein Werkzeug, das aus diesem ToolMaterial hergestellt wurde, auf diesen Block verwendest. |
durability | Die Haltbarkeit aller Werkzeuge, die aus diesem ToolMaterial bestehen. |
speed | Die Abbaugeschwindigkeit der Werkzeuge, die aus diesem ToolMaterial bestehen. |
attackDamageBonus | Der zusätzliche Angriffsschaden der Werkzeuge, die aus diesem ToolMaterial sind. |
enchantmentValue | Die "Verzauberbarkeit" von Werkzeugen, die aus diesem ToolMaterial bestehen. |
repairItems | Alle Gegenstände, die in diesem Tag enthalten sind, können verwendet werden, um Werkzeuge aus diesem ToolMaterial in einem Amboss zu reparieren. |
Für dieses Beispiel verwenden wir dasselbe Item Tag zur Reparatur, das wir auch für Rüstungen verwenden werden. Wir definieren die Tag-Referenz wie folgt:
java
public static final TagKey<Item> REPAIRS_GUIDITE_ARMOR = TagKey.create(BuiltInRegistries.ITEM.key(), Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "repairs_guidite_armor"));1
Wenn du Schwierigkeiten hast, ausgewogene Werte für einen der numerischen Parameter zu bestimmen, solltest du dir die Vanilla-Werkzeugmaterialkonstanten ansehen, wie zum Beispiel ToolMaterial.STONE oder ToolMaterial.DIAMOND.
Ein Werkzeugmaterial Tag erstellen
Für unser Tag incorrectBlocksForDrops können wir ein Tag erstellen, das zu den Vanilla Tags minecraft:incorrect_for_*_drops ähnlich ist. Diese legen fest, welche Blöcke beim Abbau mit dem jeweiligen Material nicht fallen gelassen werden. Lasst uns die Tag-Referenz wie folgt definieren:
java
public static final TagKey<Block> INCORRECT_FOR_GUIDITE_TOOL = TagKey.create(BuiltInRegistries.BLOCK.key(),
Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "incorrect_for_guidite_tool"));1
2
2
Als Nächstes definieren wir den Inhalt des Tags mithilfe einer Tag JSON-Datei. Lasst uns die Guidite-Werkzeuge dieselben Blöcke abbauen wie die Holzwerkzeuge, zusätzlich zu Kupfererz und Tiefschiefer-Kupfererz:
json
{
"values": ["#minecraft:incorrect_for_wooden_tool"],
"fabric:remove": ["#minecraft:copper_ores"]
}1
2
3
4
2
3
4
Beachte, dass dieses Beispiel von einem schwächeren Werkzeugmaterial abgeleitet ist und Einträge entfernt, die unser stärkeres Material abbauen kann, wobei es alle anderen Blöcke erbt, die Holz nicht abbauen kann.
TIP
Wir könnten auch das umgekehrte machen: Von einem stärkeren Werkzeug erben und zusätzliche Blöcke anhängen, für die Guidite-Werkezge nicht geeignet sind.
Als Beispiel, wenn wir ein Werkzeug erstellen wollten, das wie Eisen funktioniert, aber kein Diamanterz abbauen kann, müsste values die Einträge #minecraft:incorrect_for_iron_tool und #minecraft:diamond_ores enthalten.
Wenn du möchtest, dass dein Werkzeug dieselben Blöcke abbaut wie ein bereits vorhandenes, kannst du das entsprechende Tag ohne Änderungen in die Definition deines Tags aufnehmen. Dies wird gegenüber der Übergabe des vorhandenen Tag als incorrectBlocksForDrops deines Materials empfohlen, damit Benutzer die falschen Blöcke für jedes Material unabhängig voneinander konfigurieren können.
Werkzeugitems registrieren
Mit der gleichen Hilfsfunktion wie in der Anleitung Erstelle dein ersten Item kannst du deine Werkzeugitems erstellen:
java
public static final Item GUIDITE_SWORD = register(
"guidite_sword",
Item::new,
new Item.Properties().sword(GUIDITE_TOOL_MATERIAL, 1f, 1f)
);1
2
3
4
5
2
3
4
5
Die beiden Float-Werte (1f, 1f) beziehen sich auf den Angriffsschaden des Werkzeugs bzw. die Angriffsgeschwindigkeit des Werkzeugs.
Für Schaufeln, Äxte und Hacken solltest du statt eines generischen Item ein ShovelItem, AxeItem oder HoeItem erstellen, da diese werkzeugspezifische Rechtsklick-Aktionen implementieren:
java
public static final Item GUIDITE_AXE = register(
"guidite_axe",
settings -> new AxeItem(GUIDITE_TOOL_MATERIAL, 5.0F, -3.0F, settings),
new Item.Properties());1
2
3
4
2
3
4
INFO
ShovelItem, AxeItem und HoeItem rufen in ihren Konstruktoren die Methode shovel, axe oder hoe von Item.Properties auf.
Vergiss nicht, sie zu einem Kreativtab hinzuzufügen, wenn du vom Kreativinventar aus auf sie zugreifen willst!
java
CreativeModeTabEvents.modifyOutputEvent(CreativeModeTabs.TOOLS_AND_UTILITIES)
.register((creativeTab) -> creativeTab.accept(ModItems.GUIDITE_SWORD));1
2
2
Du musst auch eine Textur, eine Itemübersetzung und ein Itemmodell hinzufügen. Für das Itemmodell solltest du jedoch anstelle von dem üblichen item/generated das Modell item/handheld als übergeordnetes Modell verwenden.
Assets
Du wirst auch eine Textur, eine Übersetzung, ein Client Item und ein Itemmodell hinzufügen müssen. Für das Itemmodell solltest du jedoch anstelle von dem üblichen item/generated das Modell item/handheld als übergeordnetes Modell verwenden.
In diesem Beispiel werden wir das folgende Client Item, Modell und die folgende Textur für das Item "Guidite Sword" definieren:
INFO
Das Modell kann datengeneriert werden. Weitere Informationen findest du in der Dokumentation zur Erstellung von Itemmodellen.
java
itemModelGenerator.generateFlatItem(ModItems.GUIDITE_SWORD, ModelTemplates.FLAT_HANDHELD_ITEM);1
Ein ähnliches Muster gilt für das Item "Guidite Axe".
java
itemModelGenerator.generateFlatItem(ModItems.GUIDITE_AXE, ModelTemplates.FLAT_HANDHELD_ITEM);1
Werkzeugitems taggen
VORAUSSETZUNGEN
Weitere Informationen findest du in der Dokumentation zur Erstellung von Item Tags.
Es wird außerdem empfohlen, dein Werkzeug in den entsprechenden Item Tags einzuordnen. Werkzeuge verfügen über eigene Tags, wie beispielsweise ItemTags.SWORDS, die für die Verzauberbarkeit und andere spezifische Logik verwendet werden, beispielsweise ob ein Schwungkraft-Schaden verursacht werden soll.
Füge die folgenden Zeilen zu addTags in deinem Item Tag Provider hinzu:
java
valueLookupBuilder(ItemTags.SWORDS)
.add(ModItems.GUIDITE_SWORD);
valueLookupBuilder(ItemTags.AXES)
.add(ModItems.GUIDITE_AXE);1
2
3
4
2
3
4
Das war's dann auch schon! Im Spiel solltest du deine Werkzeuge in der Registerkarte "Tools and Utilities" im Kreativ Inventar Menü sehen.






