fac56f263c
Can be true, false, or a table with two entries (topnode, overhang). If false, the main pole extends all the way up to the specified height, and the light is simply placed next to it. if true, the main pole extends all the way up, and then steps right by 1m, with the light hanging from it. This is the default. if a table, the main pole stops 1m short of the top, and the two specified nodes are placed above it, with the overhang to the right, and the light hanging under it. also fixed the custom base node not getting _digilines extension when called-for
267 lines
8.5 KiB
Lua
267 lines
8.5 KiB
Lua
-- generate the simple fence-based streetlights
|
|
|
|
local enable_digilines = minetest.get_modpath("digilines")
|
|
|
|
ilights.player_channels = {} -- last light source channel name that was set by a given player
|
|
|
|
if enable_digilines then
|
|
|
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
if not player then return end
|
|
if fields.channel and fields.channel ~= "" and formname == "simple_streetlights:set_channel" then
|
|
local playername = player:get_player_name()
|
|
minetest.chat_send_player(playername, "*** The light source on all streetlights placed from now on will have the channel set to \""..fields.channel.."\"")
|
|
ilights.player_channels[playername] = fields.channel
|
|
end
|
|
end)
|
|
|
|
function ilights.digiline_on_use(itemstack, user, pointed_thing)
|
|
if user and user:get_player_control().sneak then
|
|
local name = user:get_player_name()
|
|
local form ="formspec_version[4]"..
|
|
"size[8,4]"..
|
|
"button_exit[3,2.5;2,0.5;proceed;Proceed]"..
|
|
"field[1.75,1.5;4.5,0.5;channel;Channel for future streetlights;]"
|
|
minetest.show_formspec(name, "simple_streetlights:set_channel", form)
|
|
end
|
|
end
|
|
end
|
|
|
|
local digiline_wire_node = "digilines:wire_std_00000000"
|
|
|
|
local poles_tab = {
|
|
-- material name, mod name, node name, optional base, optional height, top section
|
|
{ "wood", "default", "default:fence_wood" },
|
|
{ "junglewood", "default", "default:fence_junglewood" },
|
|
{ "brass", "homedecor_fences", "homedecor:fence_brass"},
|
|
{ "wrought_iron", "homedecor_fences", "homedecor:fence_wrought_iron" },
|
|
{ "steel", "gloopblocks", "gloopblocks:fence_steel"}
|
|
}
|
|
|
|
local lights_tab = {
|
|
-- light name, mod name, node name, optional param2
|
|
{ "meselamp", "default", "default:meselamp" },
|
|
{ "ilight", "ilights", "ilights:light" },
|
|
{ "glowlight_cube", "homedecor_lighting", "homedecor:glowlight_small_cube" }
|
|
}
|
|
|
|
for _, pole in ipairs(poles_tab) do
|
|
local matname = pole[1]
|
|
local matmod = pole[2]
|
|
local matnode = pole[3]
|
|
local basenode = pole[4]
|
|
local height = pole[5]
|
|
local topnodes = pole[6]
|
|
|
|
if minetest.get_modpath(matmod) then
|
|
|
|
for _, light in ipairs(lights_tab) do
|
|
local lightname = light[1]
|
|
local lightmod = light[2]
|
|
local lightnode = light[3]
|
|
local lightparam2 = light[4] or 0
|
|
|
|
if enable_digilines then
|
|
local def = table.copy(minetest.registered_nodes[matnode])
|
|
local dl_overlay
|
|
|
|
if def.drawtype == "fencelike" then
|
|
dl_overlay = "simple_streetlights_pole_digiline_overlay_fl.png"
|
|
else
|
|
dl_overlay = "simple_streetlights_pole_digiline_overlay_cnb.png"
|
|
end
|
|
|
|
for i,t in ipairs(def.tiles) do
|
|
def.tiles[i] = t.."^"..dl_overlay
|
|
end
|
|
def.description = def.description.." (digilines conducting)"
|
|
def.digiline = {
|
|
wire = {
|
|
rules = {
|
|
{x= 0, y= 0, z=-1},
|
|
{x= 0, y= 0, z= 1},
|
|
{x= 1, y= 0, z= 0},
|
|
{x=-1, y= 0, z= 0},
|
|
{x= 0, y=-1, z= 0},
|
|
{x= 0, y= 1, z= 0},
|
|
{x= 0, y=-2, z= 0}
|
|
}
|
|
}
|
|
}
|
|
def.drop = {
|
|
items = {
|
|
{items = { matnode.."_digilines" } },
|
|
}
|
|
}
|
|
def.palette = nil -- if the coloredwood mod exists and loads first, it'll create these
|
|
def.groups.ud_param2_colorable = nil -- settings, which we don't want in the cloned node.
|
|
|
|
minetest.register_node(":"..matnode.."_digilines", def)
|
|
|
|
minetest.register_craft({
|
|
output = matnode.."_digilines",
|
|
type = "shapeless",
|
|
recipe = {
|
|
matnode,
|
|
digiline_wire_node,
|
|
}
|
|
})
|
|
end
|
|
|
|
if minetest.get_modpath(lightmod) then
|
|
|
|
minetest.register_tool("simple_streetlights:spawner_"..matname.."_"..lightname, {
|
|
description = "Streetlight spawner ("..matname.." pole, "..lightname..")",
|
|
inventory_image = "simple_streetlights_inv_pole_"..matname..".png"..
|
|
"^simple_streetlights_inv_light_source_"..lightname..".png",
|
|
use_texture_alpha = true,
|
|
tool_capabilities = { full_punch_interval=0.1 },
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
streetlights.check_and_place(itemstack, placer, pointed_thing, {
|
|
base=basenode,
|
|
pole=matnode,
|
|
light=lightnode,
|
|
param2=lightparam2,
|
|
topnodes = topnodes,
|
|
height = height
|
|
})
|
|
end
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "simple_streetlights:spawner_"..matname.."_"..lightname,
|
|
type = "shapeless",
|
|
recipe = {
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
lightnode
|
|
}
|
|
})
|
|
|
|
if enable_digilines and minetest.registered_nodes[lightnode].digiline then
|
|
|
|
minetest.register_tool("simple_streetlights:spawner_"..matname.."_"..lightname.."_digilines", {
|
|
description = "Streetlight spawner ("..matname.." pole, with "..lightname..", digilines conducting pole)",
|
|
inventory_image = "simple_streetlights_inv_pole_"..matname..".png"..
|
|
"^simple_streetlights_inv_pole_digiline_overlay.png"..
|
|
"^simple_streetlights_inv_light_source_"..lightname..".png",
|
|
use_texture_alpha = true,
|
|
tool_capabilities = { full_punch_interval=0.1 },
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
streetlights.check_and_place(itemstack, placer, pointed_thing, {
|
|
base=basenode,
|
|
pole=matnode,
|
|
light=lightnode,
|
|
param2=lightparam2,
|
|
topnodes = topnodes,
|
|
height = height,
|
|
needs_digiline_wire=true
|
|
})
|
|
end,
|
|
on_use = ilights.digiline_on_use
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "simple_streetlights:spawner_"..matname.."_"..lightname.."_digilines",
|
|
type = "shapeless",
|
|
recipe = {
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
lightnode,
|
|
digiline_wire_node,
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "simple_streetlights:spawner_"..matname.."_"..lightname.."_digilines",
|
|
type = "shapeless",
|
|
recipe = {
|
|
"simple_streetlights:spawner_"..matname.."_"..lightname,
|
|
digiline_wire_node
|
|
}
|
|
})
|
|
|
|
local distributor = nil
|
|
local dist_overlay = nil
|
|
|
|
if minetest.registered_items[streetlights.distributor] then
|
|
distributor = streetlights.distributor
|
|
dist_overlay = "^simple_streetlights_inv_pole_distributor_overlay.png"
|
|
elseif minetest.registered_items[streetlights.vert_digiline] then
|
|
distributor = streetlights.vert_digiline
|
|
dist_overlay = "^simple_streetlights_inv_pole_vertical_digiline_overlay.png"
|
|
end
|
|
|
|
if distributor then
|
|
minetest.register_tool("simple_streetlights:spawner_"..matname.."_"..lightname.."_digilines_distributor", {
|
|
description = "Streetlight spawner ("..matname.." pole, with "..lightname..", digilines conducting pole, with distributor 2m below)",
|
|
inventory_image = "simple_streetlights_inv_pole_"..matname..".png"..
|
|
"^simple_streetlights_inv_pole_digiline_overlay.png"..
|
|
dist_overlay..
|
|
"^simple_streetlights_inv_light_source_"..lightname..".png",
|
|
use_texture_alpha = true,
|
|
tool_capabilities = { full_punch_interval=0.1 },
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
streetlights.check_and_place(itemstack, placer, pointed_thing, {
|
|
base=basenode,
|
|
pole=matnode,
|
|
light=lightnode,
|
|
param2=lightparam2,
|
|
topnodes = topnodes,
|
|
height = height,
|
|
needs_digiline_wire=true,
|
|
distributor_node=distributor
|
|
})
|
|
end,
|
|
on_use = ilights.digiline_on_use
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "simple_streetlights:spawner_"..matname.."_"..lightname.."_digilines_distributor",
|
|
type = "shapeless",
|
|
recipe = {
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
matnode,
|
|
lightnode,
|
|
digiline_wire_node,
|
|
distributor
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "simple_streetlights:spawner_"..matname.."_"..lightname.."_digilines_distributor",
|
|
type = "shapeless",
|
|
recipe = {
|
|
"simple_streetlights:spawner_"..matname.."_"..lightname,
|
|
digiline_wire_node,
|
|
distributor
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "simple_streetlights:spawner_"..matname.."_"..lightname.."_digilines_distributor",
|
|
type = "shapeless",
|
|
recipe = {
|
|
"simple_streetlights:spawner_"..matname.."_"..lightname.."_digilines",
|
|
distributor
|
|
}
|
|
})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|