Level 2 - Praxisbeispiel
In diesem Beispiel baust du einen kompletten Mod, der mit dem Chatbefehl
/platform eine kleine Plattform aus Stein unter dem Spieler erzeugt.
Das Beispiel verbindet alles, was du bisher gelernt hast:
Mod-Struktur, Koordinaten und core.register_chatcommand.
Für dieses Beispiel sollten die Schüler:innen die folgenden Kapitel mindestens einmal gesehen haben:
Der Mod school_platform fügt einen neuen Chatbefehl
/platform hinzu. Wenn ein Spieler den Befehl benutzt:
default:stone gebaut.Das ist ideal, um:
for) an einem sichtbaren Ergebnis zu erklären,
Lege im globalen mods-Ordner oder im worldmods-Ordner
deiner Welt einen Mod mit dem Namen school_platform an. Die Struktur
sollte so aussehen:
minetest/
└── mods/
└── school_platform/
├── init.lua
└── mod.conf
mod.conf
In mod.conf beschreibst du den Mod kurz und trägst den technischen Namen ein:
name = school_platform
description = Simple platform command for training coordinates
depends = default
Wichtig:
name muss exakt dem Ordnernamen school_platform entsprechen.depends = default stellt sicher, dass der Standard-Mod
default (Blöcke, Spieler usw.) vorher geladen wird.init.luaJetzt kommt der eigentliche Mod-Code. Er besteht aus drei Teilen:
/platform, der die Plattform baut.-- init.lua in school_platform
-- 1) Log-Nachricht beim Laden des Mods
core.log("action", "[school_platform] Mod geladen.")
-- 2) Hilfsfunktion: Spielerposition runden und zurückgeben
local function get_centered_player_pos(name)
local player = core.get_player_by_name(name)
if not player then
return nil
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)
return pos
end
-- 3) Chatbefehl /platform registrieren
core.register_chatcommand("platform", {
params = "",
description = "Erzeugt eine kleine Steinplattform unter dir.",
privs = { interact = true },
func = function(name, param)
-- Spielerposition holen
local pos = get_centered_player_pos(name)
if not pos then
return false, "Fehler: Spieler nicht gefunden."
end
-- 3x3-Plattform eine Ebene unter dem Spieler setzen
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
return true, "Plattform erstellt!"
end,
})
core.log("action", "[school_platform] Mod geladen.") schreibt
beim Laden des Mods eine Zeile ins Log. So kannst du prüfen, ob dein Mod
überhaupt geladen wird.
get_centered_player_posDie Funktion:
x, y, z auf ganze Zahlen,nil, wenn etwas schiefgeht)./platformIm Chatbefehl passiert:
pos = get_centered_player_pos(name) holt die Blockposition.dx und dz baut eine 3×3-Fläche.y = pos.y - 1 sorgt dafür, dass die Plattform unter den Füßen
des Spielers liegt und nicht in seinem Körper.true und eine Erfolgsmeldung zurück.Lass stärkere Schüler:innen die Hilfsfunktion selbst schreiben. Schwächere Klassen können zunächst mit einer vereinfachten Version ohne Hilfsfunktion arbeiten, bei der der Code direkt im Chatbefehl steht.
school_platform im Mods-Menü.interact besitzt./platform ein.Falls nichts passiert:
mod.conf den richtigen Namen hat,debug.txt oder der Log-Ausgabe nach Fehlermeldungen,Wenn der Basis-Befehl funktioniert, kannst du mit der Klasse folgendes ausprobieren:
/platform default:glass./tower, der eine Säule nach oben baut
(perfekte Übung für Y-Koordinaten).Aus mehreren solchen Befehlen lässt sich ein „Bau-Assistent“ entwickeln, mit dem Schüler:innen eigene Jump-and-Run-Level oder Parkours automatisch erzeugen können.