Merge branch 'master' of gitlab.com:debiankaios/minetest_modding_book

This commit is contained in:
debiankaios 2022-09-18 17:45:46 +02:00
commit d52ac03d5d
6 changed files with 218 additions and 273 deletions

View File

@ -13,6 +13,7 @@ idx: 0.1
<span>von <a href="https://rubenwardy.com" rel="author">rubenwardy</a></span>
<span>Editiert von <a href="http://rc.minetest.tv/">Shara</a></span>
<span>Übersetzt von von <a href="http://debiankaios.de/">debiankaios</a></span>
<span>Korrekturgelessen von <a href="https://jojokorpi.ddns.net/">jjk1</a></span>
</header>
## Einleitung
@ -30,7 +31,7 @@ oder [in HTML form downloadbar](https://gitlab.com/rubenwardy/minetest_modding_b
Haben Sie einen Fehler bemerkt oder möchten Sie ein Feedback geben? Teilen Sie mir das bitte mit.
* Erstelle eine [GitLab Issue](https://gitlab.com/rubenwardy/minetest_modding_book/-/issues).
* Poste es in der [Forum Topic](https://forum.minetest.net/viewtopic.php?f=14&t=10729).
* Poste es im [Forum Topic](https://forum.minetest.net/viewtopic.php?f=14&t=10729).
* [Kontaktiere mich](https://rubenwardy.com/contact/).
* Lust Mitzumachen?
[Read the README](https://gitlab.com/rubenwardy/minetest_modding_book/-/blob/master/README.md).

View File

@ -1,5 +1,5 @@
---
title: Block und Item Callbacks
title: Node und Item Callbacks
layout: default
root: ../..
idx: 2.15
@ -8,11 +8,11 @@ description: Erfahren sie über callbacks, Aktionen, und Ereignissen, einschlie
## Einleitung <!-- omit in toc -->
Minetest verwendet hauptsächlich ein Callback-basiertes Modding-Design. Ein Rückruf ist eine Funktion
Minetest verwendet hauptsächlich ein Callback-basiertes Modding-Design. Ein Callback ist eine Funktion,
die Sie an eine API übergeben und die aufgerufen wird, wenn ein Ereignis eintritt. Zum Beispiel können Sie
eine Funktion `on_punch` in einer Node-Definition angeben, die aufgerufen wird, wenn ein Spieler
einen Knoten anstößt. Es gibt auch globale Callbacks wie
`minetest.register_on_punchnode`, um Ereignisse für alle Knoten zu empfangen.
einen Node anstößt. Es gibt auch globale Callbacks wie
`minetest.register_on_punchnode`, um Ereignisse für alle Nodes zu empfangen.
- [Item Callbacks](#item-callbacks)
- [on_use](#on_use)
@ -20,30 +20,30 @@ einen Knoten anstößt. Es gibt auch globale Callbacks wie
- [on_drop](#on_drop)
- [after_use](#after_use)
- [item_place vs place_item](#item_place-vs-place_item)
- [Block Callbacks](#block-callbacks)
- [Rechtsklick und Platzieren eines Blockes](#rechtsklick-und-platzieren-eines-blockes)
- [Node Callbacks](#node-callbacks)
- [Rechtsklick und Platzieren eines Nodes](#rechtsklick-und-platzieren-eines-nodes)
- [Schlagen und abbauen](#schlagen-und-abbauen)
- [...und mehr!](#und-mehr)
## Item Callbacks
Wenn ein Spieler einen Block, einen Handwerksgegenstand oder ein Werkzeug in seinem Inventar hat, kann er folgende Ereignisse auslösen
Wenn ein Spieler einen Node, einen Handwerksgegenstand oder ein Werkzeug in seinem Inventar hat, kann er folgende Ereignisse auslösen
bestimmte Ereignisse:
| Callback | Standard-Bindung | Standard Wert |
|------------------|-------------------------------|----------------------------------------------|
| on_use | links-click | nil |
| on_place | rechts-click auf einen Block | `minetest.item_place` |
| on_secondary_use | rechts-click auf keinen Block | `minetest.item_secondary_use` (does nothing) |
| on_place | rechts-click auf einen Node | `minetest.item_place` |
| on_secondary_use | rechts-click auf keinen Node | `minetest.item_secondary_use` (does nothing) |
| on_drop | Q | `minetest.item_drop` |
| after_use | Abbauen eines Blockes | nil |
| after_use | Abbauen eines Nodes | nil |
### on_use
Mit einem Verwendungsrückruf wird verhindert, dass das Item zum abbauen von Blöcken verwendet wird. Eine häufige
Verwendung des Verwendungsrückrufs ist für Lebensmittel:
Mit einem on_use Callback wird verhindert, dass das Item zum abbauen von Blöcken verwendet wird. Eine häufige
Verwendung des on_use Callback ist für Lebensmittel:
```lua
minetest.register_craftitem("meinemod:matschekuchen", {
@ -58,7 +58,7 @@ Punkte, die durch den Verzehr dieser Nahrung geheilt werden. Jedes Herzsymbol, d
zwei Hitpoints wert. Ein Spieler kann in der Regel bis zu 10 Herzen haben, was gleichbedeutend ist mit
20 Hitpoints.
minetest.item_eat() ist eine Funktion, die eine Funktion zurückgibt und diese als on_use-Rückruf. Das bedeutet, dass der obige Code dem hier entspricht:
minetest.item_eat() ist eine Funktion, die eine Funktion zurückgibt und diese als on_use Callback. Das bedeutet, dass der obige Code dem hier entspricht:
```lua
minetest.register_craftitem("meinemod:matschekuchen", {
@ -76,29 +76,29 @@ Wenn man versteht, wie item_eat funktioniert, indem es einfach eine Funktion zur
### on_place und on_secondary_use
Der Unterschied zwischen `on_place` und `on_secondary_use` ist, dass `on_place` aufgerufen wird,
wenn der Spieler auf einen Knoten zeigt und `on_secondary_use`, wenn der
wenn der Spieler auf einen Node zeigt und `on_secondary_use`, wenn der
Spieler dies nicht tut.
Beide Callbacks werden für alle Arten von Items aufgerufen. `on_place` ist standardmäßig auf die
Funktion `minetest.item_place`, die den Aufruf des `on_rightclick`
Callback des angezeigten Knotens aufruft oder den geschwungenen Gegenstand platziert, wenn es ein Knoten ist.
Callback des angezeigten Nodes aufruft oder das gehaltene Item platziert, wenn es ein Node ist.
### on_drop
on_drop wird aufgerufen, wenn der Spieler einen Gegenstand fallen lassen will, zum Beispiel mit
die Abwurftaste (Q) oder durch Ziehen außerhalb des Inventars. Es wird standardmäßig die Funktion
`minetest.item_drop`, die das Fallenlassen des Gegenstandes übernimmt.
der Abwurftaste (Q) oder durch herausziehen aus dem Inventar. Es wird standardmäßig die Funktion
`minetest.item_drop` verwendet, die das Fallenlassen des Gegenstandes übernimmt.
### after_use
`after_use` wird beim abbauen eines Blockes aufgerufen und ermöglicht es Ihnen, dass die Art der Abnutzung
`after_use` wird beim abbauen eines Nodes aufgerufen und ermöglicht es Ihnen, dass die Art der Abnutzung
auf ein Werkzeug angewendet wird. Wenn after_use nicht existiert, dann ist es das gleiche wie:
```lua
after_use = function(itemstack, benutzer, block, abbauparams)
itemstack:add_wear(abbauparams.wear)
after_use = function(itemstack, user, node, digparams)
itemstack:add_wear(digparams.wear)
return itemstack
end
```
@ -106,7 +106,7 @@ end
## item_place vs place_item
Die API von Minetest enthält viele verschiedene integrierte Callback-Implementierungen, zur Benutzung von ihnen. Diese Rückrufe werden mit dem Elementtyp zuerst benannt, zum Beispiel,
Die API von Minetest enthält viele verschiedene integrierte Callback-Implementierungen, die Sie verwenden können. Diese Callbacks werden mit dem Elementtyp zuerst benannt, zum Beispiel,
`minetest.item_place` und `minetest.node_dig`. Einige Callback-Implementierungen werden
direkt verwendet, während einige Funktionen sind, die den Rückruf zurückgeben:
@ -124,74 +124,74 @@ haben aber das Verb vorangestellt. Beispiele sind `minetest.place_item` und
ähnlichen Effekt wie Spieler.
## Block Callbacks
## Node Callbacks
Wenn sich ein Block in einem Inventar befindet, verwendet er, wie oben beschrieben, Item Callbacks. Wenn
ein Knoten in der Welt platziert ist, verwendet er Block Callbacks. Es gibt eine ganze Menge von
Block Callbacks, zu viele, um sie in diesem Buch zu besprechen. Allerdings werden einige von ihnen
später in diesem Buch besprochen.
Wenn sich ein Node in einem Inventar befindet, verwendet er, wie oben beschrieben, Item Callback. Wenn
ein Node in der Welt platziert ist, verwendet er Node Callbacks. Es gibt eine ganze Menge von
Node Callbacks, zu viele, um sie in diesem Buch zu behandeln. Allerdings werden einige von ihnen
später in diesem Buch behandelt.
Einige der Rückrufe beziehen sich auf Blockoperationen wie das Platzieren und
Entfernen aus der Welt. Es ist wichtig zu beachten, dass Blockoperationen-Callbacks
wie diese nicht von bulk changes aufgerufen werden - also solchen, die eine große Anzahl von
Blöcken auf einmal setzen - aus Leistungsgründen nicht aufgerufen werden. Daher kann man sich nicht darauf verlassen, dass diese
Rückrufe immer aufgerufen werden.
Einige der Callbacks beziehen sich auf Nodeoperationen wie das Platzieren und
Entfernen aus der Welt. Es ist wichtig zu beachten, dass Nodeoperationen-Callbacks
wie diese aus Leistungsgründen nicht von bulk changes - also solchen, die eine große Anzahl von
Blöcken auf einmal setzen - aufgerufen werden. Daher kann man sich nicht darauf verlassen, dass diese
Callbacks immer aufgerufen werden.
### Rechtsklick und Platzieren eines Blockes
### Rechtsklick und Platzieren eines Nodes
Wenn der Benutzer mit der rechten Maustaste auf ein Element klickt, während er auf einen Block zeigt, wird der Callback des Elements
`on_place`-Callback aufgerufen. Standardmäßig ist dieser auf `minetest.item_place` gesetzt.
Wenn der gezeigte Knoten einen `on_rightclick` Callback hat und sneak (shift) gehalten wird,
Wenn der Benutzer mit der rechten Maustaste auf ein Item klickt, während er auf einen Node zeigt, wird der Callback
`on_place` des Items aufgerufen. Standardmäßig ist dieser auf `minetest.item_place` gesetzt.
Wenn der gezeigte Node einen `on_rightclick` Callback hat und sneak (shift) gehalten wird,
dann wird der `on_rightclick` Callback aufgerufen. Andernfalls wird `minetest.item_place`
den Knoten platzieren.
den Node platzieren.
Das Platzieren eines Blockes ruft sowohl `on_construct` als auch `after_place_node` auf.
`on_construct` wird von jedem Block-Plazier-Ereignis aufgerufen, das nicht in Bulk war und wird nur
die Position und den Wert des Blockes gegeben. `after_place_node` wird nur von node
Das Platzieren eines Nodes ruft sowohl `on_construct` als auch `after_place_node` auf.
`on_construct` wird von jedem Node-Platzier-Ereignis aufgerufen, das nicht in Bulk war und es wird nur
die Position und den Wert des Nodes gegeben. `after_place_node` wird nur von node
place aufgerufen und hat daher mehr Informationen - wie den Placer und den Itemstack.
Es ist wichtig zu wissen, dass Spieler nicht die einzigen Objekte sind, die
Blöcke platzieren können; es ist üblich, dass auch Mobs und Mods Blöcke platzieren können. Um dies zu berücksichtigen,
`Placer` kann ein Spieler, eine Entity oder nil sein.
Blöcke platzieren können; es ist üblich, dass auch Mobs und Mods Blöcke platzieren können. `Placer` kann ein Spieler, eine Entity oder nil sein.
```lua
minetest.register_node("meinemod:meinblock", {
on_rightclick = function(pos, block, clicker, itemstack, angeschautes_ding)
minetest.register_node("mymod:mynode", {
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if clicker:is_player() then
minetest.chat_send_player(clicker:get_player_name(), "Hallo Welt!")
end
end,
on_construct = function(pos, block)
on_construct = function(pos, node)
local meta = minetest.get_meta(pos)
meta:set_string("infotext", "Mein Block!")
end,
after_place_node = function(pos, plazierer, itemstack, angeschautes_ding)
-- Stellen Sie sicher, dass Sie den Plazierer überprüfen
if plazierer and plazierer:is_player() then
after_place_node = function(pos, placer, itemstack, pointed_thing)
-- Überprüfen des Platzierers
if placer and placer:is_player() then
local meta = minetest.get_meta(pos)
meta:set_string("besitzer", plazierer:get_player_name())
meta:set_string("owner", placer:get_player_name())
end
end,
})
```
### Schlagen und abbauen
Schlagen bedeutet, dass der Spieler kurz mit der linken Maustaste klickt. Wenn der benutze Gegenstand
einen `on_use` Callback hat, wird dieser aufgerufen. Andernfalls wird der `on_punch`
Callback auf dem angezeigten Block aufgerufen.
Callback auf dem angezeigten Node aufgerufen.
Wenn der Spieler versucht, einen Block abzubauen, wird der `on_dig` Callback auf dem Knoten aufgerufen.
Wenn der Spieler versucht, einen Node abzubauen, wird der `on_dig` Callback auf dem Node aufgerufen.
Dieser ist standardmäßig auf `minetest.node_dig` eingestellt, der den Gebietsschutz prüft, das
das Werkzeug verschleißt, den Block entfernt und den `after_dig_node` Callback ausführt.
das Werkzeug verschleißt, den Node entfernt und den `after_dig_node` Callback ausführt.
```lua
minetest.register_node("meinemod:meinblock", {
on_punch = function(pos, block, schlaeger, angeschautes_ding) -- ä wird außer in strings und Kommentaren zu ae
if schlaeger:is_player() then
minetest.chat_send_player(clicker:get_player_name(), "Au!")
minetest.register_node("meinemod:meinnode", {
on_punch = function(pos, node, puncher, pointed_thing)
if puncher:is_player() then
minetest.chat_send_player(puncher:get_player_name(), "Au!")
end
end,
})

View File

@ -9,17 +9,16 @@ redirect_from: /de/chapters/creating_textures.html
## Einleitung <!-- omit in toc -->
Die Fähigkeit, Texturen zu erstellen und zu optimieren, ist eine sehr nützliche Fähigkeit bei der
Entwicklung für Minetest.
Es gibt viele Techniken, die für die Arbeit an Pixel-Art-Texturen relevant sind,
Bei der Entwicklung für Minetest ist es sehr nützlich, Texturen zu erstellen und optimieren zu können.
Es gibt viele Techniken, die für die Arbeit an Pixel-Art-Texturen relevant sind
und das Verständnis dieser Techniken wird
die Qualität der von Ihnen erstellten Texturen erheblich verbessern.
Detaillierte Ansätze zur Erstellung guter Pixelkunst liegen außerhalb des Rahmens
Detaillierte Ansätze zur Erstellung guter Pixel-Art liegen außerhalb des Rahmens
dieses Buches, stattdessen werden nur die wichtigsten Grundtechniken
behandelt werden.
Es sind viele [gute Online-Tutorials](http://www.photonstorm.com/art/tutorials-art/16x16-pixel-art-tutorial)
zur Verfügung, die die Pixelkunst viel detaillierter behandeln.
zur Verfügung, die die Pixel-Art viel detaillierter behandeln.
- [Techniken](#techniken)
- [Nutzung des Stiftes](#nutzung-des-stiftes)
@ -36,7 +35,7 @@ zur Verfügung, die die Pixelkunst viel detaillierter behandeln.
### Nutzung des Stiftes
Das Stiftwerkzeug ist in den meisten Editoren verfügbar. Wenn es auf die kleinste Größe eingestellt ist,
können Sie damit ein Pixel nach dem anderen bearbeiten, ohne andere Teile des Bildes zu
können Sie damit einen Pixel nach dem anderen bearbeiten, ohne andere Teile des Bildes zu
ändern. Indem Sie die Pixel einzeln bearbeiten, schaffen Sie klare
und scharfe Texturen ohne ungewollte Unschärfen. Außerdem bietet es Ihnen ein hohes
Maß an Präzision und Kontrolle.
@ -49,38 +48,37 @@ korrekt aus.
<!-- IMAGE NEEDED - cobblestone that tiles correctly -->
Wenn Sie die Kanten nicht richtig anpassen, ist das Ergebnis weit weniger ansprechend
ansehnlich.
Wenn Sie die Kanten nicht richtig anpassen, ist das Ergebnis weit weniger ansprechend.
<!-- IMAGE NEEDED - node that doesn't tile correctly -->
### Transparenz
Transparenz ist wichtig bei der Erstellung von Texturen für fast alle Craftitems
und einige Knoten, wie z. B. Glas.
und einige Nodes, wie z. B. Glas.
Nicht alle Editoren unterstützen Transparenz, also stellen Sie sicher, dass Sie einen
Editor, der für die Texturen, die Sie erstellen möchten, geeignet ist.
### Farbpaletten
Die Verwendung einer einheitlichen Farbpalette ist ein einfacher Weg, um Ihre Kunst viel besser aussehen zu lassen.
Es ist eine gute Idee, eine Palette mit einer begrenzten Anzahl von Farben zu verwenden, vielleicht 32
höchstens. Vorgefertigte Paletten finden Sie unter
Die Verwendung einer einheitlichen Farbpalette ist ein einfacher Weg, um Ihre Texturen viel besser aussehen zu lassen.
Es ist eine gute Idee, eine Palette mit einer begrenzten Anzahl von Farben zu verwenden, vielleicht höchstens 32.
Vorgefertigte Paletten finden Sie unter
[lospec.com](https://lospec.com/palette-list).
## Editore
### MS Paint
MS Paint ist ein einfacher Editor, der für einfache Texturen Design nützlich sein kann;
MS Paint ist ein einfacher Editor, der für einfaches Texturendesign nützlich sein kann;
allerdings unterstützt er keine Transparenz.
Dies spielt normalerweise keine Rolle, wenn Sie Texturen für die Seiten von Knotenpunkten erstellen,
Dies spielt normalerweise keine Rolle, wenn Sie Texturen für die Seiten von Nodes erstellen,
aber wenn Sie Transparenz in Ihren Texturen benötigen, sollten Sie einen
anderen Editor wählen.
### Aseprite / LibreSprite
[Aseprite](https://www.aseprite.org/) ist ein proprietärer Pixelkunst-Editor.
[Aseprite](https://www.aseprite.org/) ist ein proprietärer Pixel-Art-Editor.
Er enthält standardmäßig eine Menge nützlicher Funktionen wie Farbpaletten und
Animationswerkzeuge.
@ -99,4 +97,4 @@ Bei der Verwendung von GIMP kann das Bleistift-Werkzeug aus der Toolbox ausgewä
<img src="{{ page.root }}//static/pixel_art_gimp_pencil.png" alt="Pencil in GIMP">
</figure>
Es ist außerdem ratsam, das Kontrollkästchen Harte Kante für das Radiergummi-Werkzeug zu aktivieren.
Es ist außerdem ratsam, das Kontrollkästchen "Harte Kanten" für das Radiergummi-Werkzeug zu aktivieren.

View File

@ -3,7 +3,7 @@ title: ItemStacks und Inventare
layout: default
root: ../..
idx: 2.4
description: Manipuliere InvRefs und ItemStacks
description: Manipulieren von InvRefs und ItemStacks
redirect_from:
- /de/chapters/inventories.html
- /de/chapters/itemstacks.html
@ -14,7 +14,7 @@ redirect_from:
## Einleitung <!-- omit in toc -->
In diesem Kapitel werden Sie lernen, wie man Inventare verwendet und manipuliert, egal
ob es sich um ein Spielerinventar, ein Blockinventar oder ein freistehendes Inventar handelt.
ob es sich um ein Spielerinventar, ein Nodeinventar oder ein freistehendes Inventar handelt.
- [Was sind ItemStacks und Inventare?](#was-sind-itemstacks-und-inventare)
- [ItemStacks](#itemstacks)
@ -37,7 +37,7 @@ Ein *Inventar* ist eine Sammlung von *Inventarlisten*, von denen jede
ein 2D-Gitter aus ItemStacks ist.
Inventarlisten werden im Kontext von Inventaren einfach *Listen* genannt.
Der Sinn eines Inventars ist es, mehrere Raster zu ermöglichen, wenn Spieler
und Blöcke nur maximal ein Inventar haben.
und Nodes nur maximal ein Inventar haben.
## ItemStacks
@ -46,7 +46,7 @@ ItemStacks haben vier Komponenten: name, count, wear und metadata.
Der Itemname kann der Itemname eines registrierten Items, ein Alias oder ein
unbekannter Itemname sein.
Unbekannte Items treten häufig auf, wenn Benutzer Mods deinstallieren oder wenn Mods
Items ohne Vorsichtsmaßnahmen entfernen, z. B. durch die Registrierung von Aliasen.
Items ohne Vorsichtsmaßnahmen, z. B. durch die Registrierung von Aliasen, entfernen.
```lua
print(stack:get_name())
@ -57,7 +57,7 @@ if not stack:is_known() then
end
```
Der Anzahl wird immer 0 oder größer sein.
Die Anzahl wird immer 0 oder größer sein.
Bei normalem Spielverlauf sollte die Anzahl nicht größer sein als die maximale
Stackgröße des Gegenstands - `stack_max`.
Allerdings können Admin-Befehle und fehlerhafte Mods dazu führen, dass Stacks die maximale Größe überschreiten.
@ -88,30 +88,29 @@ ItemStack({ name = "default:wood", count = 10 })
Item-Metadaten sind ein unbegrenzter Schlüssel-Wert-Speicher für Daten über das Item.
Schlüssel-Wert bedeutet, dass Sie einen Namen (den sogenannten key) verwenden, um auf die Daten (den sogenannten value) zuzugreifen.
Einige Schlüssel haben eine besondere Bedeutung, wie z. B. `Beschreibung`, die verwendet wird, um eine pro Stack
Beschreibung.
Einige Keys haben eine besondere Bedeutung, wie z. B. `description`, welches für eine per-Item-Beschreibung verwendet wird.
Dies wird im Kapitel über Metadaten und Speicherung ausführlicher behandelt.
## Inventarstandorte
Ein Inventarstandort ist der Ort und die Art und Weise, wie das Inventar gespeichert wird.
Es gibt drei Arten von Inventarstandorten: Spieler, Blöcke und freistehend.
Es gibt drei Arten von Inventarstandorten: Spieler, Nodes und freistehend.
Ein Inventar ist direkt an einen und nur einen Ort gebunden - eine Aktualisierung des
Inventars wird es sofort aktualisieren.
Blockinventare beziehen sich auf die Position eines bestimmten Blockes, z. B. einer Truhe.
Der Block muss geladen werden, da er in den [Block-Metadaten](../map/storage.html#metadata) gespeichert ist.
Nodeinventare beziehen sich auf die Position eines bestimmten Nodes, z. B. einer Truhe.
Der Node muss geladen werden, da er in den [Node-Metadaten](../map/storage.html#metadata) gespeichert ist.
```lua
local inv = minetest.get_inventory({ type="node", pos={x=1, y=2, z=3} })
```
Auf diese Weise erhält man eine *Inventar-Referenz*, allgemein als *InvRef* bezeichnet.
Auf diese Weise erhält man eine *Inventar-Referenz*, auch als *InvRef* bekannt.
Inventar-Referenzen werden verwendet, um ein Inventar zu manipulieren.
*Referenz* bedeutet, dass die Daten nicht tatsächlich in diesem Objekt gespeichert sind,
sondern das Objekt aktualisiert die Daten direkt an Ort und Stelle.
Der Standort eines Inventarverweises kann wie folgt ermittelt werden:
Der Standort eines Inventar-Referenz kann wie folgt ermittelt werden:
```lua
local location = inv:get_location()
@ -126,7 +125,7 @@ local inv = minetest.get_inventory({ type="player", name="spieler1" })
local inv = player:get_inventory()
```
Ein freistehendes Inventar ist ein Inventar, das unabhängig von Spielern oder Blöcken ist.
Ein freistehendes Inventar ist ein Inventar, das unabhängig von Spielern oder Nodes ist.
Freistehende Inventare werden auch nicht bei einem Neustart gespeichert.
```lua
@ -146,26 +145,27 @@ Das zweite Argument nimmt eine Tabelle von Callbacks entgegen, die verwendet wer
um zu steuern, wie Spieler mit dem Inventar interagieren:
```lua
-- Eingabe nur freistehendes Inventar
minetest.create_detached_inventory("inventar_name", {
allow_move = function(inv, von_liste, von_index, zu_liste, zu_index, anzahl, player)
return anzahl -- erlaubt bewegen
-- Nur-Eingabefähiges freistehendes Inventar
minetest.create_detached_inventory("inventory_name", {
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
return count -- erlaubt bewegen
end,
allow_put = function(inv, listenname, index, stack, spieler)
return stack:get_count() -- erlaubt setzen
allow_put = function(inv, listname, index, stack, player)
return stack:get_count() -- erlaubt ablegen
end,
allow_take = function(inv, listenname, index, stack, spieler)
return 0 -- erlaubt es nicht zu nehmen
allow_take = function(inv, listname, index, stack, player)
return 0 -- erlaubt Nehmen nicht
end,
on_put = function(inv, listenname, index, stack, spieler)
minetest.chat_send_all(spieler:get_player_name() ..
on_put = function(inv, listname, index, stack, player)
minetest.chat_send_all(player:get_player_name() ..
" gab " .. stack:to_string() ..
" zu der Spendenkiste von " .. minetest.pos_to_string(spieler:get_pos()))
" In die Spendenkiste von " .. minetest.pos_to_string(player:get_pos()))
end,
})
```
Berechtigungsaufrufe - d.h. diejenigen, die mit `allow_` beginnen - geben die Anzahl
@ -177,7 +177,7 @@ Im Gegensatz dazu haben Aktionsrückrufe - beginnend mit `on_` - keinen Rückgab
Inventarlisten sind ein Konzept, das es ermöglicht, mehrere Raster an einem einzigen Ort zu speichern.
Dies ist besonders nützlich für den Spieler, da es eine Reihe von allgemeinen Listen
gibt die alle Spiele haben, wie das *Hauptinventar* und die *Handwerksplätze*.
gibt, die alle Spiele haben, wie das *Hauptinventar* und die *Craftingplätze*.
### Größe und Breite
@ -222,7 +222,7 @@ end
### Zu einer Liste hinzufügen
`add_item` fügt Items zu einer Liste hinzu (in diesem Fall `"main"`). Im folgenden
Beispiel, wird auch die maximale Stackgröße beachtet:
Beispiel wird auch die maximale Stackgröße beachtet:
```lua
local stack = ItemStack("default:stone 99")
@ -244,7 +244,7 @@ print("Nahm " .. genommen:get_count())
### Stacks manipulieren
Sie können einzelne Stacks ändern, indem Sie sie zuerst erhalten:
Sie können einzelne Stacks ändern, indem Sie sie zuerst auswählen:
```lua
local stack = inv:get_stack(listenname, 0)
@ -294,8 +294,8 @@ local max_nutzungen = 10
stack:add_wear(65535 / (max_nutzungen - 1))
```
Beim abbauen eines Blockes kann die Abnutzung des Werkzeugs von dem Block abhängen
der gegraben wird. Daher variiert max_nutzungen je nachdem, was gegraben wird.
Beim abbauen eines Nodes kann die Abnutzung des Werkzeugs von dem Node abhängen,
der abgebaut wird. Daher variiert max_nutzungen je nachdem, was abgebaut wird.
## Lua Tabellen
@ -336,8 +336,7 @@ Die Tabelle der Listen, die von `get_lists()` zurückgegeben wird, wird in diese
`get_list()` gibt eine einzelne Liste zurück, die lediglich eine Liste von ItemStacks ist.
Ein wichtiger Punkt ist, dass die obigen Set-Methoden die Größe der Listen nicht verändern.
Das bedeutet, dass Sie eine Liste löschen können, indem Sie sie auf eine leere Tabelle setzen, und sie wird nicht
verkleinert:
Das bedeutet, dass Sie eine Liste löschen können, indem Sie sie auf eine leere Tabelle setzen, ohne dass sie verkleinert wird:
```lua
inv:set_list("main", {})

View File

@ -1,5 +1,5 @@
---
title: Block Zeichnungstypen
title: Node Zeichnungstypen
layout: default
root: ../..
idx: 2.3
@ -9,29 +9,29 @@ redirect_from: /de/chapters/node_drawtypes.html
## Einleitung <!-- omit in toc -->
Die Methode, mit der ein Block gezeichnet wird, wird als *Zeichnungstyp* bezeichnet. Es gibt viele
verfügbare Zeichnungstypen. Das Verhalten eines Zeichnungstyp kann gesteuert werden
durch Angabe von Eigenschaften in der Blocktypdefinition gesteuert werden. Diese Eigenschaften
sind für alle Instanzen dieses Knotens festgelegt. Es ist möglich, einige Eigenschaften
pro Knoten zu steuern, indem man etwas namens `param2` verwendet.
Die Methode, mit der ein Node gezeichnet wird, wird als *Zeichnungstyp* bezeichnet. Es gibt viele
verfügbare Zeichnungstypen. Das Verhalten eines Zeichnungstyps kann
durch Angabe von Eigenschaften in der Nodetypdefinition gesteuert werden. Diese Eigenschaften
sind für alle Instanzen dieses Nodes festgelegt. Es ist möglich, einige Eigenschaften
pro Node zu steuern, indem man `param2` verwendet.
Im vorigen Kapitel wurde das Konzept der Blöcke und Items eingeführt, aber eine
vollständige Definition eines Blockes wurde nicht gegeben. Die Minetest-Welt ist ein 3D-Gitter aus
Positionen. Jede Position wird als Block bezeichnet und besteht aus dem Blocktyp
Im vorigen Kapitel wurde das Konzept der Nodes und Items eingeführt, aber eine
vollständige Definition eines Nodes wurde nicht gegeben. Die Minetest-Welt ist ein 3D-Gitter aus
Positionen. Jede Position wird als Node bezeichnet und besteht aus dem Nodetyp
(Name) und zwei Parametern (param1 und param2). Die Funktion
`minetest.register_node` (übersetzt `minetest.registriere_Block`)ist ein wenig irreführend, da sie nicht wirklich
einen Knoten registriert - sie registriert einen neuen *Typ* von Block.
`minetest.register_node` (übersetzt `minetest.registriere_node`)ist ein wenig irreführend, da sie nicht wirklich
einen Node registriert - sie registriert einen neuen *Typ* von Node.
Die Blockparameter werden verwendet, um zu steuern, wie ein Block individuell gerendert wird.
`param1` wird verwendet, um die Beleuchtung eines Blockes zu speichern, und die Bedeutung von
`param2` hängt von der Eigenschaft `paramtype2` der Blocktypdefinition ab.
Die Nodeparameter werden zum steuern, wie ein Nde individuell gerendert wird, verwendet.
`param1` wird verwendet, um die Beleuchtung eines Nodes zu speichern, und die Bedeutung von
`param2` hängt von der Eigenschaft `paramtype2` der Nodetypdefinition ab.
- [Würfelförmiger Block: Normale und allfaces](#würfelförmiger-block-normale-und-allfaces)
- [Glasartige Blöcke](#glasartige-blöcke)
- [Würfelförmiger Node: Normale und allfaces](#würfelförmiger-node-normale-und-allfaces)
- [Glasartige Nodes](#glasartige-nodes)
- [Glasartig gerahmt](#glasartig-gerahmt)
- [Airlike Nodes](#airlike-nodes)
- [Lighting and Sunlight Propagation](#lighting-and-sunlight-propagation)
- [Flüssige Blöcke](#flüssige-blöcke)
- [Flüssige Nodes](#flüssige-nodes)
- [Nodeboxen](#nodeboxen)
- [Wandgehaltene Nodeboxen](#wandgehaltene-nodeboxen)
- [Mesh Nodes](#mesh-nodes)
@ -41,7 +41,7 @@ Die Blockparameter werden verwendet, um zu steuern, wie ein Block individuell ge
- [Mehr Zeichnungstypen](#mehr-zeichnungstypen)
## Würfelförmiger Block: Normale und allfaces
## Würfelförmiger Node: Normale und allfaces
<figure class="right_image">
<img src="{{ page.root }}//static/drawtype_normal.png" alt="Normaler Zeichnungstyp">
@ -50,14 +50,14 @@ Die Blockparameter werden verwendet, um zu steuern, wie ein Block individuell ge
</figcaption>
</figure>
Der Zeichnungstyp normal wird normalerweise zum Rendern eines Würfelförmigen Blockes verwendet.
Wenn die Seite eines normalen Blockes an einer festen Seite anliegt, wird diese Seite nicht gerendert,
Der Zeichnungstyp normal wird typischerweise zum Rendern eines Würfelförmigen Nodes verwendet.
Wenn die Seite eines normalen Nodes an einer festen Seite anliegt, wird diese Seite nicht gerendert,
was zu einem großen Leistungsgewinn führt.
Im Gegensatz dazu wird der Zeichnungstyp allfaces immer noch die Innenseite darstellen, wenn er auf einen
soliden Block ist. Dies ist gut für Blöcke mit teilweise transparenten Seiten, wie z.B. den
Blatt-Block. Sie können den allfaces_optional drawtype verwenden, um den Benutzern die Möglichkeit zu geben, die
langsamere Zeichnen auszuschalten, in diesem Fall verhält er sich wie ein normaler Block.
soliden Node ist. Dies ist gut für Nodes mit teilweise transparenten Seiten, wie z.B. den
Blatt-Node. Sie können den allfaces_optional drawtype verwenden, um den Benutzern die Möglichkeit zu geben, die
langsamere Zeichnen auszuschalten, in diesem Fall verhält er sich wie ein normaler Node.
```lua
minetest.register_node("meinemod:diamant", {
@ -77,11 +77,11 @@ Hinweis: Der normale Zeichentyp ist der Standard-Zeichentyp, Sie müssen ihn als
angeben.
## Glasartige Blöcke
## Glasartige Nodes
Der Unterschied zwischen glasartigen(glasslike) und normalen Blöcken besteht darin, dass die Platzierung eines glasartigen Blockes
neben einem normalen Block platziert wird, nicht dazu führt, dass die Seite des normalen Blockes ausgeblendet wird.
Dies ist nützlich, weil glasartige Block dazu neigen, transparent zu sein, und daher die Verwendung eines normalen
Der Unterschied zwischen glasartigen(glasslike) und normalen Nodes besteht darin, dass die Platzierung eines glasartigen Nodes
neben einem normalen Node, nicht dazu führt, dass die Seite des normalen Nodes ausgeblendet wird.
Dies ist nützlich, weil glasartige Nodes in der Regel transparent sind und daher die Verwendung eines normalen
Drawtype dazu führen würde, dass man durch die Welt hindurchsehen kann.
<figure>
@ -106,8 +106,8 @@ minetest.register_node("default:obsidian_glass", {
### Glasartig gerahmt
Dies führt dazu, dass die Kante des Blockes mit einem 3D-Effekt um das ganze Ding herumgeht und nicht
als um einzelne Block, wie im Folgenden dargestellt:
Dies führt dazu, dass die Kante des Nodes mit einem 3D-Effekt um das ganze Ding herumgeht und nicht
um einen einzelnen Node, wie im Folgenden dargestellt:
<figure>
<img src="{{ page.root }}//static/drawtype_glasslike_framed.png" alt="Glasartig gerahmt Ränder">
@ -116,8 +116,8 @@ als um einzelne Block, wie im Folgenden dargestellt:
</figcaption>
</figure>
Sie können den Zeichnungstyp `glasslike_framed_optional` verwenden, um dem Benutzer die Möglichkeit zu geben, *opt-in*
in das gerahmte Erscheinungsbild.
Sie können den Zeichnungstyp `glasslike_framed_optional` verwenden, um dem Benutzer die Möglichkeit zu geben,
das gerahmte Erscheinungsbild manuell zu aktivieren.
```lua
minetest.register_node("default:glass", {
@ -126,16 +126,16 @@ minetest.register_node("default:glass", {
tiles = {"default_glass.png", "default_glass_detail.png"},
inventory_image = minetest.inventorycube("default_glass.png"),
paramtype = "light",
sunlight_propagates = true, -- Sonnenlicht kann durch den Block scheinen
sunlight_propagates = true, -- Sonnenlicht kann durch den Node scheinen
groups = {cracky = 3, oddly_breakable_by_hand = 3},
sounds = default.node_sound_glass_defaults()
})
```
## Luftartige Blöcke
## Luftartige Nodes
Diese Blöcke werden nicht gerendert und haben daher keine Texturen.
Diese Nodes werden nicht gerendert und haben daher keine Texturen.
```lua
minetest.register_node("meineluft:luft", {
@ -144,11 +144,11 @@ minetest.register_node("meineluft:luft", {
paramtype = "light",
sunlight_propagates = true,
walkable = false, -- Würde den Spieler mit dem Luftblock kollidieren lassen
pointable = false, -- Sie können den Block nicht auswählen
diggable = false, -- Sie können den Block nicht abbauen
buildable_to = true, -- Blöcke können diesen Block ersetzen
-- (Sie können einen Block platzieren und den Luftblock
walkable = false, -- Würde den Spieler mit dem Luftnode kollidieren lassen
pointable = false, -- Sie können den Node nicht auswählen
diggable = false, -- Sie können den Node nicht abbauen
buildable_to = true, -- Nodes können diesen Node ersetzen
-- (Sie können einen Node platzieren und den Luftnode
-- entfernen die früher einmal da waren)
air_equivalent = true,
@ -160,12 +160,12 @@ minetest.register_node("meineluft:luft", {
## Beleuchtung und Sonnenlichtausbreitung
Die Beleuchtung eines Blockes wird in param1 gespeichert. Um herauszufinden, wie man die
Seite eines Blockes zu schattieren hat, wird der Lichtwert des benachbarten Blockes verwendet.
Aus diesem Grund haben solide Blöcke keine Lichtwerte, da sie das Licht blockieren.
Die Beleuchtung eines Nodes wird in param1 gespeichert. Um herauszufinden, wie man die
Seite eines Nodes zu schattieren hat, wird der Lichtwert des benachbarten Nodes verwendet.
Aus diesem Grund haben solide Nodes keine Lichtwerte, da sie das Licht blockieren.
Standardmäßig lässt ein Blocktyp nicht zu, dass Licht in Blockinstanzen gespeichert wird.
Es ist normalerweise wünschenswert, dass einige Blöcke wie Glas und Luft in der Lage sind
Standardmäßig lässt ein Nodetyp nicht zu, dass Licht in Nodeinstanzen gespeichert wird.
Es ist normalerweise wünschenswert, dass einige Nodes wie Glas und Luft in der Lage sind,
Licht durchzulassen. Zu diesem Zweck müssen zwei Eigenschaften definiert werden:
```lua
@ -174,9 +174,9 @@ sunlight_propagates = true,
```
Die erste Zeile bedeutet, dass param1 in der Tat den Lichtwert speichert.
Die zweite Zeile bedeutet, dass das Sonnenlicht diesen Knoten durchlaufen sollte, ohne an Wert zu verlieren.
Die zweite Zeile bedeutet, dass das Sonnenlicht diesen Node durchlaufen sollte, ohne an Wert zu verlieren.
## Flüssige Blöcke
## Flüssige Nodes
<figure class="right_image">
<img src="{{ page.root }}//static/drawtype_liquid.png" alt="Flüssigkeiten Zeichnungstyp">
@ -185,7 +185,7 @@ Die zweite Zeile bedeutet, dass das Sonnenlicht diesen Knoten durchlaufen sollte
</figcaption>
</figure>
Jede Art von Flüssigkeit erfordert zwei Blockdefinitionen - eine für die Flüssigkeitsquelle und
Jede Art von Flüssigkeit erfordert zwei Nodedefinitionen - eine für die Flüssigkeitsquelle und
eine weitere für die fließende Flüssigkeit.
```lua
@ -221,12 +221,12 @@ minetest.register_node("default:water_source", {
},
--
-- Behavior
-- Verhalten
--
walkable = false, -- Der Spieler fällt durch
pointable = false, -- Der Spieler kann es nicht auswählen
diggable = false, -- Der Spieler kann es nicht abbauen
buildable_to = true, -- Blöcke können diesen Block ersetzen
buildable_to = true, -- Nodes können diesen Node ersetzen
alpha = 160,
@ -253,7 +253,7 @@ minetest.register_node("default:water_source", {
})
```
Fließende Blöcke haben eine ähnliche Definition, allerdings mit einem anderen Namen und einer anderen Animation.
Fließende Nodes haben eine ähnliche Definition, allerdings mit einem anderen Namen und einer anderen Animation.
Siehe `default:water_flowing` in der Standard-Mod in `minetest_game` für ein vollständiges Beispiel.
## Nodeboxen
@ -265,7 +265,7 @@ Siehe `default:water_flowing` in der Standard-Mod in `minetest_game` für ein vo
</figcaption>
</figure>
Mit Nodeboxen können Sie einen Block erstellen, der nicht würfelförmig ist, sondern
Mit Nodeboxen können Sie einen Node erstellen, der nicht würfelförmig ist, sondern
aus beliebig vielen Quadern besteht.
```lua
@ -289,13 +289,13 @@ Der wichtigste Teil ist die Nodebox-Tabelle:
{-0.5, 0, 0, 0.5, 0.5, 0.5}
```
Jede Zeile ist ein Quader, der zu einem einzigen Blockpunkt verbunden ist.
Jede Zeile ist ein Quader, der zu einem einzigen Nodepunkt verbunden ist.
Die ersten drei Zahlen sind die Koordinaten (von -0,5 bis einschließlich 0,5) der
der unteren, vorderen, linken Ecke, die letzten drei Zahlen sind die gegenüberliegende Ecke.
Sie haben die Form X, Y, Z, wobei Y für oben steht.
Du kannst den [NodeBoxEditor](https://forum.minetest.net/viewtopic.php?f=14&t=2840) benutzen um
Erstellen Sie Nodeboxen durch Ziehen der Kanten, das ist anschaulicher als die Arbeit von Hand.
Sie können den [NodeBoxEditor](https://forum.minetest.net/viewtopic.php?f=14&t=2840) benutzen um
Nodeboxen durch Ziehen der Kanten zu erstellen. Das ist anschaulicher als die Arbeit von Hand.
### Wandgehaltene Nodeboxen
@ -308,17 +308,17 @@ minetest.register_node("default:sign_wall", {
node_box = {
type = "wallmounted",
-- Ceiling
-- Decke
wall_top = {
{-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125}
},
-- Floor
-- Boden
wall_bottom = {
{-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125}
},
-- Wall
-- Wand
wall_side = {
{-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375}
}
@ -328,7 +328,7 @@ minetest.register_node("default:sign_wall", {
## Mesh Nodes
Nodeboxen sind zwar im Allgemeinen einfacher zu erstellen, doch sind sie insofern eingeschränkt, als
Nodeboxen sind zwar im Allgemeinen einfacher zu erstellen, doch sind sie insofern eingeschränkt, als dass
sie nur aus Quadern bestehen können. Nodeboxen sind außerdem nicht optimiert;
Innenflächen werden auch dann noch gerendert, wenn sie vollständig ausgeblendet sind.
@ -336,7 +336,7 @@ Eine Fläche ist eine ebene Oberfläche in einem Mesh(Netz). Eine innere Fläche
verschiedenen Nodeboxen überlappen, wodurch Teile des Nodebox-Modells
unsichtbar sind, aber dennoch gerendert werden.
So können Sie ein mesh node registrieren:
So können Sie ein Mesh Node registrieren:
```lua
minetest.register_node("mymod:meshy", {
@ -354,14 +354,14 @@ minetest.register_node("mymod:meshy", {
Vergewissern Sie sich, dass das Mesh in einem `models`-Verzeichnis verfügbar ist.
Meistens sollte sich das Mesh im eigenen Mod-Ordner befinden, aber es ist auch in Ordnung, wenn
ein Mesh zu verwenden, das von einem anderen Mod bereitgestellt wird, von dem du abhängig bist. Zum Beispiel kann ein Mod, der
ein Mesh zu verwenden, das von einer anderen Mod bereitgestellt wird, von dem sie abhängig ist. Zum Beispiel kann eine Mod, die
weitere Möbeltypen hinzufügt, das Modell einer grundlegenden
Möbel-Mod sein.
## Signlike Nodes
Signlike nodes sind flache Knoten, die an den Seiten anderer Knoten angebracht werden können.
Signlike Nodes sind flache Nodes, die an den Seiten anderer Nodes angebracht werden können.
Trotz des Namens dieses Zeichentyps verwenden Schilder in der Regel nicht signlike,
sondern verwenden stattdessen den Zeichnungstyp `Nodebox`, um einen 3D-Effekt zu erzielen. Der Zeichentyp `signlike`
wird jedoch häufig von Leitern verwendet.
@ -391,7 +391,7 @@ minetest.register_node("default:ladder_wood", {
</figcaption>
</figure>
Plantlike Nodes ziehen ihre Kacheln in einem X-ähnlichen Muster.
Plantlike Nodes zeichnen ihre Kacheln in einem X-ähnlichen Muster.
```lua
minetest.register_node("default:papyrus", {
@ -409,8 +409,7 @@ minetest.register_node("default:papyrus", {
## Firelike Nodes
Firelike ist ähnlich zu plantlike, mit der Ausnahme, dass es so konzipiert ist für
Wände und Decken.
Firelike ist ähnlich zu plantlike, mit der Ausnahme, dass es so konmzipiert ist, dass es auch an Wänden und Decken haften kann.
<figure>
<img src="{{ page.root }}//static/drawtype_firelike.png" alt="Firelike nodes">
@ -435,8 +434,8 @@ Dies ist keine vollständige Liste, es gibt noch weitere Arten:
* Fencelike
* Plantlike rooted - für Unterwasser-Pflanzen
* Raillike - für Schienen
* Torchlike - für 2D Wand/Boden/Decken-Blöcke.
Die Fackeln in Minetest Game verwenden zwei verschiedene Block-Definitionen von
* Torchlike - für 2D Wand/Boden/Decken-Nodes.
Die Fackeln in Minetest Game verwenden zwei verschiedene Node-Definitionen von
mesh nodes (default:torch und default:torch_wall).
Und lese immer [Lua API dokumentation](https://minetest.gitlab.io/minetest/nodes/#node-drawtypes)

View File

@ -1,25 +1,23 @@
---
title: Blöcke, Items und Craften
title: Nodes, 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.
description: Benutze register_node, register_item und register_craft um zu lernen, wie man Nodes, Items und Rezepte erstellt.
redirect_from: /de/chapters/nodes_items_crafting.html
---
## Einführung <!-- omit in toc -->
Neue Blöcke, Craftitems und Rezepte zu erstellen,
Neue Nodes, Craftitems und Rezepte zu erstellen
sind Grundlagen von vielen Mods
- [Was sind Blöcke und Craftitems?](#was-sind-blöcke-und-craftitems)
- [Was sind Nodes und Craftitems?](#was-sind-nodes-und-craftitems)
- [Items erstellen](#items-erstellen)
- [Itemnamen](#itemnamen)
- [Itemaliase](#itemaliase)
- [Texturen](#texturen)
- [Erstellen von Basis-Blöcken](#erstellen-von-basis-blöcken)
- [Aktionen und Callbacks](#aktionen-und-callbacks)
- [on_use](#onuse)
- [Erstellen von Basis-Nodes](#erstellen-von-basis-nodes)
- [Crafting](#crafting)
- [Shaped](#shaped)
- [Shapeless](#shapeless)
@ -27,19 +25,19 @@ sind Grundlagen von vielen Mods
- [Gruppen](#gruppen)
- [Werkzeuge, Fähigkeiten und Grabungstypen](#werkzeuge-fähigkeiten-und-grabungstypen)
## Was sind Blöcke und Craftitems?
## Was sind Nodes 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.
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 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 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.
Ein Craftitem kann nicht plazier werden man kann es nur im Inventar finden oder als gedropptes Item in der Welt.
Ein Craftitem kann nicht platziert 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.
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.
## Items erstellen
Item Definitionen bestehen aus einen *Itemnamen* und einer *Definitions Tabelle*. Die Definitions Tabelle beinhaltet Attribute welche das Verhalten eines Items beinflussen.
Itemdefinitionen bestehen aus einen *Itemnamen* und einer *Definitionstabelle*. Die Definitionstabellen beinhalten Attribute, welche das Verhalten eines Items beeinflussen.
```lua
minetest.register_craftitem("modname:itemname", {
@ -50,15 +48,15 @@ minetest.register_craftitem("modname:itemname", {
### Itemnamen
jedes Item hat ein Itemnamen welches auf sich verweist, es sollte folgendes Format haben:
jedes Item hat einen Itemnamen, welches auf sich verweist. Er 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:
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:
* 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`.
* 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 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.
@ -75,17 +73,17 @@ itemname = minetest.registered_aliases[itemname] or itemname
### Texturen
Texturen solten in den textures/ Pfad mit Namen im Format plaziert werden
Texturen solten in den textures/ Pfad mit Namen im Format
`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.
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.
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.
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
## Erstellen von Basis-Nodes
```lua
minetest.register_node("meinemod:diamant", {
description = "Alien Diamanten",
@ -94,15 +92,14 @@ minetest.register_node("meinemod:diamant", {
groups = {cracky=3, stone=1}
})
```
Die Eigenschaft `tiles` ist eine Tabelle mit Texturnamen, die der Blöcken verwenden wird.
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, 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.
Denken Sie daran, dass +Y in Minetest nach oben zeigt, wie es in den meisten 3D-Computerspielen der Fall ist.
```lua
minetest.register_node("meinemod:diamant", {
@ -122,55 +119,11 @@ minetest.register_node("meinemod:diamant", {
})
```
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:
```lua
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:
```lua
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.
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 Bastelrezepten, die durch die Eigenschaft `Typ` angezeigt werden
Eigenschaft angezeigt.
Es gibt verschiedene Arten von Craftingrezepten, die durch die Eigenschaft `type` angezeigt werden.
* shaped - Die Zutaten müssen sich an der richtigen Stelle befinden.
* shapeless - Es spielt keine Rolle, wo sich die Zutaten befinden,
@ -179,14 +132,13 @@ Eigenschaft angezeigt.
* 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.
Craftingrezepte sind keine Gegenstände, daher verwenden sie keine eindeutigen Itemnamen um sie zu identifizieren.
### Shaped
Shaped Rezepte sind Rezepte, bei denen die Zutaten in der richtigen Form oder
Shaped Rezepte sind Rezepte, 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 Handwerk funktioniert.
stuhlähnlichen Muster liegen, damit das Crafting funktioniert.
```lua
minetest.register_craft({
@ -203,8 +155,8 @@ minetest.register_craft({
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:
Wenn diese leere Spalte nicht erforderlich sein sollte, können die leeren Strings
folgendermaßen weggelassen werden:
```lua
minetest.register_craft({
@ -218,8 +170,8 @@ minetest.register_craft({
})
```
Das Feld "Typ" wird für geformte Handwerke nicht benötigt, da "geformt" der
Standard-Handwerkstyp ist.
Das Feld "type" wird für Shaped Rezepte nicht benötigt, da "shaped" der
Standard-Craftingtyp ist.
### Shapeless
@ -253,17 +205,17 @@ minetest.register_craft({
})
```
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
Der einzige wirklich Unterschied im Code 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 dies nicht gesetzt ist, ist der Standard 3.
Das Rezepz oben funktioniert, wenn der Kohle Block im Input-Slotm ist,
Das Rezept oben funktioniert, wenn der Kohleblock im Input-Slot ist,
mit irgendeiner Form von Brennstoff darunter.
Es stell nach 10 Sekunden ein Diamant-Fragment her!
Es stellt nach 10 Sekunden ein Diamant-Fragment her!
Dieser Typ ist eine Ergänzung zum Kochtyp, da er definiert
Dieser Typ ist eine Ergänzung zum Kochtyp, da er definiert,
was in Öfen und anderen Kochgeräten aus Mods verbrannt werden kann.
```lua
@ -280,12 +232,8 @@ 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.
Gruppen werden durch die Verwendung der `groups`-Eigenschaft in der Definitions-Tabelle definiert
und haben einen dazugehörigen Wert.
```lua
groups = {cracky = 3, wood = 1}
@ -293,8 +241,8 @@ 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.
Zweitens können Gruppen in einem Handwerksrezept anstelle eines Itemnamens verwendet werden, damit
ein beliebiges Item aus der Gruppe verwendet werden kann.
```lua
minetest.register_craft({
@ -310,18 +258,18 @@ 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
Grabungstypen sind Gruppen, die dazu benutzt werden, um zu definieren wie stark ein Node ist, wenn er
von verschiedenen Werkzeugen abgebaut wird.
Eine Grabtypgruppe mit einem höheren Wert bedeutet, dass der Blockes leichter
Eine Grabtypgruppe mit einem höheren Wert bedeutet, dass der Node 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.
Ein Node ohne Grabtypen kann mit keinem Werkzeug abgebaut werden.
| Gruppe | Bestes Werkzeug | Beschreibung |
|---------|-----------------|-------------|
| crumbly | Spaten | Erde, Sand |
| crumbly | Schaufel | Erde, Sand |
| 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 |
@ -334,11 +282,11 @@ 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,
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 Werkzeug
Fähigkeit hat, dann wird stattdessen die Fähigkeit der aktuellen Hand verwendet.
Wenn der Gegenstand, den ein Spieler gerade trägt, keine explizite Werkzeugfähigkeit
hat, dann wird stattdessen die Fähigkeit der aktuellen Hand verwendet.
```lua
minetest.register_tool("meinemod:werkzeug", {
@ -359,6 +307,6 @@ minetest.register_tool("meinemod:werkzeug", {
})
```
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
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
später im Kapitel Objekte, Spieler und Entities behandelt werden.