Level 2 – Nodes & Blöcke

API: core.register_node

Mit core.register_node (alias core.register_node) registrierst du neue Blocktypen („Nodes“) für deine Welt. Die Welt ist ein 3D-Gitter; jede Position ist eine Node, bestehend aus einem Typnamen und zwei Parametern (param1, param2).

Wichtig: register_node registriert den Typ der Node, nicht eine einzelne Node in der Welt. Einzelne Node-Instanzen speichern pro Block:

Didaktik-Hinweis

Für Schüler:innen kannst du sagen: „Der Blocktyp ist das Rezept, die Node ist das konkrete Stück im Bauwerk. Das Rezept legen wir mit register_node fest.“

1. Grundsyntax

Die Grundform der Funktion sieht so aus:

Grundform von core.register_node
core.register_node("modname:itemname", {
    description = "Lesbarer Name",
    tiles       = {
        "block_top.png",    -- Oberseite (Y+)
        "block_bottom.png", -- Unterseite (Y-)
        "block_right.png",  -- Rechte Seite (X+)
        "block_left.png",   -- Linke Seite (X-)
        "block_back.png",   -- Rueckseite (Z+)
        "block_front.png",  -- Vorderseite (Z-)
    },
    -- weitere Felder ...
})

Namensschema:

Kurzregeln fuer Texturen (tiles)

2. Nodes im Detail: name, param1, param2

Jede Node in der Welt speichert neben dem Typnamen zwei Zahlen:

Feld Typ / Wertebereich Bedeutung Typische Verwendung
name String Node-Typ (z. B. "default:dirt") Welcher Block an dieser Position steht.
param1 0–255 Meist Lichtinformationen (Helligkeit). Wird automatisch von der Engine gesetzt.
param2 0–255 Bedeutung hängt von paramtype2 ab (Rotation, Farbe, Füllhöhe, …). z. B. Drehung von Truhen, Farbinformation, Wasserstand.

Über core.registered_nodes[name] kannst du im Code später auf die Definition des Typs zugreifen, z.B. um den drawtype zu prüfen.

2.1 Drawtype-Uebersicht (Kurzreferenz)

drawtype bestimmt, wie eine Node gezeichnet wird. Die folgende Liste fasst die haeufigsten Varianten zusammen:

drawtype Beschreibung
"normal" Standard-Block (wie Stein oder Holz).
"nodebox" Benutzerdefinierte Form (Treppen, Platten, Moebel).
"mesh" 3D-Modell (z.B. .obj oder .b3d).
"plantlike" Pflanzen mit X-Form-Textur.
"fencelike" Zaun-Form.
"raillike" Schienen/Leitungen auf dem Boden.
"torchlike" Fackeln und aehnliche, duenne Objekte.
"glasslike" Transparente Blaecke wie Glas.
"glasslike_framed" Glas mit Rahmen.
"allfaces" Textur auf allen Seiten sichtbar (z.B. Blaetter).
"allfaces_optional" Wie allfaces, aber optimiert.
"liquid" Fluessigkeiten.

2.2 Gruppen: Werkzeug-Uebersicht

Gruppe Werkzeug Beschreibung
crumbly Schaufel Kruemelige, lockere Materialien.
cracky Spitzhacke Harte, sproede Materialien.
snappy Schere/Schwert Schneidbare oder leicht brechbare Materialien.
choppy Axt Holzartige Materialien.
fleshy Schwert Lebende Materialien und Kreaturen.
explody TNT/Explosionen Explosive oder durch Explosionen zerstoerbare Materialien.
oddly_breakable_by_hand Hand Materialien, die ohne Werkzeug zerstoerbar sind.

3. Einfacher Trainingsblock

Ein minimaler Block für Übungswelten – gut für Koordinaten- und Bauaufgaben:

Beispiel: Schulblock für Übungen
core.register_node("school_blocks:training_block", {
    description = "Training Block",
    tiles       = {"school_training_block.png"},
    groups      = {cracky = 3, oddly_breakable_by_hand = 3},
    is_ground_content = false,
})

4. Wichtige Felder in Node-Definitionen

Die folgende Tabelle fasst die wichtigsten Felder zusammen, mit denen du im Unterricht am häufigsten arbeitest:

Feld Typ / Beispiele Wirkung
description String
"Magic Light Glass"
Name im Inventar / Tooltip.
tiles Liste von Texturen
{"mod_block.png"}
oder 6 Einträge in Reihenfolge
{"top.png", "bottom.png", "right.png", "left.png", "back.png", "front.png"}
(oben +Y, unten −Y, rechts +X, links −X, hinten +Z, vorne −Z)
Oberflächenbilder des Blocks.
drawtype "normal", "nodebox", "mesh", "plantlike", "glasslike", "fencelike", "raillike", "torchlike", "allfaces" Wie der Block gerendert wird (Vollblock, Spezialform, Pflanze, Glas).
Weitere Varianten: glasslike_framed, allfaces_optional, liquid.
paramtype z. B. "light" Lichtdurchlässigkeit: "light" lässt Licht durch, "none" blockiert Licht.
paramtype2 "facedir", "wallmounted", "4dir", "leveled", "degrotate", "colorfacedir" Legt fest, wie param2 interpretiert wird (Rotation, Farbe, Höhe, …).
light_source Zahl 0–14 Block leuchtet aktiv (z.B. Lampen, Glühblöcke).
groups {cracky = 3, bouncy = 120} Verhalten bei Abbau / Interaktion, z.B. wie schnell abbaubar, Sprungeigenschaften.
Häufige Gruppen: crumbly (Schaufel), cracky (Spitzhacke), snappy (Schere/Schwert), choppy (Axt), fleshy (Schwert), explody (TNT), oddly_breakable_by_hand (Hand).
walkable true / false Kann man darauf stehen oder hindurchlaufen?
is_ground_content true / false true = kann durch Höhlen ersetzt werden, false = bleibt stabil (z.B. von Spielern platzierte Blöcke).
diggable true / false Ob der Block abgebaut werden kann (optional).
drop Itemname Was beim Abbauen herausfällt (optional).
damage_per_second Zahl (z.B. 4) Schaden pro Sekunde beim Stehen im Block (z.B. Lava, Gift).
node_box Tabelle mit Box-Koordinaten Spezialformen bei drawtype = "nodebox", z.B. dünne Platten, Möbel.
sounds z. B. default.node_sound_stone_defaults() Schritt-/Abbaugeräusche.

5. Rotation & paramtype2 (Kurzreferenz)

Viele spannende Effekte entstehen erst, wenn du paramtype2 setzt – dann speichert param2 z.B. die Rotation oder Farbe einzelner Blöcke.

paramtype2 Gültig für Bedeutung von param2 Typische Nutzung
"facedir" normal, nodebox, mesh Rotation um Achsen (24 mögliche Drehungen). Drehbare Blöcke wie Truhen, Öfen, Maschinen.
"wallmounted" z. B. torchlike, signlike Gibt an, an welcher Seite die Node „hängt“ (Wand, Boden, Decke). Fackeln, Schilder, Knöpfe.
"4dir" normal, nodebox, mesh Nur horizontale Drehung in 4 Richtungen. Einfacher als facedir, z.B. für Möbel.
"leveled" nodebox (leveled) und plantlike_rooted Höhe (Füllstand) wird in 64-tel Nodes gespeichert. Flüssigkeitsstände, Stapelhöhen (z.B. Schnee, Wasserbecken).
"degrotate" plantlike, mesh Rotation in Grad (param2 × 1.5°). Fein drehbare Dekoobjekte, Pflanzen.
"color", "colorfacedir", "colorwallmounted" verschiedene drawtypes Farbinformation in param2; Drehung ggf. kombiniert. Farbige Varianten desselben Blocks (z.B. Wolle, Beton).

Für den Unterricht reicht meist: „facedir ist Drehung, leveled ist Füllhöhe, color... ist Farbe.“

6. Wow-Block #1: Magic Light Glass

Ein halbtransparenter Glasblock, der die Umgebung hell erleuchtet – perfekt als „Magische Lampe“ oder High-Tech-Block.

Leuchtendes Glas – Magic Light Glass
core.register_node("school_magic:light_glass", {
    description       = "Magic Light Glass",
    drawtype          = "glasslike",
    tiles             = {"school_magic_light_glass.png"},
    use_texture_alpha = "blend",
    paramtype         = "light",
    sunlight_propagates = true,
    light_source      = 14,  -- Maximum-Lichtstärke
    groups            = {cracky = 3, oddly_breakable_by_hand = 3},
})

7. Wow-Block #2: Bouncy Trampoline

Ein Sprungblock, der Spieler:innen nach oben katapultiert – super für Parkour-Maps oder „Trampolin-Halle“.

Bouncy Trampoline – Sprungblock
core.register_node("school_fun:trampoline", {
    description = "Bouncy Trampoline",
    tiles       = {"school_trampoline_top.png",
                   "school_trampoline_bottom.png",
                   "school_trampoline_side.png"},
    groups      = {bouncy = 120, cracky = 1, oddly_breakable_by_hand = 3},
    -- bouncy: Prozentwert, wie stark man zurückkatapultiert wird
})

8. Wow-Block #3: Toxic Slime Floor

Ein giftiger Boden, der beim Draufstehen Schaden macht und den Bildschirm grünlich einfärbt – ideal für „Gefahrenzonen“ in Lernlevels.

Toxic Slime Floor – Giftiger Boden
core.register_node("school_fun:toxic_slime", {
    description = "Toxic Slime Floor",
    tiles       = {"school_toxic_slime.png"},
    groups      = {crumbly = 3},
    walkable    = true,
    damage_per_second = 4,  -- 4 HP Schaden pro Sekunde
    post_effect_color = { a = 180, r = 120, g = 255, b = 120 },
})

9. Wow-Block #4: Dünne Nodebox-Platte

Mit drawtype = "nodebox" kannst du Blöcke formen, die nicht voll 1×1×1 sind – z.B. dünne Platten, Treppen, Möbel.

Beispiel: Dünne Metallplatte als Nodebox
core.register_node("school_build:metal_plate", {
    description = "Thin Metal Plate",
    drawtype    = "nodebox",
    tiles       = {"school_metal_plate.png"},
    paramtype   = "light",
    node_box    = {
        type  = "fixed",
        fixed = {
            -- x1, y1, z1, x2, y2, z2  (Koordinaten von -0.5 bis 0.5)
            {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5},  -- sehr dünne Platte
        },
    },
    groups      = {cracky = 2},
})

10. Mini-Aufträge für Schüler:innen

  1. Erstelle einen eigenen Block mit nur description und tiles.
  2. Baue einen Lichtblock mit light_source und vergleiche ihn mit einer Fackel.
  3. Experimentiere mit bouncy-Werten beim Trampolin.
  4. Nutze paramtype2 = "facedir", um einen Block je nach Blickrichtung zu drehen.

11. Weiterführende Seiten