minetest_modding_book/_de/items/nodes_items_crafting.md

313 lines
12 KiB
Markdown
Raw Normal View History

---
2022-09-01 18:53:13 +03:00
title: Nodes, Items und Craften
2021-05-13 22:45:46 +03:00
layout: default
root: ../..
idx: 2.1
2022-09-01 18:53:13 +03:00
description: Benutze register_node, register_item und register_craft um zu lernen, wie man Nodes, Items und Rezepte erstellt.
2021-05-13 22:45:46 +03:00
redirect_from: /de/chapters/nodes_items_crafting.html
---
2021-05-13 23:01:45 +03:00
## Einführung <!-- omit in toc -->
2022-12-13 19:27:27 +03:00
Neue Nodes, Craftitems und Rezepte zu erstellen
2022-08-14 15:04:50 +03:00
sind Grundlagen von vielen Mods
2021-05-13 23:01:45 +03:00
2022-09-01 18:53:13 +03:00
- [Was sind Nodes und Craftitems?](#was-sind-nodes-und-craftitems)
2021-05-14 10:50:15 +03:00
- [Items erstellen](#items-erstellen)
2021-05-14 11:00:14 +03:00
- [Itemnamen](#itemnamen)
- [Itemaliase](#itemaliase)
2022-08-14 15:04:50 +03:00
- [Texturen](#texturen)
2022-09-01 18:53:13 +03:00
- [Erstellen von Basis-Nodes](#erstellen-von-basis-nodes)
2022-08-14 15:04:50 +03:00
- [Crafting](#crafting)
- [Shaped](#shaped)
- [Shapeless](#shapeless)
- [Cooking und Fuel](#cooking-und-fuel)
- [Gruppen](#gruppen)
- [Werkzeuge, Fähigkeiten und Grabungstypen](#werkzeuge-fähigkeiten-und-grabungstypen)
2022-09-01 18:53:13 +03:00
## Was sind Nodes und Craftitems?
2021-05-13 23:01:45 +03:00
2022-09-01 18:53:13 +03:00
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.
2021-05-13 23:01:45 +03:00
2022-09-01 18:53:13 +03:00
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 Luftblöcke.
2021-05-13 23:01:45 +03:00
2022-09-01 18:53:13 +03:00
Ein Craftitem kann nicht platziert werden. Man kann es nur im Inventar finden oder als gedropptes Item in der Welt.
2021-05-13 23:01:45 +03:00
2022-09-01 18:53:13 +03:00
Ein Werkzeug hat die Fähigkeit sich abzunutzen und hat normalerweise nicht standardmäßige Abbaufähigkeiten. In Zukunft werden Craftitems und Werkzeuge wahrscheinlich verschmelzen, weil die Unterscheidung zwischen ihnen eher ausgedacht ist.
2021-05-14 10:49:05 +03:00
## Items erstellen
2022-09-01 18:53:13 +03:00
Itemdefinitionen bestehen aus einen *Itemnamen* und einer *Definitionstabelle*. Die Definitionstabellen beinhalten Attribute, welche das Verhalten eines Items beeinflussen.
2021-05-14 10:49:05 +03:00
```lua
minetest.register_craftitem("modname:itemname", {
description = "Mein spezielles Item",
inventory_image = "modname_itemname.png"
})
```
2021-05-14 11:00:14 +03:00
### Itemnamen
2022-09-01 18:53:13 +03:00
jedes Item hat einen Itemnamen, welches auf sich verweist. Er sollte folgendes Format haben:
2021-05-14 11:00:14 +03:00
modname:itemname
### Itemaliase
2022-09-01 18:53:13 +03:00
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:
2021-05-14 11:06:11 +03:00
2022-09-01 18:53:13 +03:00
* 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`.
2021-05-14 11:25:47 +03:00
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.
```lua
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:
```lua
itemname = minetest.registered_aliases[itemname] or itemname
```
2021-06-03 20:06:01 +03:00
2022-08-14 15:04:50 +03:00
### Texturen
2021-06-03 20:06:01 +03:00
2022-12-13 19:27:27 +03:00
Texturen solten in den textures/ Pfad mit Namen im Format
2021-06-03 20:06:01 +03:00
`modname_itemname.png`.\\
2022-09-01 18:53:13 +03:00
platziert werden. JPEG Texturen werden unterstüzt, aber sie unterstützen keine Transparenz und haben generell
schlechte Qualität und eine niedrige Auflösung.
Es ist oft besser das PNG Format zu benutzen.
2021-06-03 20:06:01 +03:00
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.
2022-09-01 18:53:13 +03:00
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.
2021-06-03 20:06:01 +03:00
2022-09-01 18:53:13 +03:00
## Erstellen von Basis-Nodes
2021-11-07 00:36:23 +03:00
```lua
minetest.register_node("meinemod:diamant", {
description = "Alien Diamanten",
tiles = {"meinemod_diamant.png"},
is_ground_content = true,
groups = {cracky=3, stone=1}
})
```
2022-09-01 18:53:13 +03:00
Die Eigenschaft `tiles` ist eine Tabelle mit Texturnamen, die der Node verwenden wird.
2021-11-07 00:36:23 +03:00
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)
2022-09-01 18:53:13 +03:00
Denken Sie daran, dass +Y in Minetest nach oben zeigt, wie es in den meisten 3D-Computerspielen der Fall ist.
2021-11-07 00:36:23 +03:00
```lua
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
})
```
2022-09-01 18:53:13 +03:00
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.
2021-11-07 20:07:52 +03:00
## Crafting
2022-09-01 18:53:13 +03:00
Es gibt verschiedene Arten von Craftingrezepten, die durch die Eigenschaft `type` angezeigt werden.
2021-11-07 20:07:52 +03:00
* 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.
2022-09-01 18:53:13 +03:00
Craftingrezepte sind keine Gegenstände, daher verwenden sie keine eindeutigen Itemnamen um sie zu identifizieren.
2021-11-07 20:07:52 +03:00
2022-03-01 14:05:28 +03:00
### Shaped
2022-09-01 18:53:13 +03:00
Shaped Rezepte sind Rezepte, bei denen die Zutaten die richtige Form oder das richtige
2022-03-01 14:05:28 +03:00
Muster haben müssen, um zu funktionieren. In dem folgenden Beispiel müssen die Fragmente in einem
2022-09-01 18:53:13 +03:00
stuhlähnlichen Muster liegen, damit das Crafting funktioniert.
2022-03-01 14:05:28 +03:00
```lua
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.
2022-09-01 18:53:13 +03:00
Wenn diese leere Spalte nicht erforderlich sein sollte, können die leeren Strings
folgendermaßen weggelassen werden:
2022-03-01 14:05:28 +03:00
```lua
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"}
}
})
```
2022-09-01 18:53:13 +03:00
Das Feld "type" wird für Shaped Rezepte nicht benötigt, da "shaped" der
Standard-Craftingtyp ist.
2022-03-01 14:05:28 +03:00
### Shapeless
2022-08-14 13:40:30 +03:00
Shapeless Rezepte sind eine Art von Rezepten, bei denen es nicht darauf ankommt
2022-03-01 14:05:28 +03:00
wo die Zutaten platziert werden, sondern nur, dass sie da sind.
```lua
minetest.register_craft({
type = "shapeless",
output = "meinemod:diamant 3",
recipe = {
"meinemod:diamant_fragment",
"meinemod:diamant_fragment",
"meinemod:diamant_fragment",
},
})
```
2022-08-14 13:40:30 +03:00
### 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
```lua
minetest.register_craft({
type = "cooking",
output = "meinemod:diamant_fragment",
recipe = "default:coalblock",
cooktime = 10,
})
```
2022-12-13 19:27:27 +03:00
Der einzige wirklich Unterschied im Code ist, dass das Rezept nur ein Item
2022-09-01 18:53:13 +03:00
im Vergleich zu einer Tabelle (zwischen geschweiften Klammern) beinhaltet.
Sie haben optional auch einen "cooktime" Parameter, welcher
2022-08-14 13:40:30 +03:00
definiert wie lange die Items zu kochen brauchen.
Wenn dies nicht gesetzt ist, ist der Standard 3.
2022-12-13 19:27:27 +03:00
Das Rezept oben funktioniert, wenn der Kohlenode im Input-Slot ist,
2022-08-14 13:40:30 +03:00
mit irgendeiner Form von Brennstoff darunter.
2022-09-01 18:53:13 +03:00
Es stellt nach 10 Sekunden ein Diamant-Fragment her!
2022-08-14 13:40:30 +03:00
2022-09-01 18:53:13 +03:00
Dieser Typ ist eine Ergänzung zum Kochtyp, da er definiert,
2022-08-14 13:40:30 +03:00
was in Öfen und anderen Kochgeräten aus Mods verbrannt werden kann.
```lua
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.
2022-09-01 18:53:13 +03:00
Gruppen werden durch die Verwendung der `groups`-Eigenschaft in der Definitions-Tabelle definiert
und haben einen dazugehörigen Wert.
2022-08-14 13:40:30 +03:00
```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.
2022-09-01 18:53:13 +03:00
Zweitens können Gruppen in einem Handwerksrezept anstelle eines Itemnamens verwendet werden, damit
ein beliebiges Item aus der Gruppe verwendet werden kann.
2022-08-14 13:40:30 +03:00
```lua
minetest.register_craft({
type = "shapeless",
output = "meinemod:diamant_ding 3",
recipe = {"group:holz", "mymod:diamant"}
})
```
2022-08-14 15:04:50 +03:00
## Werkzeuge, Fähigkeiten und Grabungstypen
Dig types are groups which are used to define how strong a node is when dug
with different tools.
2022-09-01 18:53:13 +03:00
Grabungstypen sind Gruppen, die dazu benutzt werden, um zu definieren wie stark ein Node ist, wenn er
2022-08-14 15:04:50 +03:00
von verschiedenen Werkzeugen abgebaut wird.
2022-09-01 18:53:13 +03:00
Eine Grabtypgruppe mit einem höheren Wert bedeutet, dass der Node leichter
2022-08-14 15:04:50 +03:00
und schneller abzubauen ist.
Es ist möglich, mehrere Grabtypen zu kombinieren, um eine effizientere Nutzung
von mehreren Werkzeugtypen zu erzielen.
2022-09-01 18:53:13 +03:00
Ein Node ohne Grabtypen kann mit keinem Werkzeug abgebaut werden.
2022-08-14 15:04:50 +03:00
| Gruppe | Bestes Werkzeug | Beschreibung |
|---------|-----------------|-------------|
2022-09-01 18:53:13 +03:00
| crumbly | Schaufel | Erde, Sand |
2022-08-14 15:04:50 +03:00
| cracky | Spitzhacke | Zähes (aber brüchiges) Material wie Stein |
| snappy | *irgendeins* | Kann mit feinen Werkzeugen geschnitten werden;<br>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 <br>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
2022-09-01 18:53:13 +03:00
schwächere Werkzeuge daran zu hindern, härtere Nodes zu graben.
Es ist sehr üblich, dass Werkzeuge alle Grabtypen in ihren Fähigkeiten enthalten.
2022-08-14 15:04:50 +03:00
Die weniger geeigneten haben dabei sehr ineffiziente Eigenschaften.
2022-12-13 19:27:27 +03:00
Wenn der Gegenstand, den ein Spieler gerade trägt, keine explizite Werkzeugfähigkeit
2022-09-01 18:53:13 +03:00
hat, dann wird stattdessen die Fähigkeit der aktuellen Hand verwendet.
2022-08-14 15:04:50 +03:00
```lua
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},
},
})
```
2022-09-01 18:53:13 +03:00
Groupcaps ist die Liste der unterstützten Grabungstypen für Grabungsnodes.
Schadensgruppen (Damage Groups) dienen zur Steuerung der Art und Weise, wie Werkzeuge Objekte beschädigen; dies wird
2022-08-14 15:09:33 +03:00
später im Kapitel Objekte, Spieler und Entities behandelt werden.