"explode" all modpacks into their individual components
(you can't have a modpack buried inside a modpack)
4
trafficlight/depends.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
default
|
||||
streetsmod
|
||||
digilines?
|
||||
mesecons?
|
367
trafficlight/init.lua
Normal file
@@ -0,0 +1,367 @@
|
||||
--[[
|
||||
StreetsMod: inDev Trafficlights
|
||||
]]
|
||||
dofile(streets.modpath .. "/../trafficlight/old2new.lua")
|
||||
|
||||
streets.tlBox = {
|
||||
--[[ Thank you, rubenwardy, for your awesome NodeboxEditor! Not perfect, but still great! ]]
|
||||
{-0.1875,-0.5,0.5,0.1875,0.5,0.75}, --nodebox1
|
||||
{-0.0625,0.375,0.3125,0.0625,0.4375,0.5}, --nodebox2
|
||||
{-0.0625,0.0625,0.3125,0.0625,0.125,0.5}, --nodebox3
|
||||
{-0.0625,-0.25,0.3125,0.0625,-0.1875,0.5}, --nodebox4
|
||||
{0.0625,0.3125,0.3125,0.125,0.38,0.5}, --nodebox5
|
||||
{-0.125,0.3125,0.3125,-0.0625,0.375,0.5}, --nodebox6
|
||||
{0.0625,0,0.3125,0.125,0.0625,0.5}, --nodebox7
|
||||
{-0.125,0,0.3125,-0.0625,0.0625,0.5}, --nodebox8
|
||||
{0.0625,-0.3125,0.3125,0.125,-0.25,0.5}, --nodebox9
|
||||
{-0.125,-0.3125,0.3125,-0.0625,-0.25,0.5}, --nodebox10
|
||||
{-0.125, -0.125, 0.85, 0.125, 0.125, 0.75}, -- NodeBox11
|
||||
}
|
||||
|
||||
streets.tlRhythm = {
|
||||
toRed = {
|
||||
{name = "streets:trafficlight_top_yellow", pauseBefore = 0},
|
||||
{name = "streets:trafficlight_top_red", pauseBefore = 3}
|
||||
},
|
||||
toGreen = {
|
||||
{name = "streets:trafficlight_top_green", pauseBefore = 0}
|
||||
},
|
||||
toOff = {
|
||||
{name = "streets:trafficlight_top_off", pauseBefore = 0}
|
||||
},
|
||||
toWarn = {
|
||||
{name = "streets:trafficlight_top_warn", pauseBefore = 0}
|
||||
},
|
||||
toFlashRed = {
|
||||
{name = "streets:trafficlight_top_flashred", pauseBefore = 0}
|
||||
}
|
||||
}
|
||||
|
||||
streets.tlRhythm_left = {
|
||||
toRed = {
|
||||
{name = "streets:trafficlight_top_left_yellow", pauseBefore = 0},
|
||||
{name = "streets:trafficlight_top_left_red", pauseBefore = 3}
|
||||
},
|
||||
toGreen = {
|
||||
{name = "streets:trafficlight_top_left_green", pauseBefore = 0}
|
||||
},
|
||||
toOff = {
|
||||
{name = "streets:trafficlight_top_left_off", pauseBefore = 0}
|
||||
},
|
||||
toWarn = {
|
||||
{name = "streets:trafficlight_top_left_warn", pauseBefore = 0}
|
||||
},
|
||||
toFlashRed = {
|
||||
{name = "streets:trafficlight_top_left_flashred", pauseBefore = 0}
|
||||
}
|
||||
}
|
||||
|
||||
streets.tlRhythm_right = {
|
||||
toRed = {
|
||||
{name = "streets:trafficlight_top_right_yellow", pauseBefore = 0},
|
||||
{name = "streets:trafficlight_top_right_red", pauseBefore = 3}
|
||||
},
|
||||
toGreen = {
|
||||
{name = "streets:trafficlight_top_right_green", pauseBefore = 0}
|
||||
},
|
||||
toOff = {
|
||||
{name = "streets:trafficlight_top_right_off", pauseBefore = 0}
|
||||
},
|
||||
toWarn = {
|
||||
{name = "streets:trafficlight_top_right_warn", pauseBefore = 0}
|
||||
},
|
||||
toFlashRed = {
|
||||
{name = "streets:trafficlight_top_right_flashred", pauseBefore = 0}
|
||||
}
|
||||
}
|
||||
|
||||
streets.tlSwitch = function(def)
|
||||
if not def.pos or not def.to then
|
||||
return
|
||||
end
|
||||
local rhythm = {}
|
||||
local nodename = minetest.get_node(def.pos).name
|
||||
if nodename:find("left") then
|
||||
rhythm = streets.tlRhythm_left
|
||||
elseif nodename:find("right") then
|
||||
rhythm = streets.tlRhythm_right
|
||||
else
|
||||
rhythm = streets.tlRhythm
|
||||
end
|
||||
if not rhythm[def.to] then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(def.pos)
|
||||
-- Only switch if new state ~= current state
|
||||
if "to" .. meta:get_string("state") == def.to then
|
||||
return
|
||||
end
|
||||
-- Switch the trafficlight
|
||||
for k, v in pairs(rhythm[def.to]) do
|
||||
minetest.get_meta(def.pos):set_string("state", def.to:gsub("to", ""))
|
||||
minetest.after(v.pauseBefore, function()
|
||||
minetest.swap_node(def.pos, {name = v.name, param2 = minetest.get_node(def.pos).param2})
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
streets.on_digiline_receive = function(pos, node, channel, msg)
|
||||
local setchan = minetest.get_meta(pos):get_string("channel")
|
||||
if setchan ~= channel then
|
||||
return
|
||||
end
|
||||
-- Tl states
|
||||
if msg == "OFF" then
|
||||
streets.tlSwitch({
|
||||
pos = pos,
|
||||
to = "toOff"
|
||||
})
|
||||
elseif msg == "GREEN" then
|
||||
streets.tlSwitch({
|
||||
pos = pos,
|
||||
to = "toGreen"
|
||||
})
|
||||
elseif msg == "RED" then
|
||||
streets.tlSwitch({
|
||||
pos = pos,
|
||||
to = "toRed"
|
||||
})
|
||||
elseif msg == "WARN" then
|
||||
streets.tlSwitch({
|
||||
pos = pos,
|
||||
to = "toWarn"
|
||||
})
|
||||
elseif msg == "FLASHRED" then
|
||||
streets.tlSwitch({
|
||||
pos = pos,
|
||||
to = "toFlashRed"
|
||||
})
|
||||
elseif msg == "GET" then
|
||||
local state = minetest.get_meta(pos):get_string("state")
|
||||
if not state or state == "" then
|
||||
state = "UNDEFINED"
|
||||
end
|
||||
digiline:receptor_send(pos, digiline.rules.default, channel, state)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node(":streets:digiline_distributor",{
|
||||
description = streets.S("Digiline distributor"),
|
||||
tiles = {"streets_lampcontroller_top.png","streets_lampcontroller_bottom.png","streets_lampcontroller_sides.png"},
|
||||
groups = {cracky = 1},
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5,-0.5,-0.5,0.5,0.5,0.5},
|
||||
{-0.05,0.5,-0.05,0.05,1.6,0.05}
|
||||
}
|
||||
},
|
||||
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= 2, z=0}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
for _,i in pairs({"","_left","_right"}) do
|
||||
minetest.register_node(":streets:trafficlight_top"..i.."_off",{
|
||||
description = streets.S((i == "" and "Traffic Light") or (i == "_left" and "Traffic Light (Left Turn)") or (i == "_right" and "Traffic Light (Right Turn)")),
|
||||
drawtype="nodebox",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky = 1, level = 2},
|
||||
inventory_image = "streets_trafficlight_inv.png",
|
||||
light_source = 11,
|
||||
sunlight_propagates = true,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = streets.tlBox
|
||||
},
|
||||
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_off.png"},
|
||||
digiline = {
|
||||
receptor = {},
|
||||
effector = {
|
||||
action = function(pos, node, channel, msg)
|
||||
streets.on_digiline_receive(pos, node, channel, msg)
|
||||
end
|
||||
}
|
||||
},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", "field[channel;Channel;${channel}]")
|
||||
end,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if (fields.channel) then
|
||||
minetest.get_meta(pos):set_string("channel", fields.channel)
|
||||
minetest.get_meta(pos):set_string("state", "Off")
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node(":streets:trafficlight_top"..i.."_red",{
|
||||
drop = "streets:trafficlight_top_off",
|
||||
groups = {cracky = 1, not_in_creative_inventory = 1},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
drawtype = "nodebox",
|
||||
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_red.png"},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = streets.tlBox
|
||||
},
|
||||
light_source = 6,
|
||||
digiline = {
|
||||
receptor = {},
|
||||
effector = {
|
||||
action = function(pos, node, channel, msg)
|
||||
streets.on_digiline_receive(pos, node, channel, msg)
|
||||
end
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node(":streets:trafficlight_top"..i.."_yellow",{
|
||||
drop = "streets:trafficlight_top_off",
|
||||
groups = {cracky = 1, not_in_creative_inventory = 1},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
drawtype = "nodebox",
|
||||
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_yellow.png"},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = streets.tlBox
|
||||
},
|
||||
light_source = 6,
|
||||
digiline = {
|
||||
receptor = {},
|
||||
effector = {
|
||||
action = function(pos, node, channel, msg)
|
||||
streets.on_digiline_receive(pos, node, channel, msg)
|
||||
end
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_alias("streets:trafficlight_top"..i.."_redyellow","streets:trafficlight_top"..i.."_green")
|
||||
|
||||
minetest.register_node(":streets:trafficlight_top"..i.."_green",{
|
||||
drop = "streets:trafficlight_top_off",
|
||||
groups = {cracky = 1, not_in_creative_inventory = 1},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
drawtype = "nodebox",
|
||||
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_green.png"},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = streets.tlBox
|
||||
},
|
||||
light_source = 6,
|
||||
digiline = {
|
||||
receptor = {},
|
||||
effector = {
|
||||
action = function(pos, node, channel, msg)
|
||||
streets.on_digiline_receive(pos, node, channel, msg)
|
||||
end
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node(":streets:trafficlight_top"..i.."_warn",{
|
||||
drop = "streets:trafficlight_top_off",
|
||||
groups = {cracky = 1, not_in_creative_inventory = 1},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
drawtype = "nodebox",
|
||||
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
|
||||
name="streets_tl"..i.."_warn.png",
|
||||
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.5},
|
||||
}},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = streets.tlBox
|
||||
},
|
||||
light_source = 6,
|
||||
digiline = {
|
||||
receptor = {},
|
||||
effector = {
|
||||
action = function(pos, node, channel, msg)
|
||||
streets.on_digiline_receive(pos, node, channel, msg)
|
||||
end
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node(":streets:trafficlight_top"..i.."_flashred",{
|
||||
drop = "streets:trafficlight_top_off",
|
||||
groups = {cracky = 1, not_in_creative_inventory = 1},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
drawtype = "nodebox",
|
||||
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
|
||||
name="streets_tl"..i.."_flashred.png",
|
||||
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.5},
|
||||
}},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = streets.tlBox
|
||||
},
|
||||
light_source = 6,
|
||||
digiline = {
|
||||
receptor = {},
|
||||
effector = {
|
||||
action = function(pos, node, channel, msg)
|
||||
streets.on_digiline_receive(pos, node, channel, msg)
|
||||
end
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = "streets:trafficlight_top_off",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "dye:red", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "dye:yellow", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "dye:green", "default:steel_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "streets:trafficlight_top_left_off",
|
||||
recipe = {
|
||||
{"dye:red", "default:steel_ingot", "default:steel_ingot"},
|
||||
{"dye:yellow", "default:steel_ingot", "default:steel_ingot"},
|
||||
{"dye:green", "default:steel_ingot", "default:steel_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "streets:trafficlight_top_right_off",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "default:steel_ingot", "dye:red"},
|
||||
{"default:steel_ingot", "default:steel_ingot", "dye:yellow"},
|
||||
{"default:steel_ingot", "default:steel_ingot", "dye:green"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "streets:digiline_distributor",
|
||||
recipe = {
|
||||
{"", "digilines:wire_std_00000000", ""},
|
||||
{"digilines:wire_std_00000000", "mesecons_luacontroller:luacontroller0000", "digilines:wire_std_00000000"},
|
||||
{"", "digilines:wire_std_00000000", ""}
|
||||
}
|
||||
})
|
58
trafficlight/old2new.lua
Normal file
@@ -0,0 +1,58 @@
|
||||
--[[
|
||||
StreetsMod: Convert old trafficlights
|
||||
]]
|
||||
minetest.register_node(":streets:trafficlight_bottom", {
|
||||
diggable = false,
|
||||
pointable = false,
|
||||
drawtype = "airlike",
|
||||
description = "I'm an old node, please drop me",
|
||||
groups = {not_in_creative_inventory = 1}
|
||||
})
|
||||
minetest.register_abm({
|
||||
nodenames = {"streets:trafficlight_bottom"},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = function(pos, node)
|
||||
minetest.log("action", "Converting trafficlight at position " .. minetest.pos_to_string(pos))
|
||||
-- Replace controller with distributor
|
||||
pos.y = pos.y - 2
|
||||
minetest.set_node(pos, {name = "streets:digiline_distributor"})
|
||||
-- Change bottom pole
|
||||
pos.y = pos.y + 2
|
||||
minetest.set_node(pos, {name = "streets:bigpole", param2 = 2})
|
||||
-- Change middle pole
|
||||
pos.y = pos.y + 1
|
||||
minetest.set_node(pos, {name = "streets:bigpole", param2 = 2})
|
||||
-- Change the top
|
||||
pos.y = pos.y + 1
|
||||
local fd = minetest.get_node(pos).param2
|
||||
local ch = minetest.get_meta(pos):get_string("channel")
|
||||
minetest.set_node(pos, {name = "streets:bigpole", param2 = 2})
|
||||
-- Place new top
|
||||
if fd == 1 then
|
||||
minetest.set_node({x = pos.x - 1, y = pos.y, z = pos.z}, {name = "streets:trafficlight_top_warn", param2 = fd})
|
||||
local meta = minetest.get_meta({x = pos.x - 1, y = pos.y, z = pos.z})
|
||||
meta:set_string("channel", ch)
|
||||
meta:set_string("state", "warn")
|
||||
meta:set_string("formspec", "field[channel;Channel;${channel}]")
|
||||
elseif fd == 2 then
|
||||
minetest.set_node({x = pos.x, y = pos.y, z = pos.z + 1}, {name = "streets:trafficlight_top_warn", param2 = fd})
|
||||
local meta = minetest.get_meta({x = pos.x, y = pos.y, z = pos.z + 1})
|
||||
meta:set_string("channel", ch)
|
||||
meta:set_string("state", "warn")
|
||||
meta:set_string("formspec", "field[channel;Channel;${channel}]")
|
||||
elseif fd == 3 then
|
||||
minetest.set_node({x = pos.x + 1, y = pos.y, z = pos.z}, {name = "streets:trafficlight_top_warn", param2 = fd})
|
||||
local meta = minetest.get_meta({x = pos.x + 1, y = pos.y, z = pos.z})
|
||||
meta:set_string("channel", ch)
|
||||
meta:set_string("state", "warn")
|
||||
meta:set_string("formspec", "field[channel;Channel;${channel}]")
|
||||
elseif fd == 0 then
|
||||
minetest.set_node({x = pos.x, y = pos.y, z = pos.z - 1}, {name = "streets:trafficlight_top_warn", param2 = fd})
|
||||
local meta = minetest.get_meta({x = pos.x, y = pos.y, z = pos.z - 1})
|
||||
meta:set_string("channel", ch)
|
||||
meta:set_string("state", "warn")
|
||||
meta:set_string("formspec", "field[channel;Channel;${channel}]")
|
||||
end
|
||||
end
|
||||
})
|
BIN
trafficlight/textures/streets_tl_bg.png
Normal file
After Width: | Height: | Size: 750 B |
BIN
trafficlight/textures/streets_tl_flashred.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
trafficlight/textures/streets_tl_green.png
Normal file
After Width: | Height: | Size: 954 B |
BIN
trafficlight/textures/streets_tl_left_flashred.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
trafficlight/textures/streets_tl_left_green.png
Normal file
After Width: | Height: | Size: 976 B |
BIN
trafficlight/textures/streets_tl_left_off.png
Normal file
After Width: | Height: | Size: 913 B |
BIN
trafficlight/textures/streets_tl_left_red.png
Normal file
After Width: | Height: | Size: 941 B |
BIN
trafficlight/textures/streets_tl_left_warn.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
trafficlight/textures/streets_tl_left_yellow.png
Normal file
After Width: | Height: | Size: 988 B |
BIN
trafficlight/textures/streets_tl_off.png
Normal file
After Width: | Height: | Size: 843 B |
BIN
trafficlight/textures/streets_tl_red.png
Normal file
After Width: | Height: | Size: 942 B |
BIN
trafficlight/textures/streets_tl_right_flashred.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
trafficlight/textures/streets_tl_right_green.png
Normal file
After Width: | Height: | Size: 950 B |
BIN
trafficlight/textures/streets_tl_right_off.png
Normal file
After Width: | Height: | Size: 892 B |
BIN
trafficlight/textures/streets_tl_right_red.png
Normal file
After Width: | Height: | Size: 941 B |
BIN
trafficlight/textures/streets_tl_right_warn.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
trafficlight/textures/streets_tl_right_yellow.png
Normal file
After Width: | Height: | Size: 976 B |
BIN
trafficlight/textures/streets_tl_warn.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
trafficlight/textures/streets_tl_yellow.png
Normal file
After Width: | Height: | Size: 1003 B |
BIN
trafficlight/textures/streets_trafficlight_inv.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
trafficlight/textures/streets_trafficlight_template.png
Normal file
After Width: | Height: | Size: 320 B |