Level 3 – Flüssigkeiten und fließende Blöcke
In Luanti gibt es nicht nur feste Blöcke, sondern auch lebendige, fließende Blöcke: Wasser, Lava, Säure, Saft oder Honig. Solche Blöcke können sich ausbreiten, Löcher füllen, verschwinden und wieder auftauchen. Heute bauen wir eine eigene Flüssigkeit — ruhig und Schritt für Schritt.
Diese Seite ist so geschrieben, dass Kinder von 8–12 Jahren sie verstehen können. Wir erklären nicht nur, was man tippt, sondern auch, warum es so funktioniert.
Stell dir eine Quelle und kleine Rinnsale vor. Die Quelle ist wie ein voller Becher, der fest an seinem Platz steht. Der Fluss ist das Wasser, das sich ausbreitet. Im Code besteht eine Flüssigkeit immer aus genau diesen zwei Bausteinen.
In Luanti ist eine Flüssigkeit nicht ein Block, sondern gleich zwei:
Wenn du nur einen davon baust, verhält sich die Flüssigkeit falsch. Deshalb registrieren wir immer zwei Nodes und verbinden sie miteinander.
Damit die Flüssigkeit im Spiel erscheint, brauchst du:
school_liquids);mod.conf;init.lua;
Wir erstellen den Mod school_liquids. Die Ordnerstruktur sieht so aus:
school_liquids/
├── init.lua
├── mod.conf
└── textures/
├── school_berry_juice_source_animated.png
├── school_berry_juice_flowing_animated.png
└── school_berry_juice_still.png
In mod.conf reichen meist zwei Zeilen:
name = school_liquids
description = Lern-Flüssigkeiten für Luanti
Eine Flüssigkeit sieht besser aus, wenn sie sich leicht bewegt. Dafür nutzt man animierte Texturen. Die einfachste Variante:
Quelle und Fluss dürfen unterschiedliche Bilder haben. Du kannst auch mit derselben Textur starten — das ist kein Fehler.
In Luanti muss der Texturname exakt so geschrieben sein wie die Datei
im Ordner textures/. Wenn ein Zeichen anders ist,
findet das Spiel die Grafik nicht.
Unten steht ein vollständiges Beispiel für die Flüssigkeit „Beerensaft“.
Zuerst kommt die Quelle, danach der Fluss. Achte auf die Suffixe
_source und _flowing.
local modname = core.get_current_modname()
local liquid_id = "berry_juice"
-- 1) Quelle
core.register_node(modname .. ":" .. liquid_id .. "_source", {
description = "Beerensaft (Quelle)",
drawtype = "liquid",
tiles = {"school_berry_juice_still.png"},
special_tiles = {
{
name = "school_berry_juice_source_animated.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1.6},
},
{
name = "school_berry_juice_source_animated.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1.6},
backface_culling = false,
},
},
use_texture_alpha = "blend",
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
liquidtype = "source",
liquid_alternative_flowing = modname .. ":" .. liquid_id .. "_flowing",
liquid_alternative_source = modname .. ":" .. liquid_id .. "_source",
liquid_viscosity = 1,
liquid_range = 2,
liquid_renewable = true,
post_effect_color = {a = 120, r = 140, g = 20, b = 180},
groups = {liquid = 3, berry_juice = 1},
})
-- 2) Fluss
core.register_node(modname .. ":" .. liquid_id .. "_flowing", {
description = "Beerensaft (Fluss)",
drawtype = "flowingliquid",
tiles = {"school_berry_juice_still.png"},
special_tiles = {
{
name = "school_berry_juice_flowing_animated.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1.0},
},
{
name = "school_berry_juice_flowing_animated.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1.0},
backface_culling = false,
},
},
use_texture_alpha = "blend",
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
liquidtype = "flowing",
liquid_alternative_flowing = modname .. ":" .. liquid_id .. "_flowing",
liquid_alternative_source = modname .. ":" .. liquid_id .. "_source",
liquid_viscosity = 1,
liquid_range = 2,
liquid_renewable = true,
post_effect_color = {a = 120, r = 140, g = 20, b = 180},
groups = {liquid = 3, berry_juice = 1, not_in_creative_inventory = 1},
})
Quelle und Fluss sind zwei verschiedene Blöcke.
Deshalb registrieren wir sie getrennt, verbinden sie aber mit den Parametern
liquid_alternative_source und liquid_alternative_flowing.
Wenn die Quelle „fließt“, verwandelt sie Nachbarfelder in Fluss-Blöcke. Der Fluss
„merkt sich“, dass seine Haupt-Referenz die Quelle ist.
Beim Fluss ist paramtype2 = "flowingliquid" Pflicht.
Das speichert die Stufe der Flüssigkeit: 1, 2, 3… Je kleiner die Zahl,
desto niedriger ist die „Stufe“.
| Parameter | Was es macht | Einfacher Tipp |
|---|---|---|
liquidtype |
Sagt, ob es eine Quelle oder ein Fluss ist. | Quelle: "source", Fluss: "flowing". |
liquid_alternative_source |
Name des Quell-Blocks. | Beide Nodes sollen auf dieselbe Quelle zeigen. |
liquid_alternative_flowing |
Name des Fluss-Blocks. | Beide Nodes sollen auf denselben Fluss zeigen. |
paramtype2 = "flowingliquid" |
Speichert die „Stufe“ des Flusses. | Gilt nur für den Fluss. |
liquid_viscosity |
Wie schnell die Flüssigkeit fließt. | 1 = dünn wie Wasser, 2–7 = zäh wie Honig. |
liquid_range |
Wie weit die Flüssigkeit fließt. | 2–4 ist gut für Experimente. |
liquid_renewable |
Ob eine „unendliche“ Quelle entstehen darf. | Wenn true, können zwei Quellen eine neue bilden. |
buildable_to |
Ob man die Flüssigkeit mit einem anderen Block ersetzen darf. | Meist true, sonst ist sie schwer zu entfernen. |
post_effect_color |
Färbt den Bildschirm, wenn man in der Flüssigkeit ist. | Ein leichter Farbton wirkt atmosphärisch. |
mod.conf und init.lua.Wenn die Flüssigkeit nicht fließt, keine Panik — meist ist es ein kleiner Tippfehler in einem Parameter. Schau in den Abschnitt „Häufige Fehler“.
drawtype und paramtype2.liquid_alternative_* und die Node-Namen.not_in_creative_inventory = 1 beim Fluss.buildable_to = true.
Im Minetest Game gibt es den Mod bucket. Wenn er aktiv ist, kannst du
deine Flüssigkeit für einen Eimer registrieren:
if core.get_modpath("bucket") then
bucket.register_liquid(
"school_liquids:berry_juice_source",
"school_liquids:berry_juice_flowing",
"school_liquids:bucket_berry_juice",
"school_bucket_berry_juice.png",
"Eimer mit Beerensaft"
)
end
Für den Eimer brauchst du ein eigenes Icon school_bucket_berry_juice.png
im Ordner textures/. Du kannst mit einem einfachen Bild starten
und es später verbessern.
Wenn es keinen bucket-Mod gibt, kannst du diesen Teil einfach überspringen.
liquid_viscosity = 4, damit er sehr zäh ist.damage_per_second = 2 ergänzt.post_effect_color und erzeuge „magischen Nebel“.liquid_range, damit Pfützen weiter fließen.