calandria.server = {
after_place = function(pos, placer, _itemstack, _pointed)
local meta = minetest.get_meta(pos)
meta:from_table({hello = "world"})
end,
make = function(player)
local fs = orb.fs.empty()
orb.fs.seed(orb.fs.proxy(fs, "root", fs), {player})
return { fs = fs, sessions = {} }
end,
exec = function(input, player)
if(not envs[player]) then return "No account on this server." end
local out = {}
envs[player].write = function(x) table.insert(out, #out) end
orb.shell.exec(fs, envs[player], input)
return "$ " .. input .. "\n" .. table.concat(out, "\n") .. "\n\n"
end,
digiline_action = function(pos, node, channel, msg)
if(type(msg) == "function") then
local value = msg()
if not value.msg then return end
print("Executing "..value.msg)
local server = minetest.get_meta(pos):to_table()
if not server then
print("No server at position: " ..pos.x..":"..pos.y..":"..pos.z)
return
end
local result = server.exec(value.msg, value.player)
digiline:receptor_send(pos, digiline.rules.default, channel, result)
end
end,
}
minetest.register_node("calandria:server", {
description = "server",
drawtype = "nodebox",
paramtype = "light",
paramtype2 = 'facedir',
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
},
tiles =
{'cal_server_side.png', 'cal_server_side.png',
'cal_server_side.png', 'cal_server_side.png',
'cal_server_side.png', 'cal_server_front.png'},
groups = {cracky=3,level=1},
digiline = {
receptor = {},
effector = {
action = calandria.server.digiline_action
},
},
after_place_node = calandria.server.after_place
TODO})