local SEPARATOR = "________________" SEPARATOR = SEPARATOR .. SEPARATOR .. SEPARATOR function build_scheme(command) local str = command.name .. " " for i,arg in ipairs(command.args) do if arg.optional then str = str .. "[" .. arg.name .. "] " else str = str .. "<" .. arg.name .. "> " end end return str end console.add_command( "clear", "Clears the console", function() local document = Document.new("core:console") document.log.text = "" end ) console.add_command( "help name:str=''", "Show help infomation for the specified command", function(args, kwargs) local name = args[1] if #name == 0 then local commands = console.get_commands_list() table.sort(commands) local str = "Available commands:" for i,k in ipairs(commands) do str = str .. "\n " .. build_scheme(console.get_command_info(k)) end return str .. "\nuse 'help '" end local command = console.get_command_info(name) if command == nil then return string.format("command %q not found", name) end local where = ":" local str = SEPARATOR .. "\n" .. command.description .. "\n" .. name .. " " for _, arg in ipairs(command.args) do where = where .. "\n " .. arg.name .. " - " .. arg.type if arg.optional then str = str .. "[" .. arg.name .. "] " where = where .. " (optional)" else str = str .. "<" .. arg.name .. "> " end end if #command.args > 0 then str = str .. "\nwhere" .. where end return str .. "\n" .. SEPARATOR end ) console.add_command( "time.uptime", "Get time elapsed since the engine started", function() local uptime = time.uptime() local formatted_uptime = "" local t = string.formatted_time(uptime) formatted_uptime = t.h .. "h " .. t.m .. "m " .. t.s .. "s" return formatted_uptime .. " (" .. uptime .. "s)" end ) console.add_command( "tp entity:sel=$entity.id x:num~pos.x y:num~pos.y z:num~pos.z", "Teleport entity", function(args, kwargs) local eid, x, y, z = unpack(args) local entity = entities.get(eid) if entity then entity.transform:set_pos({x, y, z}) end end ) console.add_command( "echo value:str", "Print value to the console", function(args, kwargs) return args[1] end ) console.add_command( "time.set value:num", "Set day time [0..1] where 0 is midnight, 0.5 is noon", function(args, kwargs) world.set_day_time(args[1]) return "Time set to " .. args[1] end ) console.add_command( "time.daycycle operation:[stop|reset]", "Control time.daycycle", function(args, kwargs) local operation = args[1] if operation == "stop" then world.set_day_time_speed(0) return "Daily cycle has stopped" else world.set_day_time_speed(1.0) return "Daily cycle has started" end end ) console.add_command( "blocks.fill id:str x1:int~pos.x y1:int~pos.y z1:int~pos.z ".. "x2:int~pos.x y2:int~pos.y z2:int~pos.z", "Fill specified zone with blocks", function(args, kwargs) local name, x1,y1,z1, x2,y2,z2 = unpack(args) local id = block.index(name) for y=y1,y2 do for z=z1,z2 do for x=x1,x2 do block.set(x, y, z, id) end end end local w = math.floor(math.abs(x2-x1+1) + 0.5) local h = math.floor(math.abs(y2-y1+1) + 0.5) local d = math.floor(math.abs(z2-z1+1) + 0.5) return tostring(w * h * d) .. " blocks set" end ) console.add_command( "player.respawn player:sel=$obj.id", "Respawn player entity", function(args, kwargs) local eid = entities.spawn("base:player", {player.get_pos(args[1])}):get_uid() player.set_entity(args[1], eid) return "spawned new player entity #" .. tostring(eid) end ) console.add_command( "entity.despawn entity:sel=$entity.selected", "Despawn entity", function(args, kwargs) local eid = args[1] local entity = entities.get(eid) if entity ~= nil then entity:despawn() return "despawned entity #" .. tostring(eid) end end ) console.add_command( "fragment.save x1:int~pos.x y1:int~pos.y z1:int~pos.z ".. "x2:int~pos.x y2:int~pos.y z2:int~pos.z ".. "name:str='untitled' crop:bool=false", "Save fragment", function(args, kwargs) local x1 = args[1] local y1 = args[2] local z1 = args[3] local x2 = args[4] local y2 = args[5] local z2 = args[6] local name = args[7] local crop = args[8] local fragment = generation.create_fragment( {x1, y1, z1}, {x2, y2, z2}, crop, false ) local filename = 'export:'..name..'.vox' generation.save_fragment(fragment, filename, crop) console.log("fragment with size "..vec3.tostring(fragment.size).. " has been saved as "..file.resolve(filename)) end ) console.add_command( "fragment.crop filename:str", "Crop fragment", function(args, kwargs) local filename = args[1] local fragment = generation.load_fragment(filename) fragment:crop() generation.save_fragment(fragment, filename, crop) console.log("fragment with size "..vec3.tostring(fragment.size).. " has been saved as "..file.resolve(filename)) end ) console.add_command( "fragment.place file:str x:num~pos.x y:num~pos.y z:num~pos.z rotation:int=0", "Place fragment to the world", function(args, kwargs) local filename = args[1] local x = args[2] local y = args[3] local z = args[4] local rotation = args[5] local fragment = generation.load_fragment(filename) fragment:place({x, y, z}, rotation) end )