Level 1 – Grundlagen
Level-Empfehlung: Klasse 6–8, Level 2 (Grundlagen)
Lernziel: Die 3D-Welt als Zahlenraum (X, Y, Z) verstehen und einfache Aktionen (core.set_node) zuordnen.
In diesem Kapitel lernst du, wie Luanti / Minetest die Welt als Zahlen beschreibt. Du verstehst, was X, Y, Z bedeuten, wie du deine aktuelle Position findest und wie du Koordinaten in Mods benutzt.
Eine Koordinate ist eine Art Adresse im 3D-Raum.
Statt „Das Haus steht neben dem Baum“ sagt der Computer:
„Das Haus steht bei (x, y, z)“.
In Luanti / Minetest benutzt du drei Zahlen:
Im Unterricht hilft eine einfache Eselsbrücke:
X = „X-Achse wie ein Pfeil nach rechts“,
Y = „Y wie Y-Achse nach oben“,
Z = „Z wie zurück / vorwärts“.
Luanti / Minetest zeigt dir deine aktuelle Position im Debug-/Info-Bereich an. Je nach Konfiguration kannst du:
Dort findest du Zeilen wie:
pos: (12.0, 8.5, -34.0)
Das bedeutet:
Spielerpositionen haben oft Nachkommastellen (z. B. 8.5).
Blöcke dagegen sitzen auf ganzzahligen Koordinaten
(… -1, 0, 1, 2 …).
Wenn du in Lua mit Blöcken arbeitest, brauchst du meistens ganze Zahlen. Darum rundet man die Spielerposition auf den nächstliegenden Block:
local player = core.get_player_by_name(name)
if not player then
return
end
local pos = player:get_pos()
-- Auf ganze Blöcke runden:
pos.x = math.floor(pos.x + 0.5)
pos.y = math.floor(pos.y + 0.5)
pos.z = math.floor(pos.z + 0.5)
Jetzt kannst du pos benutzen, um an exakt dieser Blockposition
etwas zu setzen oder zu prüfen.
Hier kannst du einen kurzen Mathe-Einschub machen:
Was bedeutet „aufrunden“? Lass die Schüler:innen selbst überlegen, was
math.floor(x + 0.5) macht.
Mit core.set_node(pos, node) kannst du an der Position
pos einen Block setzen oder ersetzen.
Der folgende Code-Ausschnitt setzt einen Steinblock direkt unter die Füße des Spielers:
local player = core.get_player_by_name(name)
if not player then
return
end
local pos = player:get_pos()
-- Auf Blockkoordinaten runden:
pos.x = math.floor(pos.x + 0.5)
pos.y = math.floor(pos.y + 0.5)
pos.z = math.floor(pos.z + 0.5)
-- Einen Block tiefer:
local under = {
x = pos.x,
y = pos.y - 1,
z = pos.z,
}
core.set_node(under, { name = "default:stone" })
In deinem späteren Beispiel-Mod (Plattform unter dem Spieler) verwendest du denselben Trick, nur mit einer kleinen Fläche aus mehreren Blöcken.
Mit einer Schleife kannst du mehrere Blöcke in einem Bereich setzen – zum Beispiel eine 3×3-Plattform unter dem Spieler:
for dx = -1, 1 do
for dz = -1, 1 do
core.set_node(
{ x = pos.x + dx, y = pos.y - 1, z = pos.z + dz },
{ name = "default:stone" }
)
end
end
Hier entstehen 9 Blöcke:
dx läuft von -1 bis 1 (links, Mitte, rechts)dz läuft von -1 bis 1 (vorne, Mitte, hinten)y = pos.y - 1 – direkt unter dem SpielerLass die Schüler:innen zuerst auf Papier ein Koordinatenraster zeichnen (x und z) und die Punkte (-1, 0, 1) markieren. Dann verstehen sie besser, warum 9 Blöcke entstehen und wie Schleifen und Koordinaten zusammenhängen.
Bearbeite die Aufgaben und teste sie in einer eigenen Welt:
core.set_node, um an einer
deiner Positionen einen Block zu setzen.
Als Projekt können die Schüler:innen ein „Koordinaten-Spiel“ entwickeln: Der Lehrer nennt Koordinaten, die Spieler:innen müssen dorthin laufen und dort einen Block setzen oder einen Schalter aktivieren.
Jetzt weißt du, wie Koordinaten funktionieren, wie du deine Position im Spiel findest und wie du Blöcke per Lua an bestimmte Stellen setzt. Im nächsten Schritt verpacken wir diese Ideen in einen Chatbefehl – zum Beispiel, um auf Knopfdruck eine Plattform zu erzeugen.