lib_materials/lib_materials_chatcommands.lua

162 lines
5.2 KiB
Lua

local S = lib_materials.intllib
minetest.register_chatcommand("emerge_area", {
params = "x1 y1 z1 x2 y2 z2",
description = S("Generate map in a square box from pos1(x1,y1,z1) to pos2(x2,y2,z2)./nUsage: /emerge_area x1 y1 z1 x2 y2 z2"),
func = function(name, params)
-- local found, _, s_x1, s_y1, s_z1, s_x2, s_y2, s_z2 = params:find("^%s*(%d+)%s*(-?%d*)%s*$")
local found, _, s_x1, s_y1, s_z1, s_x2, s_y2, s_z2 = params:find("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[ ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
if found == nil then
minetest.chat_send_player(name, "Usage: /mapgen x1 y1 z1 x2 y2 z2")
return
end
local pos1 = {x=tonumber(s_x1), y=tonumber(s_y1), z=tonumber(s_z1)}
local pos2 = {x=tonumber(s_x2), y=tonumber(s_y2), z=tonumber(s_z2)}
local start_time = minetest.get_us_time()
minetest.emerge_area(pos1, pos2, function(blockpos, action, remaining)
local dt = math.floor((minetest.get_us_time() - start_time) / 1000)
local block = (blockpos.x * 16)..","..(blockpos.y * 16)..","..(blockpos.z * 16)
local info = "(mapgen-"..remaining.."-"..dt.."ms) "
if action==core.EMERGE_GENERATED then
minetest.chat_send_player(name, info.."Generated new block at "..block)
elseif (action==core.EMERGE_CANCELLED) or (action==core.EMERGE_ERRORED) then
minetest.chat_send_player(name, info.."Block at "..block.." did not emerge")
else
--minetest.chat_send_player(name, "(mapgen-"..remaining.."-"..dt.."s) Visited block at "..(blockpos.x)..","..(blockpos.y)..","..(blockpos.z))
end
if remaining<=0 then
minetest.chat_send_player(name, "(mapgen-"..dt.."ms) Generation done.")
end
end
)
end
})
minetest.register_chatcommand("emerge_radius", {
params = "radius [max_height]",
description = S("Generate map in a square box of size 2*radius centered at your current position."),
func = function(name, params)
local found, _, s_radius, s_height = params:find("^%s*(%d+)%s*(-?%d*)%s*$")
if found == nil then
minetest.chat_send_player(name, "Usage: /mapgen radius max_height")
return
end
local player = minetest.get_player_by_name(name)
local pos = player:getpos()
local radius = tonumber(s_radius)
local max_height = tonumber(s_height)
if max_height == nil then
max_height = pos.y+1
end
if radius == 0 then
radius = 1
end
local start_pos = {
x = pos.x - radius,
y = pos.y,
z = pos.z - radius
}
local end_pos = {
x = pos.x + radius,
y = max_height,
z = pos.z + radius
}
local start_time = minetest.get_us_time()
minetest.emerge_area(start_pos, end_pos, function(blockpos, action, remaining)
local dt = math.floor((minetest.get_us_time() - start_time) / 1000)
local block = (blockpos.x * 16)..","..(blockpos.y * 16)..","..(blockpos.z * 16)
local info = "(mapgen-"..remaining.."-"..dt.."ms) "
if action==core.EMERGE_GENERATED then
minetest.chat_send_player(name, info.."Generated new block at "..block)
elseif (action==core.EMERGE_CANCELLED) or (action==core.EMERGE_ERRORED) then
minetest.chat_send_player(name, info.."Block at "..block.." did not emerge")
else
--minetest.chat_send_player(name, "(mapgen-"..remaining.."-"..dt.."s) Visited block at "..(blockpos.x)..","..(blockpos.y)..","..(blockpos.z))
end
if remaining<=0 then
minetest.chat_send_player(name, "(mapgen-"..dt.."ms) Generation done.")
end
end
)
end
})
minetest.register_chatcommand("biomes_get", {
params = "",
description = S("List all biomes."),
_doc_items_longdesc = S("List all biomes as registered with minetest.registered_biomes"),
_doc_items_usagehelp = S("Type /biomes_get in the console."),
func = function(name)
local list_biomes = "REGISTERED BIOMES:\n"
local filename = "biomes_list.txt";
local path = minetest.get_worldpath()..'/'..filename;
local file = io.open( path, 'w' );
for biome_name, biome_def in pairs(minetest.registered_biomes) do
list_biomes = list_biomes .. "\t" .. biome_name .. "\n"
end
if( file ) then
if list_biomes ~= nil then
minetest.chat_send_player(name, S(list_biomes))
file:write(list_biomes)
file:close();
end
else
print("[listitems] Error: listToFile '"..tostring( path ).."' could not be written.");
end
end
})
minetest.register_chatcommand("decorations_get", {
params = "",
description = S("List all decorations."),
_doc_items_longdesc = S("List all decorations as registered with minetest.registered_decorations"),
_doc_items_usagehelp = S("Type /decorations_get in the console."),
func = function(name)
local list_decorations = ""
local filename = "decorations_list.txt";
local path = minetest.get_worldpath()..'/'..filename;
local file = io.open( path, 'w' );
minetest.chat_send_player(name, S("Start Decorations List"))
for _, deco_def in pairs(minetest.registered_decorations) do
list_decorations = list_decorations .. dump(deco_def, " ") .. "\n"
--dump(deco_def, list_decorations)
-- if deco_def.deco_type ~= "schematic" then
-- list_decorations = list_decorations .. "\t" .. tostring(deco_def.decoration) .. "\n"
-- end
end
minetest.chat_send_player(name, S("End Decorations List"))
file:write(list_decorations)
file:close();
--minetest.chat_send_player(name, S(list_decorations))
end
})