🎓 Lua Muster einfach erklärt

Lua-Muster helfen dir, bestimmte Zeichen oder Wörter in einem Text zu finden. Hier lernst du, wie sie funktionieren!

📘 Was bedeutet das alles?

Symbol Bedeutung Erklärung
^ Anfang Muster beginnt am Anfang des Textes.
q Buchstabe Sucht nach dem Buchstaben „q“.
+ Wiederholung Ein oder mehr Wiederholungen erlaubt.
- Faul Passt so wenig wie möglich.
* Wiederholung Null oder mehr Wiederholungen.
? Optional Zeichen darf da sein – muss aber nicht.
. Irgendein Zeichen Steht für ein beliebiges Zeichen.
%. Entkommt „.“ Steht wirklich für den Punkt „.“.
(...) Gruppe Fasst Zeichen zusammen, um sie später zu verwenden.
%a Buchstaben Alle Buchstaben von A-Z oder a-z.
%c Steuerzeichen z. B. Enter, Tabulator, usw.
%d Zahlen Ziffern von 0 bis 9.
%g Druckbar Alle sichtbaren Zeichen außer Leerzeichen.
%l Kleinbuchstaben Buchstaben von a bis z.
%p Satzzeichen Zeichen wie ! ? . , usw.
💡 Tipp: Du kannst diese Muster mit Lua-Funktionen wie string.match oder string.gsub ausprobieren!

🧪 Beispiel: Chat-Befehl mit Parametern

Stell dir vor, jemand schreibt im Chat:

/teleport Max 120 80

Wir können diesen Befehl mit Lua-Mustern in Name und Zahlen aufteilen:

local eingabe = "/teleport Max 120 80"

-- Lua-Muster: Befehl, Name und zwei Zahlen extrahieren
local name, x, y = string.match(eingabe, "/teleport%s+(%a+)%s+(%d+)%s+(%d+)")

print("Name:", name)  -- Max
print("X:", x)        -- 120
print("Y:", y)        -- 80

So kannst du mit Lua Muster Eingaben analysieren und verarbeiten!

🧩 Kompletter Lua-Code für ein Modul (init.lua)

<!-- init.lua -->
minetest.register_chatcommand("teleport", {
    params = "<name> <x> <y>",
    description = "Teleportiere einen Spieler an Position X Y",
    privs = {teleport = true},
    func = function(name, param)
        local target, x, y = string.match(param, "(%a+)%s+(%d+)%s+(%d+)")

        if not target or not x or not y then
            return false, "Bitte benutze: /teleport <name> <x> <y>"
        end

        x = tonumber(x)
        y = tonumber(y)

        local player = minetest.get_player_by_name(target)
        if player then
            player:set_pos({x=x, y=y, z=0}) -- Teleportation
            minetest.chat_send_player(name, "Teleportiere " .. target .. " nach X: " .. x .. " Y: " .. y)
            return true
        else
            return false, "Spieler " .. target .. " nicht gefunden"
        end
    end
})