From 027753940f47b845c57f1ee5a159c6208127cbf9 Mon Sep 17 00:00:00 2001 From: kay27 Date: Sun, 2 Jan 2022 10:58:29 +0400 Subject: [PATCH] Add dummy /gamemode --- mods/HUD/mcl_inventory/init.lua | 4 +- mods/HUD/mcl_inventory/mod.conf | 2 +- mods/MISC/mcl_commands/gamemode.lua | 80 +++++++++++++++++++ mods/MISC/mcl_commands/init.lua | 1 + .../mcl_commands/locale/mcl_commands.de.tr | 5 +- .../mcl_commands/locale/mcl_commands.es.tr | 3 + .../mcl_commands/locale/mcl_commands.fr.tr | 5 +- .../mcl_commands/locale/mcl_commands.pl.tr | 5 +- .../mcl_commands/locale/mcl_commands.ru.tr | 5 +- mods/MISC/mcl_commands/locale/template.txt | 5 +- mods/MISC/mcl_commands/say.lua | 2 +- mods/PLAYER/mcl_anticheat/init.lua | 3 +- 12 files changed, 108 insertions(+), 12 deletions(-) create mode 100644 mods/MISC/mcl_commands/gamemode.lua diff --git a/mods/HUD/mcl_inventory/init.lua b/mods/HUD/mcl_inventory/init.lua index c197bfdd9..1785ed91f 100644 --- a/mods/HUD/mcl_inventory/init.lua +++ b/mods/HUD/mcl_inventory/init.lua @@ -177,7 +177,5 @@ minetest.register_on_joinplayer(function(player) return_fields(player, "enchanting_lapis") end) -if minetest.is_creative_enabled("") then - dofile(minetest.get_modpath(minetest.get_current_modname()).."/creative.lua") -end +dofile(minetest.get_modpath(minetest.get_current_modname()).."/creative.lua") diff --git a/mods/HUD/mcl_inventory/mod.conf b/mods/HUD/mcl_inventory/mod.conf index 10e669265..1a23698b0 100644 --- a/mods/HUD/mcl_inventory/mod.conf +++ b/mods/HUD/mcl_inventory/mod.conf @@ -1,5 +1,5 @@ name = mcl_inventory author = BlockMen description = Adds the player inventory and creative inventory. -depends = mcl_init, mcl_formspec, mcl_enchanting +depends = mcl_init, mcl_formspec, mcl_enchanting, mcl_commands optional_depends = mcl_armor, mcl_brewing, mcl_potions, mcl_enchanting, mcl_craftguide, mcl_player diff --git a/mods/MISC/mcl_commands/gamemode.lua b/mods/MISC/mcl_commands/gamemode.lua new file mode 100644 index 000000000..bd24a7685 --- /dev/null +++ b/mods/MISC/mcl_commands/gamemode.lua @@ -0,0 +1,80 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +local gamemode_ids = { + survival = 1, + creative = 2, +} + +local id_to_gamemode = {} +for gamemode, id in pairs(gamemode_ids) do + id_to_gamemode[id] = gamemode +end + +local creative_mode = 'creative' + +local storage = minetest.get_mod_storage() + +local player_to_gamemode_id = minetest.deserialize(storage:get_string("player_to_gamemode_id") or "return {}") or {} +minetest.register_on_shutdown(function() + storage:set_string("player_to_gamemode_id", minetest.serialize(player_to_gamemode_id)) +end) + +local core_is_creative_enabled = minetest.is_creative_enabled + +minetest.is_creative_enabled = function(name) + local id = player_to_gamemode_id[name] + if id then + local gamemode = id_to_gamemode[id] + if gamemode then + return gamemode == creative_mode + end + end + return core_is_creative_enabled(name) +end + +local function handle_gamemode_command(player_name, new_gamemode) + player_to_gamemode_id[player_name] = gamemode_ids[new_gamemode] + return true +end + +if minetest.registered_chatcommands["gamemode"] then + minetest.unregister_chatcommand("gamemode") +end + +local function get_gamemode_param() + local param + local i = 0 + for gamemode, _ in pairs(gamemode_ids) do + if i == 0 then + param = "(" + else + param = param .. " | " + end + i = i + 1 + param = param .. gamemode + end + if i > 0 then + param = param .. ") " + end + return param +end + +minetest.register_chatcommand("gamemode", { + params = S("@1[]", get_gamemode_param()), + description = S("Set game mode for player or yourself"), + privs = {server=true}, + func = function(name, param) + if (param == "") then + return false, S("Error: No game mode specified.") + end + if (gamemode_ids[param]) then + handle_gamemode_command(name, param) + else + local new_gamemode, player_name = string.match(param, "^([%a]+) ([%a%d_-]+)$") + if not new_gamemode or not gamemode_ids[new_gamemode] or not player_name then + return false, S("Invalid usage, see /help @1", "gamemode") + end + handle_gamemode_command(player_name, new_gamemode) + end + end +}) diff --git a/mods/MISC/mcl_commands/init.lua b/mods/MISC/mcl_commands/init.lua index a287c2926..b6b07fb22 100644 --- a/mods/MISC/mcl_commands/init.lua +++ b/mods/MISC/mcl_commands/init.lua @@ -1,5 +1,6 @@ local modpath = minetest.get_modpath(minetest.get_current_modname()) +dofile(modpath.."/gamemode.lua") dofile(modpath.."/kill.lua") dofile(modpath.."/setblock.lua") dofile(modpath.."/seed.lua") diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.de.tr b/mods/MISC/mcl_commands/locale/mcl_commands.de.tr index 68d267517..7f21c8537 100644 --- a/mods/MISC/mcl_commands/locale/mcl_commands.de.tr +++ b/mods/MISC/mcl_commands/locale/mcl_commands.de.tr @@ -10,7 +10,7 @@ Kill player or yourself=Spieler oder sich selbst töten Can use /say=Kann „/say“ benutzen = Send a message to every player=Nachricht an alle Spieler senden -Invalid usage, see /help say.=Falsche Benutzung, siehe „/help say“. +Invalid usage, see /help @1.=Falsche Benutzung, siehe „/help @1“. ,, =,, Set node at given position=Node (Block) an der gegebenen Position platzieren Invalid node=Unültiger Node @@ -21,3 +21,6 @@ Ban list: @1=Bannliste: @1 Show who is logged on=Anzeigen, wer eingeloggt ist Displays the world seed=Den Seed der Welt anzeigen Only peaceful mobs allowed!=Nur friedliche Mobs erlaubt! +@1[]= +Set game mode for player or yourself= +Error: No game mode specified.= diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.es.tr b/mods/MISC/mcl_commands/locale/mcl_commands.es.tr index 91b21eb91..a04d4aaf1 100644 --- a/mods/MISC/mcl_commands/locale/mcl_commands.es.tr +++ b/mods/MISC/mcl_commands/locale/mcl_commands.es.tr @@ -21,3 +21,6 @@ Ban list: @1=Lista de baneados: @1 Show who is logged on=Mostrar quién ha iniciado sesión Displays the world seed=Muestra la semilla del mundo Only peaceful mobs allowed!=¡Solo se permiten animales pacíficos! +@1[]= +Set game mode for player or yourself= +Error: No game mode specified.= diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.fr.tr b/mods/MISC/mcl_commands/locale/mcl_commands.fr.tr index a655368bf..e83913264 100644 --- a/mods/MISC/mcl_commands/locale/mcl_commands.fr.tr +++ b/mods/MISC/mcl_commands/locale/mcl_commands.fr.tr @@ -10,7 +10,7 @@ Kill player or yourself=Tuez un joueur ou vous-même Can use /say=Peut utiliser /say = Send a message to every player=Envoyez un message à chaque joueur -Invalid usage, see /help say.=Utilisation non valide, voir /help say. +Invalid usage, see /help @1.=Utilisation non valide, voir /help @1. ,, =,, Set node at given position=Placer le noeud à une position donnée Invalid node=Noeud non valide @@ -21,3 +21,6 @@ Ban list: @1=Liste d'interdiction: @1 Show who is logged on=Afficher qui est connecté Displays the world seed=Affiche la graine du monde Only peaceful mobs allowed!=Seuls les mobs pacifiques sont autorisées! +@1[]= +Set game mode for player or yourself= +Error: No game mode specified.= diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.pl.tr b/mods/MISC/mcl_commands/locale/mcl_commands.pl.tr index 4a3ad181c..bacdae3a9 100644 --- a/mods/MISC/mcl_commands/locale/mcl_commands.pl.tr +++ b/mods/MISC/mcl_commands/locale/mcl_commands.pl.tr @@ -10,7 +10,7 @@ Kill player or yourself=Zabij gracza lub siebie Can use /say=Może używać /say = Send a message to every player=Wyślij wiadomość do każdego gracza -Invalid usage, see /help say.=Niepoprawne użyciu, zobacz /help say. +Invalid usage, see /help @1.=Niepoprawne użyciu, zobacz /help @1. ,, =,, Set node at given position=Ustaw node w danej pozycji Invalid node=Niepoprawny node @@ -21,3 +21,6 @@ Ban list: @1=Lista zbanowanych: @1 Show who is logged on=Pokaż zalogowanych Displays the world seed=Wyświetl ziarno świata Only peaceful mobs allowed!=Tylko pokojowe moby dozwolone! +@1[]= +Set game mode for player or yourself= +Error: No game mode specified.= diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.ru.tr b/mods/MISC/mcl_commands/locale/mcl_commands.ru.tr index 686c8067c..4378e5de5 100644 --- a/mods/MISC/mcl_commands/locale/mcl_commands.ru.tr +++ b/mods/MISC/mcl_commands/locale/mcl_commands.ru.tr @@ -10,7 +10,7 @@ Kill player or yourself=Убить игрока или себя Can use /say=Можно использовать /say =<сообщение> Send a message to every player=Отправляет сообщение всем игрокам -Invalid usage, see /help say.=Недопустимое использование, см. /help say. +Invalid usage, see /help @1.=Недопустимое использование, см. /help @1. ,, =,, <СтрокаУзла> Set node at given position=Устанавливает узел в заданной позиции Invalid node=Неправильный узел @@ -21,3 +21,6 @@ Ban list: @1=Бан-лист: @1 Show who is logged on=Показывает, кто подключён Displays the world seed=Показывает значение зерна мира (seed) Only peaceful mobs allowed!=Включены только мирные мобы! +@1[]=@1[<имя>] +Set game mode for player or yourself=Задаёт режим игры для игрока или для вас +Error: No game mode specified.=Ошибка: Режим игры не указан. diff --git a/mods/MISC/mcl_commands/locale/template.txt b/mods/MISC/mcl_commands/locale/template.txt index 5b4370b8f..b42f06085 100644 --- a/mods/MISC/mcl_commands/locale/template.txt +++ b/mods/MISC/mcl_commands/locale/template.txt @@ -10,7 +10,7 @@ Kill player or yourself= Can use /say= = Send a message to every player= -Invalid usage, see /help say.= +Invalid usage, see /help @1.= ,, = Set node at given position= Invalid node= @@ -21,3 +21,6 @@ Ban list: @1= Show who is logged on= Displays the world seed= Only peaceful mobs allowed!= +@1[]= +Set game mode for player or yourself= +Error: No game mode specified.= diff --git a/mods/MISC/mcl_commands/say.lua b/mods/MISC/mcl_commands/say.lua index 9fd53c174..5f5bc5b00 100644 --- a/mods/MISC/mcl_commands/say.lua +++ b/mods/MISC/mcl_commands/say.lua @@ -10,7 +10,7 @@ minetest.register_chatcommand("say", { privs = {announce=true}, func = function(name, param) if not param then - return false, S("Invalid usage, see /help say.") + return false, S("Invalid usage, see /help @1.", "say") end minetest.chat_send_all(("["..name.."] "..param)) return true diff --git a/mods/PLAYER/mcl_anticheat/init.lua b/mods/PLAYER/mcl_anticheat/init.lua index a37c9b5b8..25ec3fd48 100644 --- a/mods/PLAYER/mcl_anticheat/init.lua +++ b/mods/PLAYER/mcl_anticheat/init.lua @@ -6,7 +6,6 @@ local get_connected_players = minetest.get_connected_players local get_node = minetest.get_node local get_objects_inside_radius = minetest.get_objects_inside_radius local get_player_by_name = minetest.get_player_by_name -local is_creative_enabled = minetest.is_creative_enabled local kick_player = minetest.kick_player local set_node = minetest.set_node @@ -63,7 +62,7 @@ local function update_player(player_object) end local function check_player(name) - if is_creative_enabled(name) then return end + if minetest.is_creative_enabled(name) then return end local data = joined_players[name] if not data then return end if not data[0] then return end