Choose a language de

Nodes, Items und Craften

Einführung

Neue Nodes, Craftitems und Rezepte zu erstellen sind Grundlagen von vielen Mods

Was sind Nodes und Craftitems?

Nodes, Craftitems und Tools sind alles Items. Ein Item ist etwas, das im Inventar gefunden werden kann - sogar wenn es im normalen Gameplay nicht möglich ist.

Ein Node ist ein Item, das platziert oder in der Welt gefunden werden kann. Jede Position muss belegt werden mit einem und nur einem Node - scheinbar leere Position sind normalerweise Luftnodes.

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

Ein Werkzeug ist wie ein Item, hat aber die Fähigkeit zu verschleißen. Wenn das Werkzeug benutzt wird, geht der Abnutzungsbalken nach unten, bis das Werkzeug zerbricht. Werkzeuge können auch nicht gestapelt werden. In Zukunft werden Craftitems und Werkzeuge wahrscheinlich verschmelzen, weil die Unterscheidung zwischen ihnen eher ausgedacht ist.

Items aufnehmen

Itemdefinitionen bestehen aus einen Itemnamen und einer Definitionstabelle. Die Definitionstabellen beinhalten Attribute, welche das Verhalten eines Items beeinflussen.

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

Itemnamen

jedes Item hat einen Itemnamen, welches auf sich verweist. Er sollte folgendes Format haben:

modname:itemname

Der Modname ist der Name der Mod in welcher das Item aufgenommen wird und der Itemname der Name des Items selbst. Der Itemname sollte auf die Quiddität eines Items hinweisen und kann nicht bereits registriert sein.

Sowohl modname als auch itemname sollten nur englische Kleinbuchstaben, Zahlen und Unterstriche enthalten.

Itemaliase

Items können auch Aliase haben, die auf ihren Namen zeigen. Ein Alias ist ein nachgemachter Itemname, der dazu führt, dass die Engine alle Aliase so behandelt als wären es Itemnamen. Es gibt hierfür zwei verbreitete Anwendungsmöglichkeiten:

  • Umbenennen von entfernten Items. Es kann unbekannte Items in der Welt oder im Inventar geben, wenn ein Gegenstand ohne Korrektur aus einen Mod entfernt wird.
  • Hinzufügen von Abkürzungen. /giveme dirt ist einfacher als /giveme default:dirt.

Ein Itemalias zu erstellen ist sehr 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 Aliasse 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 modname_itemname.png.
platziert werden. JPEG Texturen werden unterstüzt, aber sie unterstützen keine Transparenz und haben generell schlechte Qualität bei niedrigen Auflösungen. 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 eine Potenz zur Basis 2, beispielsweise 16, 32, 64 oder 128, sind. 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.

Erfassung eines Basis-Nodes

Die Einschreibung eines Nodes ist ähnlich zur Item-Registrierung, sie erfolgt aber mit einer anderen Funktion:

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

Die Eigenschaft tiles ist eine Tabelle mit Texturnamen, die der Node verwenden wird. Wenn es nur eine Textur gibt, wird diese Textur auf jeder Seite verwendet. Um eine andere Textur pro Seite zu erhalten, müssen Sie die Namen von 6 Texturen in dieser Reihenfolge angeben:

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 den meisten 3D-Computerspielen der Fall ist.

minetest.register_node("meinemod:diamant", {
    description = "Alien Diamant",
    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 abzuwefen, meinemod:diamant_fragment abwerfen
})

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

Crafting

Es gibt verschiedene Arten von Craftingrezepten, die durch die Eigenschaft type angedeutet wird.

  • 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 Items, die in Öfen verbrannt werden können.
  • tool_repair - Definiert Items, die mit Werkzeugen repariert werden können.

Craftingrezepte sind keine Items, daher gebrauchen sie keine eindeutigen Itemnamen um eindeutig identifiziert werden zu können.

Shaped

Shaped Rezepte sind solche, bei denen die Zutaten die richtige Form oder das richtige Muster haben müssen, um zu funktionieren. In dem folgenden Beispiel müssen die Fragmente in einem stuhlähnlichen Muster liegen, damit das Craften 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 Strings folgendermaßen 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 „type“ wird für Shaped Rezepte nicht benötigt, da „shaped“ der Standard-Craftingtyp ist.

Shapeless

Shapelesse 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 Craftinggitter 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 Quelltext ist, dass das Rezept nur ein Item im Vergleich zu einer Tabelle (zwischen geschweiften Klammern) beinhaltet. Sie haben optional auch einen “cooktime” Parameter, welcher definiert, wie lange die Items zu kochen brauchen. Wenn diese nicht gesetzt ist, ist sie grundsätzlich 3.

Das Rezept oben funktioniert, wenn der Kohlenode im Input-Slot ist, mit irgendeiner Form von Brennstoff darunter. Es stellt nach 10 Sekunden ein Diamant-Fragment her!

Dieser Typ ist eine Ergänzung zum cooking-Typ, 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 werden durch die Verwendung der groups-Eigenschaft in der Definitions-Tabelle definiert und haben einen dazugehörigen Wert.

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 Itemnamens verwendet werden, damit ein beliebiges Item aus der Gruppe verwendet werden kann.

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

Werkzeuge, Fähigkeiten und Abbautypen

Abbautypen sind Gruppen, die dazu benutzt werden, um zu definieren wie hart ein Node ist, wenn er von verschiedenen Werkzeugen abgebaut wird. Eine Abbautypgruppe mit einem höheren Wert bedeutet, dass der Node leichter und schneller abbaubar ist. Es ist möglich, mehrere Abbautypen zu kombinieren, um eine effizientere Nutzung von mehreren Werkzeugtypen zu erzielen. Ein Node ohne Abbautypen kann mit keinem Werkzeug abgebaut werden.

Gruppe Bestes Werkzeug Beschreibung
crumbly Schaufel 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 und Metallbleche
choppy Axt Kann mit scharfer Wirkung 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 Nodes 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 Werkzeugfä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 Abbautypen um Nodes abzubauen. Schadensgruppen (Damage Groups) dienen zur Steuerung der Art und Weise, wie Werkzeuge Objekte beschädigen; dies wird später im Kapitel Objekte, Spieler und Entities behandelt werden.