mirror of
https://git.minetest.land/Mineclonia/Mineclonia.git
synced 2024-11-09 11:15:05 +00:00
Merge pull request 'Commands Refactoring part1' (#1256) from AFCMS/MineClone2:commands-refactoring-1 into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/1256
This commit is contained in:
commit
2fba745724
9 changed files with 222 additions and 157 deletions
27
mods/MISC/mcl_commands/alias.lua
Normal file
27
mods/MISC/mcl_commands/alias.lua
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
local S = minetest.get_translator("mcl_commands")
|
||||||
|
|
||||||
|
local minecraftaliases = true
|
||||||
|
|
||||||
|
local function register_chatcommand_alias(alias, cmd)
|
||||||
|
local def = minetest.chatcommands[cmd]
|
||||||
|
minetest.register_chatcommand(alias, def)
|
||||||
|
end
|
||||||
|
|
||||||
|
if minecraftaliases then
|
||||||
|
register_chatcommand_alias("?", "help")
|
||||||
|
register_chatcommand_alias("who", "list")
|
||||||
|
register_chatcommand_alias("pardon", "unban")
|
||||||
|
register_chatcommand_alias("stop", "shutdown")
|
||||||
|
register_chatcommand_alias("tell", "msg")
|
||||||
|
register_chatcommand_alias("w", "msg")
|
||||||
|
register_chatcommand_alias("tp", "teleport")
|
||||||
|
register_chatcommand_alias("clear", "clearinv")
|
||||||
|
|
||||||
|
minetest.register_chatcommand("banlist", {
|
||||||
|
description = S("List bans"),
|
||||||
|
privs = minetest.chatcommands["ban"].privs,
|
||||||
|
func = function(name)
|
||||||
|
return true, S("Ban list: @1", minetest.get_ban_list())
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
|
@ -1,163 +1,15 @@
|
||||||
local minecraftaliases = true
|
|
||||||
|
|
||||||
local S = minetest.get_translator("mcl_commands")
|
local S = minetest.get_translator("mcl_commands")
|
||||||
|
|
||||||
local mod_death_messages = minetest.get_modpath("mcl_death_messages")
|
local mod_death_messages = minetest.get_modpath("mcl_death_messages")
|
||||||
|
|
||||||
local function handle_kill_command(suspect, victim)
|
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||||
if minetest.settings:get_bool("enable_damage") == false then
|
|
||||||
return false, S("Players can't be killed right now, damage has been disabled.")
|
|
||||||
end
|
|
||||||
local victimref = minetest.get_player_by_name(victim)
|
|
||||||
if victimref == nil then
|
|
||||||
return false, S("Player @1 does not exist.", victim)
|
|
||||||
elseif victimref:get_hp() <= 0 then
|
|
||||||
if suspect == victim then
|
|
||||||
return false, S("You are already dead")
|
|
||||||
else
|
|
||||||
return false, S("@1 is already dead", victim)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- If player holds a totem of undying, destroy it before killing,
|
|
||||||
-- so it doesn't rescue the player.
|
|
||||||
local wield = victimref:get_wielded_item()
|
|
||||||
if wield:get_name() == "mobs_mc:totem" then
|
|
||||||
victimref:set_wielded_item("")
|
|
||||||
end
|
|
||||||
if mod_death_messages then
|
|
||||||
local msg
|
|
||||||
if suspect == victim then
|
|
||||||
msg = S("@1 committed suicide.", victim)
|
|
||||||
else
|
|
||||||
msg = S("@1 was killed by @2.", victim, suspect)
|
|
||||||
end
|
|
||||||
mcl_death_messages.player_damage(victimref, msg)
|
|
||||||
end
|
|
||||||
-- DIE!
|
|
||||||
victimref:set_hp(0)
|
|
||||||
-- Log
|
|
||||||
if not suspect == victim then
|
|
||||||
minetest.log("action", string.format("%s killed %s using /kill", suspect, victim))
|
|
||||||
else
|
|
||||||
minetest.log("action", string.format("%s committed suicide using /kill", victim))
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.registered_chatcommands["kill"] then
|
dofile(modpath.."/kill.lua")
|
||||||
minetest.unregister_chatcommand("kill")
|
dofile(modpath.."/setblock.lua")
|
||||||
end
|
dofile(modpath.."/seed.lua")
|
||||||
minetest.register_chatcommand("kill", {
|
dofile(modpath.."/summon.lua")
|
||||||
params = S("[<name>]"),
|
dofile(modpath.."/say.lua")
|
||||||
description = S("Kill player or yourself"),
|
dofile(modpath.."/list.lua")
|
||||||
privs = {server=true},
|
dofile(modpath.."/sound.lua")
|
||||||
func = function(name, param)
|
|
||||||
if(param == "") then
|
|
||||||
-- Selfkill
|
|
||||||
return handle_kill_command(name, name)
|
|
||||||
else
|
|
||||||
return handle_kill_command(name, param)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_privilege("announce", {
|
|
||||||
description = S("Can use /say"),
|
|
||||||
give_to_singleplayer = false,
|
|
||||||
})
|
|
||||||
minetest.register_chatcommand("say", {
|
|
||||||
params = S("<message>"),
|
|
||||||
description = S("Send a message to every player"),
|
|
||||||
privs = {announce=true},
|
|
||||||
func = function(name, param)
|
|
||||||
if not param then
|
|
||||||
return false, S("Invalid usage, see /help say.")
|
|
||||||
end
|
|
||||||
minetest.chat_send_all(("["..name.."] "..param))
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_chatcommand("setblock", {
|
|
||||||
params = S("<X>,<Y>,<Z> <NodeString>"),
|
|
||||||
description = S("Set node at given position"),
|
|
||||||
privs = {give=true, interact=true},
|
|
||||||
func = function(name, param)
|
|
||||||
local p = {}
|
|
||||||
local nodestring = nil
|
|
||||||
p.x, p.y, p.z, nodestring = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) +(.+)$")
|
|
||||||
p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z)
|
|
||||||
if p.x and p.y and p.z and nodestring then
|
|
||||||
local itemstack = ItemStack(nodestring)
|
|
||||||
if itemstack:is_empty() or not minetest.registered_nodes[itemstack:get_name()] then
|
|
||||||
return false, S("Invalid node")
|
|
||||||
end
|
|
||||||
minetest.set_node(p, {name=nodestring})
|
|
||||||
return true, S("@1 spawned.", nodestring)
|
|
||||||
end
|
|
||||||
return false, S("Invalid parameters (see /help setblock)")
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_chatcommand("list", {
|
|
||||||
description = S("Show who is logged on"),
|
|
||||||
params = "",
|
|
||||||
privs = {},
|
|
||||||
func = function(name)
|
|
||||||
local players = ""
|
|
||||||
for _, player in ipairs(minetest.get_connected_players()) do
|
|
||||||
players = players..player:get_player_name().."\n"
|
|
||||||
end
|
|
||||||
minetest.chat_send_player(name, players)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_chatcommand("seed", {
|
|
||||||
description = S("Displays the world seed"),
|
|
||||||
params = "",
|
|
||||||
privs = {},
|
|
||||||
func = function(name)
|
|
||||||
minetest.chat_send_player(name, minetest.get_mapgen_setting("seed"))
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
local function register_chatcommand_alias(alias, cmd)
|
|
||||||
local def = minetest.chatcommands[cmd]
|
|
||||||
minetest.register_chatcommand(alias, def)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Replace spawnentity cmd to disallow spawning of hostile mobs if disabled
|
|
||||||
local orig_func = minetest.registered_chatcommands["spawnentity"].func
|
|
||||||
local cmd = table.copy(minetest.registered_chatcommands["spawnentity"])
|
|
||||||
cmd.func = function(name, param)
|
|
||||||
local ent = minetest.registered_entities[param]
|
|
||||||
if minetest.settings:get_bool("only_peaceful_mobs", false) and ent and ent._cmi_is_mob and ent.type == "monster" then
|
|
||||||
return false, S("Only peaceful mobs allowed!")
|
|
||||||
else
|
|
||||||
local bool, msg = orig_func(name, param)
|
|
||||||
return bool, msg
|
|
||||||
end
|
|
||||||
end
|
|
||||||
minetest.unregister_chatcommand("spawnentity")
|
|
||||||
minetest.register_chatcommand("spawnentity", cmd)
|
|
||||||
|
|
||||||
if minecraftaliases then
|
|
||||||
register_chatcommand_alias("?", "help")
|
|
||||||
register_chatcommand_alias("who", "list")
|
|
||||||
register_chatcommand_alias("pardon", "unban")
|
|
||||||
register_chatcommand_alias("stop", "shutdown")
|
|
||||||
register_chatcommand_alias("summon", "spawnentity")
|
|
||||||
register_chatcommand_alias("tell", "msg")
|
|
||||||
register_chatcommand_alias("w", "msg")
|
|
||||||
register_chatcommand_alias("tp", "teleport")
|
|
||||||
register_chatcommand_alias("clear", "clearinv")
|
|
||||||
|
|
||||||
minetest.register_chatcommand("banlist", {
|
|
||||||
description = S("List bans"),
|
|
||||||
privs = minetest.chatcommands["ban"].privs,
|
|
||||||
func = function(name)
|
|
||||||
return true, S("Ban list: @1", minetest.get_ban_list())
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
|
dofile(modpath.."/alias.lua")
|
59
mods/MISC/mcl_commands/kill.lua
Normal file
59
mods/MISC/mcl_commands/kill.lua
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
local S = minetest.get_translator("mcl_commands")
|
||||||
|
local mod_death_messages = minetest.get_modpath("mcl_death_messages")
|
||||||
|
|
||||||
|
local function handle_kill_command(suspect, victim)
|
||||||
|
if minetest.settings:get_bool("enable_damage") == false then
|
||||||
|
return false, S("Players can't be killed right now, damage has been disabled.")
|
||||||
|
end
|
||||||
|
local victimref = minetest.get_player_by_name(victim)
|
||||||
|
if victimref == nil then
|
||||||
|
return false, S("Player @1 does not exist.", victim)
|
||||||
|
elseif victimref:get_hp() <= 0 then
|
||||||
|
if suspect == victim then
|
||||||
|
return false, S("You are already dead")
|
||||||
|
else
|
||||||
|
return false, S("@1 is already dead", victim)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- If player holds a totem of undying, destroy it before killing,
|
||||||
|
-- so it doesn't rescue the player.
|
||||||
|
local wield = victimref:get_wielded_item()
|
||||||
|
if wield:get_name() == "mobs_mc:totem" then
|
||||||
|
victimref:set_wielded_item("")
|
||||||
|
end
|
||||||
|
if mod_death_messages then
|
||||||
|
local msg
|
||||||
|
if suspect == victim then
|
||||||
|
msg = S("@1 committed suicide.", victim)
|
||||||
|
else
|
||||||
|
msg = S("@1 was killed by @2.", victim, suspect)
|
||||||
|
end
|
||||||
|
mcl_death_messages.player_damage(victimref, msg)
|
||||||
|
end
|
||||||
|
-- DIE!
|
||||||
|
victimref:set_hp(0)
|
||||||
|
-- Log
|
||||||
|
if not suspect == victim then
|
||||||
|
minetest.log("action", string.format("%s killed %s using /kill", suspect, victim))
|
||||||
|
else
|
||||||
|
minetest.log("action", string.format("%s committed suicide using /kill", victim))
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.registered_chatcommands["kill"] then
|
||||||
|
minetest.unregister_chatcommand("kill")
|
||||||
|
end
|
||||||
|
minetest.register_chatcommand("kill", {
|
||||||
|
params = S("[<name>]"),
|
||||||
|
description = S("Kill player or yourself"),
|
||||||
|
privs = {server=true},
|
||||||
|
func = function(name, param)
|
||||||
|
if(param == "") then
|
||||||
|
-- Selfkill
|
||||||
|
return handle_kill_command(name, name)
|
||||||
|
else
|
||||||
|
return handle_kill_command(name, param)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
14
mods/MISC/mcl_commands/list.lua
Normal file
14
mods/MISC/mcl_commands/list.lua
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
local S = minetest.get_translator("mcl_commands")
|
||||||
|
|
||||||
|
minetest.register_chatcommand("list", {
|
||||||
|
description = S("Show who is logged on"),
|
||||||
|
params = "",
|
||||||
|
privs = {},
|
||||||
|
func = function(name)
|
||||||
|
local players = ""
|
||||||
|
for _, player in ipairs(minetest.get_connected_players()) do
|
||||||
|
players = players..player:get_player_name().."\n"
|
||||||
|
end
|
||||||
|
minetest.chat_send_player(name, players)
|
||||||
|
end
|
||||||
|
})
|
18
mods/MISC/mcl_commands/say.lua
Normal file
18
mods/MISC/mcl_commands/say.lua
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
local S = minetest.get_translator("mcl_commands")
|
||||||
|
|
||||||
|
minetest.register_privilege("announce", {
|
||||||
|
description = S("Can use /say"),
|
||||||
|
give_to_singleplayer = false,
|
||||||
|
})
|
||||||
|
minetest.register_chatcommand("say", {
|
||||||
|
params = S("<message>"),
|
||||||
|
description = S("Send a message to every player"),
|
||||||
|
privs = {announce=true},
|
||||||
|
func = function(name, param)
|
||||||
|
if not param then
|
||||||
|
return false, S("Invalid usage, see /help say.")
|
||||||
|
end
|
||||||
|
minetest.chat_send_all(("["..name.."] "..param))
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
})
|
10
mods/MISC/mcl_commands/seed.lua
Normal file
10
mods/MISC/mcl_commands/seed.lua
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
local S = minetest.get_translator("mcl_commands")
|
||||||
|
|
||||||
|
minetest.register_chatcommand("seed", {
|
||||||
|
description = S("Displays the world seed"),
|
||||||
|
params = "",
|
||||||
|
privs = {},
|
||||||
|
func = function(name)
|
||||||
|
minetest.chat_send_player(name, "Seed: "..minetest.get_mapgen_setting("seed"))
|
||||||
|
end
|
||||||
|
})
|
22
mods/MISC/mcl_commands/setblock.lua
Normal file
22
mods/MISC/mcl_commands/setblock.lua
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
local S = minetest.get_translator("mcl_commands")
|
||||||
|
|
||||||
|
minetest.register_chatcommand("setblock", {
|
||||||
|
params = S("<X>,<Y>,<Z> <NodeString>"),
|
||||||
|
description = S("Set node at given position"),
|
||||||
|
privs = {give=true, interact=true},
|
||||||
|
func = function(name, param)
|
||||||
|
local p = {}
|
||||||
|
local nodestring = nil
|
||||||
|
p.x, p.y, p.z, nodestring = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) +(.+)$")
|
||||||
|
p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z)
|
||||||
|
if p.x and p.y and p.z and nodestring then
|
||||||
|
local itemstack = ItemStack(nodestring)
|
||||||
|
if itemstack:is_empty() or not minetest.registered_nodes[itemstack:get_name()] then
|
||||||
|
return false, S("Invalid node")
|
||||||
|
end
|
||||||
|
minetest.set_node(p, {name=nodestring})
|
||||||
|
return true, S("@1 spawned.", nodestring)
|
||||||
|
end
|
||||||
|
return false, S("Invalid parameters (see /help setblock)")
|
||||||
|
end,
|
||||||
|
})
|
48
mods/MISC/mcl_commands/sound.lua
Normal file
48
mods/MISC/mcl_commands/sound.lua
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
local S = minetest.get_translator("mcl_commands")
|
||||||
|
|
||||||
|
minetest.register_chatcommand("playsound",{
|
||||||
|
params = S("<sound> <target>"), --TODO:add source
|
||||||
|
description = S("Play a sound. Arguments: <sound>: name of the sound. <target>: Target."),
|
||||||
|
privs = {server = true},
|
||||||
|
func = function(name, params)
|
||||||
|
local P = {}
|
||||||
|
local i = 0
|
||||||
|
for str in string.gmatch(params, "([^ ]+)") do
|
||||||
|
i = i + 1
|
||||||
|
P[i] = str
|
||||||
|
end
|
||||||
|
|
||||||
|
local params = {}
|
||||||
|
if P[1] == tostring(P[1]) then
|
||||||
|
params.name = P[1]
|
||||||
|
else
|
||||||
|
return false, S("Sound name is invalid!") --TODO: add mc chat message
|
||||||
|
end
|
||||||
|
|
||||||
|
if P[2] == tostring(P[2]) and minetest.player_exists(P[2]) then
|
||||||
|
params.target = P[2]
|
||||||
|
else
|
||||||
|
return false, S("Target is invalid!!")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- if P[3] then
|
||||||
|
-- params.pos = nil --TODO:position
|
||||||
|
-- else
|
||||||
|
-- params.pos = nil
|
||||||
|
-- end
|
||||||
|
|
||||||
|
-- if P[4] == tonumber(P[4]) then
|
||||||
|
-- params.gain = P[4]
|
||||||
|
-- else
|
||||||
|
-- params.gain = 1.0
|
||||||
|
-- end
|
||||||
|
|
||||||
|
-- if P[5] == tonumber(P[5]) then
|
||||||
|
-- params.pitch = P[5]
|
||||||
|
-- else
|
||||||
|
-- params.pitch = 1.0
|
||||||
|
-- end
|
||||||
|
minetest.sound_play({name = params.name}, {to_player = params.target}, true) --TODO: /stopsound
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
})
|
15
mods/MISC/mcl_commands/summon.lua
Normal file
15
mods/MISC/mcl_commands/summon.lua
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
local S = minetest.get_translator("mcl_commands")
|
||||||
|
|
||||||
|
local orig_func = minetest.registered_chatcommands["spawnentity"].func
|
||||||
|
local cmd = table.copy(minetest.registered_chatcommands["spawnentity"])
|
||||||
|
cmd.func = function(name, param)
|
||||||
|
local ent = minetest.registered_entities[param]
|
||||||
|
if minetest.settings:get_bool("only_peaceful_mobs", false) and ent and ent._cmi_is_mob and ent.type == "monster" then
|
||||||
|
return false, S("Only peaceful mobs allowed!")
|
||||||
|
else
|
||||||
|
local bool, msg = orig_func(name, param)
|
||||||
|
return bool, msg
|
||||||
|
end
|
||||||
|
end
|
||||||
|
minetest.unregister_chatcommand("spawnentity")
|
||||||
|
minetest.register_chatcommand("summon", cmd)
|
Loading…
Reference in a new issue