minetest_modding_book/_de/items/nodes_items_crafting.md

14 KiB

---

title: Blöcke, Items und Craften layout: default root: ../.. idx: 2.1 description: Benutze register_node, register_item und register_craft um zu lernen wie man Blöcke, Items und Rezepte erstellen. redirect_from: /de/chapters/nodes_items_crafting.html

Einführung

Neue Blöcke, Craftitems und Rezepte zu erstellen, sind Grundlagen von vielen Mods

Was sind Blöcke und Craftitems?

Blöcke, Craftitems und tools sind alles Items. Ein Items ist etwas das im Inventar gefunden werden kann - Sogar wenn es nicht im normalen gameplay nicht möglich ist.

Ein Block ist ein Item das plaziert werden kann oder in der Welt gefunden werden kann. Jede Position muss belegt werden mit ein und nur einen Block - Scheinbare leere Position sind normalerweise Luftblöcke.

Ein Craftitem kann nicht plazier werden man kann es nur im Inventar finden oder als gedropptes Item in der Welt.

Ein Werkzeug hat die Fähigkeit sich abzunutzen und hat normalerweise nicht standardmäßige Abbaufähigkeiten. In Zukunft we Craftitems und Werkzeuge wahrscheinlich verschmelzen weil die Unterscheidung zwinschen ihnen eher ausgedacht ist.

Items erstellen

Item Definitionen bestehen aus einen Itemnamen und einer Definitions Tabelle. Die Definitions Tabelle beinhaltet Attribute welche das Verhalten eines Items beinflussen.

minetest.register_craftitem("modname:itemname", {
    description = "Mein spezielles Item",
    inventory_image = "modname_itemname.png"
})

Itemnamen

jedes Item hat ein Itemnamen welches auf sich verweist, es sollte folgendes Format haben:

modname:itemname

Itemaliase

Items können auch Aliase haben die auf ihren Namen zeigen. Ein Alias ist ein nachgemachter Item Name der dazu führt, dass die Egine alle Aliase so behandelt als wären es Itemnamen. Da sind zwei verbreitete Varianten um das zu nutzen:

  • Umbenannte entfernte Items in etwas anderes umzubenennen. Es kann Unbekannte Items in der Welt oder im Inventar geben, wenn ein Gegenstand ohne Korrektur aus einen Mod entfernt wird.
  • Ein Abkürzung hinzufügen. /giveme dirt ist einfacher als /giveme default:dirt.

Ein Itemalias zu erstellen ist richtig einfach. Ein guter Weg um sich die Reinfolge von der Argumenten zu merken ist von → zu wo von der alias ist und zu das Orginal.

minetest.register_alias("dirt", "default:dirt")

Mods müssen sicher gehen, dass Alias aufgelöst werden, bevor sie sich direkt mit Itemnamen befassen, da die Engine dies nicht tut. Das ist allerdings ziemlich einfach:

itemname = minetest.registered_aliases[itemname] or itemname

Texturen

Texturen solten in den textures/ Pfad mit Namen im Format plaziert werden modname_itemname.png.\ JPEG texturen werden unterstüzt, aber sie unterstüzen keine tranperenz und haben generell schlechte qualität und niedrige Auflösung. Es ist oft besser das PNG format zu benutzen.

Texturen in Minetest sind in der Regel 16 mal 16 Pixel. Sie können in jeder Auflösung sein, es wird jedoch empfohlen, dass sie in der Größenordnung von 2 liegen, beispielsweise 16, 32, 64 oder 128. Das liegt daran, dass andere Auflösungen auf älteren Geräten möglicherweise nicht korrekt unterstützt werden. was zu einer geringeren Leistung führt.

Erstellen von Basis-Blöcken

minetest.register_node("meinemod:diamant", {
    description = "Alien Diamanten",
    tiles = {"meinemod_diamant.png"},
    is_ground_content = true,
    groups = {cracky=3, stone=1}
})

Die Eigenschaft tiles ist eine Tabelle mit Texturnamen, die der Blöcken verwenden wird. Wenn es nur eine Textur gibt, wird diese Textur auf jeder Seite verwendet. Um eine andere Textur pro Seite zu erhalten, geben Sie die Namen von 6 Texturen in dieser Reihenfolge an:

oben (+Y), unten (-Y), rechts (+X), links (-X), hinten (+Z), vorne (-Z).
(+Y, -Y, +X, -X, +Z, -Z)

Denken Sie daran, dass +Y in Minetest nach oben zeigt, wie es in der 3D-Computergrafiken.

minetest.register_node("meinemod:diamant", {
    description = "Alien Diamanten",
    tiles = {
        "meinemod_diamant_oben.png",    -- y+
        "meinemod_diamant_unten.png",  -- y-
        "meinemod_diamant_rechts.png", -- x+
        "meinemod_diamant_links.png",  -- x-
        "meinemod_diamant_hinten.png",  -- z+
        "meinemod_diamant_vorne.png", -- z-
    },
    is_ground_content = true,
    groups = {cracky = 3},
    drop = "meinemod:diamant_fragment"
    -- ^  Anstatt diamanten dropen zu lassen, lassen Sie meinemod:diamant_fragment dropen
})

Mit dem Attribut is_ground_content können Höhlen über dem Stein erzeugt werden. Dies ist wichtig für jeden Knoten, der während der Kartenerstellung unterirdisch platziert werden kann. Höhlen werden aus der Welt herausgeschnitten, nachdem alle anderen Knoten in einem Gebiet generiert wurden.

Aktionen und Callbacks

Minetest verwendet hauptsächlich ein Callback-basiertes Modding-Design. Callbacks können in der Objektdefinitionstabelle platziert werden, um eine Reaktion auf verschiedene Benutzerereignisse vorzuruffen.

on_use

Normalerweise wird der Verwendungsrückruf ausgelöst, wenn ein Spieler mit der linken Maustaste auf einen Gegenstand klickt. Ein Verwendungs-Callback verhindert, dass der Gegenstand zum Graben von Knoten verwendet wird. Eine häufige Verwendung des Callback ist für Nahrung:

minetest.register_craftitem("meinemod:schlammkuchen", {
    description = "Alien Schlamm Kuchen",
    inventory_image = "meinessen_schlammkuchen.png",
    on_use = minetest.item_eat(20),
})

Die Zahl, die an die Funktion minetest.item_eat übergeben wird, ist die Anzahl der halben Herzen die durch den Verzehr dieses Lebensmittels geheilt werden. Jedes Herzsymbol, das der Spieler hat, sind zwei halbe Herzen wert. Ein Spieler kann normalerweise bis zu 10 Herzen haben, was 20 halbe Herzen entspricht. Die halben Herzen müssen keine ganzen Zahlen sein, sondern können auch Dezimalzahlen sein.

minetest.item_eat() ist eine Funktion, die eine Funktion zurückgibt, die sie als on_use-Callback. Das bedeutet, dass der obige Code ungefähr so aussieht:

minetest.register_craftitem("meinemod:schlammkuchen", {
    description = "Alien Schlamm Kuchen",
    inventory_image = "meinessen_schlammkuchen.png",
    on_use = function(...)
        return minetest.do_item_eat(20, nil, ...)
    end,
})

Wenn man versteht, wie item_eat funktioniert, indem es einfach eine Funktion zurückgibt, ist es ist es möglich, die Funktion so zu ändern, dass sie ein komplexeres Verhalten zeigt, z. B. das Abspielen eines benutzerdefinierten Sounds.

Crafting

Es gibt verschiedene Arten von Bastelrezepten, die durch die Eigenschaft Typ angezeigt werden Eigenschaft angezeigt.

  • shaped - Die Zutaten müssen sich an der richtigen Stelle befinden.
  • shapeless - Es spielt keine Rolle, wo sich die Zutaten befinden, es muss nur die richtige Menge vorhanden sein.
  • cooking - Rezepte, die der Ofen verwenden soll.
  • fuel - Definiert Gegenstände, die in Öfen verbrannt werden können.
  • tool_repair - Definiert Gegenstände, die mit Werkzeugen repariert werden können.

Handwerksrezepte sind keine Gegenstände, daher verwenden sie keine Gegenstandsnamen zur eindeutigen identifizieren.

Shaped

Shaped Rezepte sind Rezepte, bei denen die Zutaten in der richtigen Form oder Muster haben müssen, um zu funktionieren. In dem folgenden Beispiel müssen die Fragmente in einem stuhlähnlichen Muster liegen, damit das Handwerk funktioniert.

minetest.register_craft({
    type = "shaped",
    output = "meinemod:diamant_stuhl 99",
    recipe = {
        {"meinemod:diamant_fragment", "",                           ""},
        {"meinemod:diamant_fragment", "meinemod:diamant_fragment",  ""},
        {"meinemod:diamant_fragment", "meinemod:diamant_fragment",  ""}
    }
})

Zu beachten ist auch die leere Spalte auf der rechten Seite. Das bedeutet, dass rechts von der Form eine leere Spalte vorhanden sein muss, sonst wird dies nicht funktionieren. Wenn diese leere Spalte nicht erforderlich sein sollte, können die leeren Zeichenfolgen weggelassen werden so weggelassen werden:

minetest.register_craft({
    type = "shaped",
    output = "meinemod:diamant_stuhl 99",
    recipe = {
        {"meinemod:diamant_fragment", ""                         },
        {"meinemod:diamant_fragment", "meinemod:diamant_fragment"},
        {"meinemod:diamant_fragment", "meinemod:diamant_fragment"}
    }
})

Das Feld "Typ" wird für geformte Handwerke nicht benötigt, da "geformt" der Standard-Handwerkstyp ist.

Shapeless

Shapeless Rezepte sind eine Art von Rezepten, bei denen es nicht darauf ankommt wo die Zutaten platziert werden, sondern nur, dass sie da sind.

minetest.register_craft({
    type = "shapeless",
    output = "meinemod:diamant 3",
    recipe = {
        "meinemod:diamant_fragment",
        "meinemod:diamant_fragment",
        "meinemod:diamant_fragment",
    },
})

Cooking und Fuel

Rezepte des Typs "cooking" werden nicht im crafting grid hergestellt, sondern im Ofen oder anderen Kochwerkzeugen, welche womöglich in Mods gefunden werden können, gekocht

minetest.register_craft({
    type = "cooking",
    output = "meinemod:diamant_fragment",
    recipe = "default:coalblock",
    cooktime = 10,
})

Der einzige wirklich Unterschied im Code ist, dass das Rezept nur ein Item beinhaltet im Vergleich zu einer Tabelle (zwischen geschweiften Klammern). Sie haben optional auch einen "cooktime" parameter, welcher definiert wie lange die Items zu kochen brauchen. Wenn dies nicht gesetzt ist, ist der Standard 3.

Das Rezepz oben funktioniert, wenn der Kohle Block im Input-Slotm ist, mit irgendeiner Form von Brennstoff darunter. Es stell nach 10 Sekunden ein Diamant-Fragment her!

Dieser Typ ist eine Ergänzung zum Kochtyp, da er definiert was in Öfen und anderen Kochgeräten aus Mods verbrannt werden kann.

minetest.register_craft({
    type = "fuel",
    recipe = "meinemod:diamant",
    burntime = 300,
})

Sie haben keinen Ausgabe wie andere Rezepte, aber sie haben eine Brenndauer
die angibt, wie lange sie in Sekunden als Brennstoff reichen.
Der Diamant ist also 300 Sekunden lang als Brennstoff verwendbar!

## Gruppen

Items können Mitglieder von vielen Gruppen sein und Gruppen können viele Mitglieder haben.
Gruppen sind definiert die `groups`-Eigenschaft in der Definitions-Tabelle zu benutzen
und haben einen 

Items can be members of many groups and groups can have many members.
Groups are defined using the `groups` property in the definition table
and have an dazugehörig Wert.

```lua
groups = {cracky = 3, wood = 1}

Es gibt mehrere Gründe für die Verwendung von Gruppen. Erstens werden Gruppen verwendet, um Eigenschaften wie Abbautyp und Entflammbarkeit zu beschreiben. Zweitens können Gruppen in einem Handwerksrezept anstelle eines Gegenstandsnamens verwendet werden, damit ein beliebiger Gegenstand aus der Gruppe verwendet werden kann.

minetest.register_craft({
    type = "shapeless",
    output = "meinemod:diamant_ding 3",
    recipe = {"group:holz", "mymod:diamant"}
})

Werkzeuge, Fähigkeiten und Grabungstypen

Dig types are groups which are used to define how strong a node is when dug with different tools.

Grabungstypen sind Gruppen, die dazu dienen, zu definieren wie stark ein Block ist, wenn er von verschiedenen Werkzeugen abgebaut wird. Eine Grabtypgruppe mit einem höheren Wert bedeutet, dass der Blockes leichter und schneller abzubauen ist. Es ist möglich, mehrere Grabtypen zu kombinieren, um eine effizientere Nutzung von mehreren Werkzeugtypen zu erzielen. Ein Block ohne Grabtypen kann mit keinem Werkzeug gegraben werden.

Gruppe Bestes Werkzeug Beschreibung
crumbly Spaten Erde, Sand
cracky Spitzhacke Zähes (aber brüchiges) Material wie Stein
snappy irgendeins Kann mit feinen Werkzeugen geschnitten werden;
z.B. Blätter, kleine Pflanzen, Draht, Metallbleche
choppy Axt Kann mit scharfer Gewalt geschnitten werden, z. B. Bäume, Holzbretter
fleshy Schwert Lebende Dinge wie Tiere und der Spieler
Das könnte einige Bluteffekte beim Schlagen mit sich bringen.
explody ? Besonders anfällig für Explosionen
oddly_breakable_by_hand irgendeins Fackeln und dergleichen - sehr schnell zu graben

Jedes Werkzeug hat eine Werkzeugfähigkeit. Eine Fähigkeit umfasst eine Liste der unterstützten Grabtypen und die zugehörigen Eigenschaften für jeden Typ, wie z. B. die Grabungszeiten und der Grad der Abnutzung. Werkzeuge können auch eine maximal unterstützte Härte für jeden Typ haben, was es ermöglicht schwächere Werkzeuge daran zu hindern, härtere Knoten zu graben. Es ist sehr üblich, dass Werkzeuge alle Grabtypen in ihren Fähigkeiten enthalten, Die weniger geeigneten haben dabei sehr ineffiziente Eigenschaften. Wenn der Gegenstand, den ein Spieler gerade trägt, keine explizite Werkzeug Fähigkeit hat, dann wird stattdessen die Fähigkeit der aktuellen Hand verwendet.

minetest.register_tool("meinemod:werkzeug", {
    description = "Mein Werkzeug",
    inventory_image = "meinemod_werkzeug.png",
    tool_capabilities = {
        full_punch_interval = 1.5,
        max_drop_level = 1,
        groupcaps = {
            crumbly = {
                maxlevel = 2,
                uses = 20,
                times = { [1]=1.60, [2]=1.20, [3]=0.80 }
            },
        },
        damage_groups = {fleshy=2},
    },
})

Groupcaps ist die Liste der unterstützten Grabungstypen für Grabungsknoten. Schadensgruppen dienen zur Steuerung der Art und Weise, wie Werkzeuge Objekte beschädigen; dies wird später im Kapitel Objekte, Spieler und Entities behandelt werden.