Code license : GPLv2/later
Mod dependencies: default
The code can be found on GitHub, right here
Code: Select all
Current crafting recipe:
copper_ingot glass copper_ingot
glass mese_crystal glass
copper_ingot glass copper_ingot
I'm open to suggestions
Spoiler
Code: Select all
minetest.register_node("mini_sun:glow", {
drawtype = "airlike",
walkable = false,
pointable = false,
diggable = false,
climbable = false,
buildable_to = true,
light_source = 14,
paramtype = light
})
minetest.register_craft({
output = '"mini_sun:source" 2',
recipe = {
{'default:glass', 'default:glass', 'default:glass'},
{'default:glass', 'default:torch', 'default:glass'},
{'default:glass', 'default:glass', 'default:glass'},
}
})
minetest.register_node("mini_sun:source", {
tiles = { "mini_sun.png" },
drawtype = "glasslike",
groups = { cracky=3, oddly_breakable_by_hand=3 },
--sounds = default.node_sound_glass_defaults(),
drop = "mini_sun:source",
light_source = 14,
paramtype = light,
on_construct = function(pos)
for nx = pos.x-3, pos.x+3 do
for ny = pos.y-3, pos.y+3 do
for nz = pos.z-3, pos.z+3 do
local npos = {x=nx, y=ny, z=nz}
if minetest.get_node(npos).name == "air" then
minetest.add_node(npos, {name = "mini_sun:glow"})
end
end
end
end
end,
on_destruct = function(pos)
for nx = pos.x-3, pos.x+3 do
for ny = pos.y-3, pos.y+3 do
for nz = pos.z-3, pos.z+3 do
local npos = {x=nx, y=ny, z=nz}
if minetest.get_node(npos).name == "mini_sun:glow" then
minetest.remove_node(npos)
end
end
end
end
end
})
The more important issue is that it's noticeably slow, even on my overpowered machine. By noticeably, I mean the lights don't all come on a once. Now you might say, "well, you add them sequentially, so what do you expect?" My question is twofold. Is there a way to have all the light generating nodes go on at once (as much as possible)? Is there a reason this loop of 27 add_node calls is so slow (with version 4.7) that I can watch it stagger through them?
The less critical issue has to do with removing the nodes. If two mini sun source nodes are placed near each other, they remove each other's glow nodes when destructed. I know, I know, "that's what you told them to do" you say. Okay, well how do I avoid that? Is there a way of implementing node hierarchies perhaps? Or maybe some other tactic to handle this scenario?