Level 3 – Flüssigkeiten und fließende Blöcke

Wie du deinen eigenen Flüssigkeitsblock in Luanti erstellst

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.

Bild im Kopf

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.

1. Woraus besteht eine Flüssigkeit?

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.

2. Was du vorbereitest

Damit die Flüssigkeit im Spiel erscheint, brauchst du:

3. Schritt 1: Mod anlegen

Wir erstellen den Mod school_liquids. Die Ordnerstruktur sieht so aus:

Mod-Struktur
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:

mod.conf
name = school_liquids
description = Lern-Flüssigkeiten für Luanti

4. Schritt 2: Texturen vorbereiten

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.

Wichtig bei Dateinamen

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.

5. Schritt 3: Code für Quelle und Fluss

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.

init.lua — Flüssigkeit „Beerensaft“
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},
})

Warum genau so?

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“.

6. Wichtige Einstellungen der Flüssigkeit (verständlich erklärt)

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.

7. Im Spiel testen

  1. Speichere die Dateien mod.conf und init.lua.
  2. Starte Luanti und aktiviere den Mod in deiner Welt.
  3. Im Kreativmodus finde „Beerensaft (Quelle)“ und setze ihn.
  4. Warte kurz: Die Flüssigkeit sollte sich ausbreiten.

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“.

8. Häufige Fehler und schnelle Tipps

9. Bonus: einen Eimer machen (optional)

Im Minetest Game gibt es den Mod bucket. Wenn er aktiv ist, kannst du deine Flüssigkeit für einen Eimer registrieren:

bucket.register_liquid (falls der Mod bucket aktiv ist)
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.

10. Ideen zum Ausprobieren

11. Weiter im Nachschlagewerk