Level 2 - Praxisbeispiel

Example: Platform under Player

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.

Voraussetzungen

Für dieses Beispiel sollten die Schüler:innen die folgenden Kapitel mindestens einmal gesehen haben:

1. Überblick: Was macht der Mod?

Der Mod school_platform fügt einen neuen Chatbefehl /platform hinzu. Wenn ein Spieler den Befehl benutzt:

Das ist ideal, um:

2. Mod-Struktur

Lege im globalen mods-Ordner oder im worldmods-Ordner deiner Welt einen Mod mit dem Namen school_platform an. Die Struktur sollte so aussehen:

Ordnerstruktur von school_platform
minetest/
└── mods/
    └── school_platform/
        ├── init.lua
        └── mod.conf

3. Inhalt von mod.conf

In mod.conf beschreibst du den Mod kurz und trägst den technischen Namen ein:

mod.conf für school_platform
name = school_platform
description = Simple platform command for training coordinates
depends = default

Wichtig:

4. Vollständiger Code in init.lua

Jetzt kommt der eigentliche Mod-Code. Er besteht aus drei Teilen:

  1. Log-Eintrag beim Laden des Mods,
  2. Holen und Runden der Spielerposition,
  3. Registrieren des Chatbefehls /platform, der die Plattform baut.
Komplette init.lua für school_platform
-- 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,
})

5. Code-Erklärung für den Unterricht

5.1 Log-Zeile

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.

5.2 Hilfsfunktion get_centered_player_pos

Die Funktion:

5.3 Chatbefehl /platform

Im Chatbefehl passiert:

Didaktik-Hinweis

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.

6. Test und Fehlersuche

  1. Starte Luanti neu und aktiviere den Mod school_platform im Mods-Menü.
  2. Erstelle eine neue Welt oder öffne eine vorhandene.
  3. Stelle sicher, dass dein Spieler das Privileg interact besitzt.
  4. Gib im Chat /platform ein.
  5. Kontrolliere, ob unter dir eine 3×3-Plattform aus Stein erscheint.

Falls nichts passiert:

7. Erweiterungen für Fortgeschrittene

Wenn der Basis-Befehl funktioniert, kannst du mit der Klasse folgendes ausprobieren:

Projektidee

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.

8. Verweise auf andere Seiten