92eb5b9e8d
(like if the bottom part should be bigger than the rest of the pole, or has some details such as bolts securing it to the ground)
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, has 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 has_top = 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,
|
|
has_top = has_top,
|
|
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,
|
|
has_top = has_top,
|
|
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,
|
|
has_top = has_top,
|
|
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
|