Simplify clear command
[MineClone/MineClone2.git] / mods / MISC / mcl_commands / init.lua
blobaa3d78d70d966d7544e4c2a1dd111416e495df61
1 local minecraftaliases = true
3 local S
4 if minetest.get_modpath("intllib") then
5 S = intllib.Getter()
6 else
7 S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end
8 end
10 local function handle_clear_command(giver, receiver)
11 if receiver == "" then
12 receiver = giver
13 end
14 local receiverref = minetest.get_player_by_name(receiver)
15 if receiverref == nil then
16 return false, S("Player @1 does not exist.", receiver)
17 end
18 if receiverref:get_inventory():is_empty("main") then
19 if giver == receiver then
20 return false, S("Your inventory is already clear.")
21 else
22 return false, S("@1's inventory is already clear.", receiver)
23 end
24 end
25 if not giver == receiver then
26 minetest.log("action", S("@1 cleared @2's inventory", giver, receiver))
27 end
28 for i=0,receiverref:get_inventory():get_size("main") do
29 receiverref:get_inventory():set_stack("main", i, nil)
30 end
31 if giver == receiver then
32 return true, S("Your inventory was cleared.")
33 else
34 minetest.chat_send_player(receiver, S("Your inventory was cleared."))
35 return true, S("@1's inventory was cleared.", receiver)
36 end
37 end
39 local function handle_kill_command(suspect, victim)
40 if not minetest.settings:get_bool("damage_enabled") then
41 return false, S("Players can't be killed right now, damage has been disabled.")
42 end
43 local victimref = minetest.get_player_by_name(victim)
44 if victimref == nil then
45 return false, S("Player @1 does not exist.", victim)
46 elseif victimref:get_hp() <= 0 then
47 if suspect == victim then
48 return false, S("You are already dead")
49 else
50 return false, S("@1 is already dead", victim)
51 end
52 end
53 if not suspect == victim then
54 minetest.log("action", S("@1 killed @2", suspect, victim))
55 end
56 victimref:set_hp(0)
57 end
59 minetest.register_privilege("clear", {
60 description = S("Can use /clear"),
61 give_to_singleplayer = false
63 minetest.register_privilege("kill", {
64 description = S("Can use /kill"),
65 give_to_singleplayer = false,
67 minetest.register_privilege("announce", {
68 description = S("Can use /say"),
69 give_to_singleplayer = false,
72 minetest.register_chatcommand("clear", {
73 params = S("<name>"),
74 description = S("Clear inventory of player"),
75 privs = {clear=true},
76 func = function(name, param)
77 return handle_clear_command(name, param)
78 end,
81 minetest.register_chatcommand("kill", {
82 params = S("[<name>]"),
83 description = S("Kill player"),
84 privs = {kill=true},
85 func = function(name, param)
86 if(param == "") then
87 -- Selfkill
88 return handle_kill_command(name, name)
89 else
90 return handle_kill_command(name, param)
91 end
92 end,
95 minetest.register_chatcommand("say", {
96 params = S("<message>"),
97 description = S("Send a message to every player"),
98 privs = {announce=true},
99 func = function(name, param)
100 if not param then
101 return false, S("Invalid usage, see /help say.")
103 minetest.chat_send_all(("["..name.."] "..param))
104 return true
105 end,
108 minetest.register_chatcommand("setblock", {
109 params = S("<X>,<Y>,<Z> <NodeString>"),
110 description = S("Set node at given position"),
111 privs = {give=true, interact=true},
112 func = function(name, param)
113 local p = {}
114 local nodestring = nil
115 p.x, p.y, p.z, nodestring = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) +(.+)$")
116 p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z)
117 if p.x and p.y and p.z and nodestring then
118 local itemstack = ItemStack(nodestring)
119 if itemstack:is_empty() or not minetest.registered_nodes[itemstack:get_name()] then
120 return false, S("Invalid node")
122 minetest.set_node(p, {name=nodestring})
123 return true, S("@1 spawned.", nodestring)
125 return false, S("Invalid parameters (see /help setblock)")
126 end,
129 minetest.register_chatcommand("list", {
130 description = "Show who is logged on",
131 params = "",
132 privs = {},
133 func = function(name)
134 local players = ""
135 for _, player in ipairs(minetest.get_connected_players()) do
136 players = players..player:get_player_name().."\n"
138 minetest.chat_send_player(name, players)
142 minetest.register_chatcommand("seed", {
143 description = "Displays the world seed",
144 params = "",
145 privs = {},
146 func = function(name)
147 minetest.chat_send_player(name, minetest.get_mapgen_setting("seed"))
151 local function register_chatcommand_alias(alias, cmd)
152 local def = minetest.chatcommands[cmd]
153 minetest.register_chatcommand(alias, def)
156 if minecraftaliases then
157 register_chatcommand_alias("?", "help")
158 register_chatcommand_alias("who", "list")
159 register_chatcommand_alias("pardon", "unban")
160 register_chatcommand_alias("stop", "shutdown")
161 register_chatcommand_alias("summon", "spawnentity")
162 register_chatcommand_alias("tell", "msg")
163 register_chatcommand_alias("w", "msg")
164 register_chatcommand_alias("tp", "teleport")
166 minetest.register_chatcommand("banlist", {
167 description = S("List bans"),
168 privs = minetest.chatcommands["ban"].privs,
169 func = function(name)
170 return true, S("Ban list: @1", core.get_ban_list())
171 end,