ThePython10110 f302f1f073 New stuff
2024-05-29 17:33:04 -07:00

68 lines
2.9 KiB
Lua

--local bc = better_commands
local S = minetest.get_translator(minetest.get_current_modname())
better_commands.register_command("setblock", {
params = S("<pos> <block> [keep|replace]"),
description = S("Places <block> at <pos>. If keep, only replace air"),
func = function(name, param, context)
local split_param = better_commands.parse_params(param)
if not split_param[1] and split_param[2] and split_param[3] and split_param[4] then
return false, nil, 0
end
local keep
if split_param[5] then
keep = split_param[5][3]:lower()
if keep ~= "keep" and keep ~= "replace" then
return false, better_commands.error(S("Last argument ust be either 'replace' (default)), 'keep', or missing, not @1", keep)), 0
end
end
local pos, err = better_commands.parse_pos(split_param, 1, context)
if err or not pos then return false, better_commands.error(err), 0 end
local node, meta, err = better_commands.parse_node(split_param[4])
if err or not node then return false, better_commands.error(err), 0 end
if keep == "keep" and minetest.get_node(pos).name ~= "air" then
return false, better_commands.error(S("Position is not empty")), 0
end
minetest.set_node(pos, node)
if meta and meta ~= {} then
local node_meta = minetest.get_meta(pos)
for key, value in pairs(meta) do
node_meta:set_string(key, value)
end
end
return true, S("Node set"), 1
end
})
better_commands.register_command_alias("setnode", "setblock")
--[[ bad (add group/* support)
better_commands.register_command("testforblock", {
params = "<pos> <node>",
description = "Tests whether a certain node is in a specific location.",
privs = {server = true},
func = function (name, param, context)
local split_param = better_commands.parse_params(param)
local pos, err = better_commands.parse_pos(split_param, 1, context)
if err or not pos then return false, better_commands.error(err), 0 end
local node_param = split_param[4]
local node, node_meta, err = better_commands.parse_node(split_param[4])
if err or not node then return false, better_commands.error(err), 0 end
local found_node = minetest.get_node(pos)
if found_node.name == node.name then
local matches = true
if node_meta then
local meta = minetest.get_meta(pos)
for key, value in pairs(node_meta) do
if meta:get_string(key) ~= value then
end
else
return true, S("Node matches"), 1
end
end
return false, better_commands.error("Node does not match"), 0
end
})]]