Level 2 – Chatbefehle
core.register_chatcommand
Mit core.register_chatcommand kannst du eigene Chatbefehle wie
/platform registrieren. Ein Chatbefehl ist ein kurzer Text, den der
Spieler in den Chat schreibt, um eine Funktion auszuführen – zum Beispiel eine
Plattform unter sich zu erzeugen oder Informationen anzuzeigen.
Die Funktion hat immer dieselbe Form:
core.register_chatcommand(name, {
params = <string>, -- (optional) Syntax-Hinweis für /help
description = <string>, -- Kurzbeschreibung für /help
privs = <tabelle>, -- (optional) benötigte Privilegien
func = function(name, param)
-- <dein Code>
-- Rückgabewert: true/false, "Nachricht an Spieler"
end,
})
Parameter:
name – der Befehl ohne Slash, z. B. "platform" für /platformparams – kurzer Hinweis, wie der Befehl benutzt wird (wird in /help angezeigt)description – verständliche Beschreibung des Befehlsprivs – Tabelle der benötigten Privilegien, z. B. { interact = true }func(name, param) – Funktion, die ausgeführt wird, wenn der Befehl aufgerufen wird
Die Funktion func kann bis zu zwei Werte zurückgeben:
true oder false, ob der Befehl erfolgreich warFür Einsteiger reicht oft der Satz: „Ein Chatbefehl ist wie eine kleine Zauberformel – wenn du sie richtig schreibst, führt der Server einen Lua-Codeblock aus.“
Dieses Beispiel registriert /echo. Der Befehl gibt einfach
zurück, was der Spieler dahinter schreibt:
core.register_chatcommand("echo", {
params = "<text>",
description = "Gibt den Text zurück, den du eingibst.",
privs = { interact = true },
func = function(name, param)
if param == nil or param == "" then
return false, "Bitte gib einen Text an."
end
return true, "Du hast geschrieben: " .. param
end,
})
Wenn ein Spieler /echo Hallo Welt eingibt, sieht er im Chat:
„Du hast geschrieben: Hallo Welt“.
Für den Plattform-Befehl brauchst du:
name – wird automatisch übergeben),core.get_player_by_name(name),x, y, z),Diese Themen sind in den Grundlagen-Seiten Coordinates & Positions und Mod Folder Structure ausführlicher erklärt.
/platform
Der folgende Chatbefehl erzeugt eine 3×3-Plattform aus Stein
direkt unter dem Spieler. Er gehört in die init.lua deines Mods
(zum Beispiel school_platform):
-- init.lua in school_platform
core.register_chatcommand("platform", {
params = "",
description = "Erzeugt eine kleine Steinplattform unter dir.",
privs = { interact = true },
func = function(name, param)
local player = core.get_player_by_name(name)
if not player then
return false, "Fehler: Spieler nicht gefunden."
end
-- Spielerposition holen
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)
-- 3×3-Plattform erzeugen (eine Ebene 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
return true, "Plattform erstellt!"
end,
})
Nach einem Neustart des Spiels und Aktivierung des Mods kannst du im Chat
/platform eingeben. Stehst du dabei in der Luft, erscheint unter
dir eine kleine Plattform aus Stein.
Hier lässt sich gut differenzieren: Schwächere Schüler:innen können nur verstehen, dass eine Plattform entsteht. Stärkere analysieren die Schleifen und Koordinaten und erklären mit eigenen Worten, warum genau 9 Blöcke gesetzt werden.
Beachte die Rückgabe am Ende von func:
true bedeutet: „Befehl erfolgreich ausgeführt“.false bedeutet: „Fehler oder falsche Benutzung“.Beispiel für eine einfache Parameterprüfung:
core.register_chatcommand("sethp", {
params = "<wert>",
description = "Setzt deine Lebenspunkte auf <wert>.",
privs = { interact = true },
func = function(name, param)
local value = tonumber(param)
if not value then
return false, "Benutzung: /sethp <zahl>"
end
local player = core.get_player_by_name(name)
if not player then
return false, "Spieler nicht gefunden."
end
player:set_hp(value)
return true, "HP auf " .. value .. " gesetzt."
end,
})
/hello,
der „Hallo <Spielername>!“ zurückgibt.
/hello Anna soll „Hallo Anna!“ anzeigen.
/platform so an, dass er einen Parameter
für die Blockart hat, z. B. /platform default:glass.
/spawnlab für einen Laborraum).
Du kennst nun die Grundlagen von core.register_chatcommand
und kannst eigene Chatbefehle schreiben. Als Nächstes kannst du: