Level 2 – Nodes & Blöcke
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:
"default:stone"paramtype2 in der Definition
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.“
Die Grundform der Funktion sieht so aus:
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:
"modname:itemname" (nur Kleinbuchstaben, Zahlen, Unterstrich). description und tiles sind für sichtbare Blöcke praktisch Pflicht. textures/ ablegen.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.
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. |
| 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. |
Ein minimaler Block für Übungswelten – gut für Koordinaten- und Bauaufgaben:
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,
})
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. |
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.“
Ein halbtransparenter Glasblock, der die Umgebung hell erleuchtet – perfekt als „Magische Lampe“ oder High-Tech-Block.
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},
})
Ein Sprungblock, der Spieler:innen nach oben katapultiert – super für Parkour-Maps oder „Trampolin-Halle“.
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
})
Ein giftiger Boden, der beim Draufstehen Schaden macht und den Bildschirm grünlich einfärbt – ideal für „Gefahrenzonen“ in Lernlevels.
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 },
})
Mit drawtype = "nodebox" kannst du Blöcke formen, die nicht
voll 1×1×1 sind – z.B. dünne Platten, Treppen, Möbel.
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},
})
description und tiles.light_source und vergleiche ihn mit einer Fackel.bouncy-Werten beim Trampolin.paramtype2 = "facedir", um einen Block je nach Blickrichtung zu drehen.