Move /give, /giveme, /spawnentity and /pulverize to builtin/chatcommands.lua
authorPerttu Ahola <celeron55@gmail.com>
Mon, 23 Jul 2012 14:43:08 +0000 (17:43 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Mon, 23 Jul 2012 14:43:08 +0000 (17:43 +0300)
builtin/chatcommands.lua
games/minimal/mods/default/init.lua

index f9715d92c62751bb11e0cd232be77fe8c8fa00f1..da9e6c78c740ac22a7af1c4b573c42b2816436ad 100644 (file)
@@ -387,4 +387,112 @@ minetest.register_chatcommand("mods", {
                end
                minetest.chat_send_player(name, response)
        end,
-})
\ No newline at end of file
+})
+
+local function handle_give_command(cmd, giver, receiver, stackstring)
+       minetest.log("action", giver.." invoked "..cmd..', stackstring="'
+                       ..stackstring..'"')
+       minetest.log(cmd..' invoked, stackstring="'..stackstring..'"')
+       local itemstack = ItemStack(stackstring)
+       if itemstack:is_empty() then
+               minetest.chat_send_player(giver, 'error: cannot give an empty item')
+               return
+       elseif not itemstack:is_known() then
+               minetest.chat_send_player(giver, 'error: cannot give an unknown item')
+               return
+       end
+       local receiverref = minetest.env:get_player_by_name(receiver)
+       if receiverref == nil then
+               minetest.chat_send_player(giver, receiver..' is not a known player')
+               return
+       end
+       local leftover = receiverref:get_inventory():add_item("main", itemstack)
+       if leftover:is_empty() then
+               partiality = ""
+       elseif leftover:get_count() == itemstack:get_count() then
+               partiality = "could not be "
+       else
+               partiality = "partially "
+       end
+       -- The actual item stack string may be different from what the "giver"
+       -- entered (e.g. big numbers are always interpreted as 2^16-1).
+       stackstring = itemstack:to_string()
+       if giver == receiver then
+               minetest.chat_send_player(giver, '"'..stackstring
+                       ..'" '..partiality..'added to inventory.');
+       else
+               minetest.chat_send_player(giver, '"'..stackstring
+                       ..'" '..partiality..'added to '..receiver..'\'s inventory.');
+               minetest.chat_send_player(receiver, '"'..stackstring
+                       ..'" '..partiality..'added to inventory.');
+       end
+end
+
+minetest.register_chatcommand("give", {
+       params = "<name> <itemstring>",
+       description = "give item to player",
+       privs = {give=true},
+       func = function(name, param)
+               local toname, itemstring = string.match(param, "^([^ ]+) +(.+)$")
+               if not toname or not itemstring then
+                       minetest.chat_send_player(name, "name and itemstring required")
+                       return
+               end
+               handle_give_command("/give", name, toname, itemstring)
+       end,
+})
+minetest.register_chatcommand("giveme", {
+       params = "<itemstring>",
+       description = "give item to yourself",
+       privs = {give=true},
+       func = function(name, param)
+               local itemstring = string.match(param, "(.+)$")
+               if not itemstring then
+                       minetest.chat_send_player(name, "itemstring required")
+                       return
+               end
+               handle_give_command("/giveme", name, name, itemstring)
+       end,
+})
+minetest.register_chatcommand("spawnentity", {
+       params = "<entityname>",
+       description = "spawn entity at your position",
+       privs = {give=true, interact=true},
+       func = function(name, param)
+               local entityname = string.match(param, "(.+)$")
+               if not entityname then
+                       minetest.chat_send_player(name, "entityname required")
+                       return
+               end
+               print('/spawnentity invoked, entityname="'..entityname..'"')
+               local player = minetest.env:get_player_by_name(name)
+               if player == nil then
+                       print("Unable to spawn entity, player is nil")
+                       return true -- Handled chat message
+               end
+               local p = player:getpos()
+               p.y = p.y + 1
+               minetest.env:add_entity(p, entityname)
+               minetest.chat_send_player(name, '"'..entityname
+                               ..'" spawned.');
+       end,
+})
+minetest.register_chatcommand("pulverize", {
+       params = "",
+       description = "delete item in hand",
+       privs = {},
+       func = function(name, param)
+               local player = minetest.env:get_player_by_name(name)
+               if player == nil then
+                       print("Unable to pulverize, player is nil")
+                       return true -- Handled chat message
+               end
+               if player:get_wielded_item():is_empty() then
+                       minetest.chat_send_player(name, 'Unable to pulverize, no item in hand.')
+               else
+                       player:set_wielded_item(nil)
+                       minetest.chat_send_player(name, 'An item was pulverized.')
+               end
+       end,
+})
+
index b3bbc5fe8f09cc3b991b92403f170608d8740a3d..428dfd9f497f00640ea25c92f1c87bb3093f82a4 100644 (file)
@@ -1722,133 +1722,24 @@ function on_punchnode(p, node)
 end
 minetest.register_on_punchnode(on_punchnode)
 
-local function handle_give_command(cmd, giver, receiver, stackstring)
-       if not minetest.get_player_privs(giver)["give"] then
-               minetest.chat_send_player(giver, "error: you don't have permission to give")
-               return
-       end
-       minetest.debug("DEBUG: "..cmd..' invoked, stackstring="'..stackstring..'"')
-       minetest.log(cmd..' invoked, stackstring="'..stackstring..'"')
-       local itemstack = ItemStack(stackstring)
-       if itemstack:is_empty() then
-               minetest.chat_send_player(giver, 'error: cannot give an empty item')
-               return
-       elseif not itemstack:is_known() then
-               minetest.chat_send_player(giver, 'error: cannot give an unknown item')
-               return
-       end
-       local receiverref = minetest.env:get_player_by_name(receiver)
-       if receiverref == nil then
-               minetest.chat_send_player(giver, receiver..' is not a known player')
-               return
-       end
-       local leftover = receiverref:get_inventory():add_item("main", itemstack)
-       if leftover:is_empty() then
-               partiality = ""
-       elseif leftover:get_count() == itemstack:get_count() then
-               partiality = "could not be "
-       else
-               partiality = "partially "
-       end
-       -- The actual item stack string may be different from what the "giver"
-       -- entered (e.g. big numbers are always interpreted as 2^16-1).
-       stackstring = itemstack:to_string()
-       if giver == receiver then
-               minetest.chat_send_player(giver, '"'..stackstring
-                       ..'" '..partiality..'added to inventory.');
-       else
-               minetest.chat_send_player(giver, '"'..stackstring
-                       ..'" '..partiality..'added to '..receiver..'\'s inventory.');
-               minetest.chat_send_player(receiver, '"'..stackstring
-                       ..'" '..partiality..'added to inventory.');
-       end
-end
-
-minetest.register_on_chat_message(function(name, message)
-       --print("default on_chat_message: name="..dump(name).." message="..dump(message))
-       local cmd = "/giveme"
-       if message:sub(0, #cmd) == cmd then
-               local stackstring = string.match(message, cmd.." (.*)")
-               if stackstring == nil then
-                       minetest.chat_send_player(name, 'usage: '..cmd..' stackstring')
-                       return true -- Handled chat message
-               end
-               handle_give_command(cmd, name, name, stackstring)
-               return true
-       end
-       local cmd = "/give"
-       if message:sub(0, #cmd) == cmd then
-               local receiver, stackstring = string.match(message, cmd.." ([%a%d_-]+) (.*)")
-               if receiver == nil or stackstring == nil then
-                       minetest.chat_send_player(name, 'usage: '..cmd..' name stackstring')
-                       return true -- Handled chat message
-               end
-               handle_give_command(cmd, name, receiver, stackstring)
-               return true
-       end
-       local cmd = "/spawnentity"
-       if message:sub(0, #cmd) == cmd then
-               if not minetest.get_player_privs(name)["give"] then
-                       minetest.chat_send_player(name, "you don't have permission to spawn (give)")
-                       return true -- Handled chat message
-               end
-               if not minetest.get_player_privs(name)["interact"] then
-                       minetest.chat_send_player(name, "you don't have permission to interact")
-                       return true -- Handled chat message
-               end
-               local entityname = string.match(message, cmd.." (.*)")
-               if entityname == nil then
-                       minetest.chat_send_player(name, 'usage: '..cmd..' entityname')
-                       return true -- Handled chat message
-               end
-               print(cmd..' invoked, entityname="'..entityname..'"')
-               local player = minetest.env:get_player_by_name(name)
-               if player == nil then
-                       print("Unable to spawn entity, player is nil")
-                       return true -- Handled chat message
-               end
-               local p = player:getpos()
-               p.y = p.y + 1
-               minetest.env:add_entity(p, entityname)
-               minetest.chat_send_player(name, '"'..entityname
-                               ..'" spawned.');
-               return true -- Handled chat message
-       end
-       local cmd = "/pulverize"
-       if message:sub(0, #cmd) == cmd then
-               local player = minetest.env:get_player_by_name(name)
-               if player == nil then
-                       print("Unable to pulverize, player is nil")
-                       return true -- Handled chat message
-               end
-               if player:get_wielded_item():is_empty() then
-                       minetest.chat_send_player(name, 'Unable to pulverize, no item in hand.')
-               else
-                       player:set_wielded_item(nil)
-                       minetest.chat_send_player(name, 'An item was pulverized.')
-               end
-               return true
-       end
-end)
-
 --
 -- Test some things
 --
 
 local function test_get_craft_result()
-       print("test_get_craft_result()")
+       minetest.log("info", "test_get_craft_result()")
        -- normal
        local input = {
                method = "normal",
                width = 2,
                items = {"", "default:coal_lump", "", "default:stick"}
        }
-       print("torch crafting input: "..dump(input))
+       minetest.log("info", "torch crafting input: "..dump(input))
        local output, decremented_input = minetest.get_craft_result(input)
-       print("torch crafting output: "..dump(output))
-       print("torch crafting decremented input: "..dump(decremented_input))
+       minetest.log("info", "torch crafting output: "..dump(output))
+       minetest.log("info", "torch crafting decremented input: "..dump(decremented_input))
        assert(output.item)
-       print("torch crafting output.item:to_table(): "..dump(output.item:to_table()))
+       minetest.log("info", "torch crafting output.item:to_table(): "..dump(output.item:to_table()))
        assert(output.item:get_name() == "default:torch")
        assert(output.item:get_count() == 4)
        -- fuel
@@ -1857,10 +1748,10 @@ local function test_get_craft_result()
                width = 1,
                items = {"default:coal_lump"}
        }
-       print("coal fuel input: "..dump(input))
+       minetest.log("info", "coal fuel input: "..dump(input))
        local output, decremented_input = minetest.get_craft_result(input)
-       print("coal fuel output: "..dump(output))
-       print("coal fuel decremented input: "..dump(decremented_input))
+       minetest.log("info", "coal fuel output: "..dump(output))
+       minetest.log("info", "coal fuel decremented input: "..dump(decremented_input))
        assert(output.time)
        assert(output.time > 0)
        -- cook
@@ -1869,14 +1760,14 @@ local function test_get_craft_result()
                width = 1,
                items = {"default:cobble"}
        }
-       print("cobble cooking input: "..dump(output))
+       minetest.log("info", "cobble cooking input: "..dump(output))
        local output, decremented_input = minetest.get_craft_result(input)
-       print("cobble cooking output: "..dump(output))
-       print("cobble cooking decremented input: "..dump(decremented_input))
+       minetest.log("info", "cobble cooking output: "..dump(output))
+       minetest.log("info", "cobble cooking decremented input: "..dump(decremented_input))
        assert(output.time)
        assert(output.time > 0)
        assert(output.item)
-       print("cobble cooking output.item:to_table(): "..dump(output.item:to_table()))
+       minetest.log("info", "cobble cooking output.item:to_table(): "..dump(output.item:to_table()))
        assert(output.item:get_name() == "default:stone")
        assert(output.item:get_count() == 1)
 end