2012-08-11 22:58:00 +02:00
|
|
|
-- Oldstyle wires:
|
|
|
|
|
|
|
|
if NEW_STYLE_WIRES == false then --old wires
|
|
|
|
minetest.register_node("mesecons:mesecon_off", {
|
|
|
|
drawtype = "raillike",
|
|
|
|
tile_images = {"jeija_mesecon_off.png", "jeija_mesecon_curved_off.png", "jeija_mesecon_t_junction_off.png", "jeija_mesecon_crossing_off.png"},
|
|
|
|
inventory_image = "jeija_mesecon_off.png",
|
|
|
|
wield_image = "jeija_mesecon_off.png",
|
|
|
|
paramtype = "light",
|
|
|
|
is_ground_content = true,
|
|
|
|
walkable = false,
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
|
|
|
},
|
2012-08-11 23:45:51 +02:00
|
|
|
groups = {dig_immediate=3, mesecon=1, mesecon_conductor_craftable=1},
|
2012-08-11 22:58:00 +02:00
|
|
|
description="Mesecons",
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("mesecons:mesecon_on", {
|
|
|
|
drawtype = "raillike",
|
|
|
|
tile_images = {"jeija_mesecon_on.png", "jeija_mesecon_curved_on.png", "jeija_mesecon_t_junction_on.png", "jeija_mesecon_crossing_on.png"},
|
|
|
|
paramtype = "light",
|
|
|
|
is_ground_content = true,
|
|
|
|
walkable = false,
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
|
|
|
},
|
|
|
|
groups = {dig_immediate=3, not_in_creaive_inventory=1, mesecon=1},
|
|
|
|
drop = '"mesecons:mesecon_off" 1',
|
|
|
|
light_source = LIGHT_MAX-11,
|
|
|
|
})
|
|
|
|
mesecon:register_conductor("mesecons:mesecon_on", "mesecons:mesecon_off")
|
|
|
|
else -- NEW STYLE WIRES
|
|
|
|
|
|
|
|
-- naming scheme: wire:(xp)(zp)(xm)(zm)_on/off
|
|
|
|
-- The conditions in brackets define whether there is a mesecon at that place or not
|
|
|
|
-- 1 = there is one; 0 = there is none
|
|
|
|
-- y always means y+
|
|
|
|
|
|
|
|
box_center = {-1/16, -.5, -1/16, 1/16, -.5+1/16, 1/16}
|
2012-08-13 04:28:45 +02:00
|
|
|
box_bump1 = { -2/16, -8/16, -2/16, 2/16, -13/32, 2/16 }
|
|
|
|
box_bump2 = { -3/32, -13/32, -3/32, 3/32, -12/32, 3/32 }
|
2012-08-11 22:58:00 +02:00
|
|
|
|
|
|
|
box_xp = {1/16, -.5, -1/16, 8/16, -.5+1/16, 1/16}
|
|
|
|
box_zp = {-1/16, -.5, 1/16, 1/16, -.5+1/16, 8/16}
|
|
|
|
box_xm = {-8/16, -.5, -1/16, -1/16, -.5+1/16, 1/16}
|
|
|
|
box_zm = {-1/16, -.5, -8/16, 1/16, -.5+1/16, -1/16}
|
|
|
|
|
|
|
|
box_xpy = {.5-1/16, -.5+1/16, -1/16, .5, .5+1/16, 1/16}
|
|
|
|
box_zpy = {-1/16, -.5+1/16, .5-1/16, 1/16, .5+1/16, .5}
|
|
|
|
box_xmy = {-.5, -.5+1/16, -1/16, -.5+1/16, .5+1/16, 1/16}
|
|
|
|
box_zmy = {-1/16, -.5+1/16, -.5, 1/16, .5+1/16, -.5+1/16}
|
|
|
|
|
|
|
|
for xp=0, 1 do
|
|
|
|
for zp=0, 1 do
|
|
|
|
for xm=0, 1 do
|
|
|
|
for zm=0, 1 do
|
|
|
|
for xpy=0, 1 do
|
|
|
|
for zpy=0, 1 do
|
|
|
|
for xmy=0, 1 do
|
|
|
|
for zmy=0, 1 do
|
|
|
|
if (xpy == 1 and xp == 0) or (zpy == 1 and zp == 0)
|
|
|
|
or (xmy == 1 and xm == 0) or (zmy == 1 and zm == 0) then break end
|
|
|
|
|
|
|
|
local groups
|
|
|
|
local nodeid = tostring(xp )..tostring(zp )..tostring(xm )..tostring(zm )..
|
|
|
|
tostring(xpy)..tostring(zpy)..tostring(xmy)..tostring(zmy)
|
|
|
|
|
|
|
|
if nodeid == "00000000" then
|
2012-08-11 23:45:51 +02:00
|
|
|
groups = {dig_immediate = 3, mesecon = 2, mesecon_conductor_craftable=1}
|
2012-08-11 22:58:00 +02:00
|
|
|
wiredesc = "Mesecon"
|
|
|
|
else
|
2012-08-11 23:39:28 +02:00
|
|
|
groups = {dig_immediate = 3, mesecon = 2, not_in_creative_inventory = 1}
|
2012-08-11 22:58:00 +02:00
|
|
|
wiredesc = "Mesecons Wire (ID: "..nodeid..")"
|
|
|
|
end
|
|
|
|
|
|
|
|
local nodebox = {}
|
|
|
|
local adjx = false
|
|
|
|
local adjz = false
|
|
|
|
if xp == 1 then table.insert(nodebox, box_xp) adjx = true end
|
|
|
|
if zp == 1 then table.insert(nodebox, box_zp) adjz = true end
|
|
|
|
if xm == 1 then table.insert(nodebox, box_xm) adjx = true end
|
|
|
|
if zm == 1 then table.insert(nodebox, box_zm) adjz = true end
|
|
|
|
if xpy == 1 then table.insert(nodebox, box_xpy) end
|
|
|
|
if zpy == 1 then table.insert(nodebox, box_zpy) end
|
|
|
|
if xmy == 1 then table.insert(nodebox, box_xmy) end
|
|
|
|
if zmy == 1 then table.insert(nodebox, box_zmy) end
|
2012-08-13 08:50:10 +02:00
|
|
|
|
|
|
|
if adjx and adjz and (xp + zp + xm + zm > 2) then
|
2012-08-11 22:58:00 +02:00
|
|
|
table.insert(nodebox, box_bump1)
|
|
|
|
table.insert(nodebox, box_bump2)
|
|
|
|
tiles_off = {
|
2012-08-13 11:54:14 +02:00
|
|
|
"wires_bump_off.png",
|
|
|
|
"wires_bump_off.png",
|
2012-08-11 22:58:00 +02:00
|
|
|
"wires_vertical_off.png",
|
|
|
|
"wires_vertical_off.png",
|
|
|
|
"wires_vertical_off.png",
|
|
|
|
"wires_vertical_off.png"
|
|
|
|
}
|
|
|
|
tiles_on = {
|
2012-08-13 11:54:14 +02:00
|
|
|
"wires_bump_on.png",
|
|
|
|
"wires_bump_on.png",
|
2012-08-11 22:58:00 +02:00
|
|
|
"wires_vertical_on.png",
|
|
|
|
"wires_vertical_on.png",
|
|
|
|
"wires_vertical_on.png",
|
|
|
|
"wires_vertical_on.png"
|
|
|
|
}
|
|
|
|
else
|
|
|
|
table.insert(nodebox, box_center)
|
|
|
|
tiles_off = {
|
2012-08-13 11:54:14 +02:00
|
|
|
"wires_off.png",
|
|
|
|
"wires_off.png",
|
2012-08-11 22:58:00 +02:00
|
|
|
"wires_vertical_off.png",
|
|
|
|
"wires_vertical_off.png",
|
|
|
|
"wires_vertical_off.png",
|
|
|
|
"wires_vertical_off.png"
|
|
|
|
}
|
|
|
|
tiles_on = {
|
2012-08-13 11:54:14 +02:00
|
|
|
"wires_on.png",
|
|
|
|
"wires_on.png",
|
2012-08-11 22:58:00 +02:00
|
|
|
"wires_vertical_on.png",
|
|
|
|
"wires_vertical_on.png",
|
|
|
|
"wires_vertical_on.png",
|
|
|
|
"wires_vertical_on.png"
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
if nodeid == "00000000" then
|
|
|
|
nodebox = {-8/16, -.5, -1/16, 8/16, -.5+1/16, 1/16}
|
|
|
|
end
|
|
|
|
|
|
|
|
minetest.register_node("mesecons:wire_"..nodeid.."_off", {
|
|
|
|
description = wiredesc,
|
|
|
|
drawtype = "nodebox",
|
|
|
|
tiles = tiles_off,
|
2012-08-11 23:51:36 +02:00
|
|
|
-- inventory_image = "wires_inv.png",
|
|
|
|
-- wield_image = "wires_inv.png",
|
|
|
|
inventory_image = "jeija_mesecon_off.png",
|
|
|
|
wield_image = "jeija_mesecon_off.png",
|
2012-08-11 22:58:00 +02:00
|
|
|
paramtype = "light",
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {-.5, -.5, -.5, .5, -.5+1/16, .5}
|
|
|
|
},
|
|
|
|
node_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = nodebox
|
|
|
|
},
|
|
|
|
groups = groups,
|
|
|
|
walkable = false,
|
|
|
|
stack_max = 99,
|
|
|
|
drop = "mesecons:wire_00000000_off"
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("mesecons:wire_"..nodeid.."_on", {
|
|
|
|
description = "Wire ID:"..nodeid,
|
|
|
|
drawtype = "nodebox",
|
|
|
|
tiles = tiles_on,
|
|
|
|
paramtype = "light",
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {-.5, -.5, -.5, .5, -.5+1/16, .5}
|
|
|
|
},
|
|
|
|
node_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = nodebox
|
|
|
|
},
|
2012-08-11 23:39:28 +02:00
|
|
|
groups = {dig_immediate = 3, mesecon = 2, not_in_creative_inventory = 1},
|
2012-08-11 22:58:00 +02:00
|
|
|
walkable = false,
|
|
|
|
stack_max = 99,
|
|
|
|
drop = "mesecons:wire_00000000_off"
|
|
|
|
})
|
|
|
|
mesecon:register_conductor("mesecons:wire_"..nodeid.."_on", "mesecons:wire_"..nodeid.."_off")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
minetest.register_on_placenode(function(pos, node)
|
2012-08-11 23:39:28 +02:00
|
|
|
if minetest.get_item_group(node.name, "mesecon") > 1 then
|
|
|
|
mesecon:update_autoconnect(pos)
|
|
|
|
end
|
2012-08-11 22:58:00 +02:00
|
|
|
end)
|
|
|
|
|
|
|
|
minetest.register_on_dignode(function(pos, node)
|
2012-08-11 23:39:28 +02:00
|
|
|
if minetest.get_item_group(node.name, "mesecon") > 1 then
|
|
|
|
mesecon:update_autoconnect(pos)
|
|
|
|
end
|
2012-08-11 22:58:00 +02:00
|
|
|
end)
|
|
|
|
|
|
|
|
function mesecon:update_autoconnect(pos, secondcall, replace_old)
|
|
|
|
local xppos = {x=pos.x+1, y=pos.y, z=pos.z}
|
|
|
|
local zppos = {x=pos.x, y=pos.y, z=pos.z+1}
|
|
|
|
local xmpos = {x=pos.x-1, y=pos.y, z=pos.z}
|
|
|
|
local zmpos = {x=pos.x, y=pos.y, z=pos.z-1}
|
|
|
|
|
|
|
|
local xpympos = {x=pos.x+1, y=pos.y-1, z=pos.z}
|
|
|
|
local zpympos = {x=pos.x, y=pos.y-1, z=pos.z+1}
|
|
|
|
local xmympos = {x=pos.x-1, y=pos.y-1, z=pos.z}
|
|
|
|
local zmympos = {x=pos.x, y=pos.y-1, z=pos.z-1}
|
|
|
|
|
|
|
|
local xpypos = {x=pos.x+1, y=pos.y+1, z=pos.z}
|
|
|
|
local zpypos = {x=pos.x, y=pos.y+1, z=pos.z+1}
|
|
|
|
local xmypos = {x=pos.x-1, y=pos.y+1, z=pos.z}
|
|
|
|
local zmypos = {x=pos.x, y=pos.y+1, z=pos.z-1}
|
|
|
|
|
|
|
|
if secondcall == nil then
|
|
|
|
mesecon:update_autoconnect(xppos, true)
|
|
|
|
mesecon:update_autoconnect(zppos, true)
|
|
|
|
mesecon:update_autoconnect(xmpos, true)
|
|
|
|
mesecon:update_autoconnect(zmpos, true)
|
|
|
|
|
|
|
|
mesecon:update_autoconnect(xpypos, true)
|
|
|
|
mesecon:update_autoconnect(zpypos, true)
|
|
|
|
mesecon:update_autoconnect(xmypos, true)
|
|
|
|
mesecon:update_autoconnect(zmypos, true)
|
|
|
|
|
|
|
|
mesecon:update_autoconnect(xpympos, true)
|
|
|
|
mesecon:update_autoconnect(zpympos, true)
|
|
|
|
mesecon:update_autoconnect(xmympos, true)
|
|
|
|
mesecon:update_autoconnect(zmympos, true)
|
|
|
|
end
|
|
|
|
|
|
|
|
nodename = minetest.env:get_node(pos).name
|
|
|
|
if string.find(nodename, "mesecons:wire_") == nil and not replace_old then return nil end
|
|
|
|
|
2012-08-11 23:39:28 +02:00
|
|
|
--if the groups mesecon == 1 then wires won't connect to it
|
|
|
|
xp = (minetest.get_item_group(minetest.env:get_node(xppos).name, "mesecon") > 1 or
|
|
|
|
minetest.get_item_group(minetest.env:get_node(xpympos).name, "mesecon") > 1) and 1 or 0
|
|
|
|
zp = (minetest.get_item_group(minetest.env:get_node(zppos).name, "mesecon") > 1 or
|
|
|
|
minetest.get_item_group(minetest.env:get_node(zpympos).name, "mesecon") > 1) and 1 or 0
|
|
|
|
xm = (minetest.get_item_group(minetest.env:get_node(xmpos).name, "mesecon") > 1 or
|
|
|
|
minetest.get_item_group(minetest.env:get_node(xmympos).name, "mesecon") > 1) and 1 or 0
|
|
|
|
zm = (minetest.get_item_group(minetest.env:get_node(zmpos).name, "mesecon") > 1 or
|
|
|
|
minetest.get_item_group(minetest.env:get_node(zmympos).name, "mesecon") > 1) and 1 or 0
|
|
|
|
|
|
|
|
|
|
|
|
xpy = (minetest.get_item_group(minetest.env:get_node(xpypos).name, "mesecon") > 1) and 1 or 0
|
|
|
|
zpy = (minetest.get_item_group(minetest.env:get_node(zpypos).name, "mesecon") > 1) and 1 or 0
|
|
|
|
xmy = (minetest.get_item_group(minetest.env:get_node(xmypos).name, "mesecon") > 1) and 1 or 0
|
|
|
|
zmy = (minetest.get_item_group(minetest.env:get_node(zmypos).name, "mesecon") > 1) and 1 or 0
|
2012-08-11 22:58:00 +02:00
|
|
|
|
|
|
|
if replace_old then
|
|
|
|
print ("replacing")
|
|
|
|
xp = (xp == 1 or (string.find(minetest.env:get_node(xppos ).name, "mesecons:mesecon_") ~= nil or
|
|
|
|
string.find(minetest.env:get_node(xpympos).name, "mesecons:mesecon_") ~= nil)) and 1 or 0
|
|
|
|
zp = (zp == 1 or (string.find(minetest.env:get_node(zppos ).name, "mesecons:mesecon_") ~= nil or
|
|
|
|
string.find(minetest.env:get_node(zpympos).name, "mesecons:mesecon_") ~= nil)) and 1 or 0
|
|
|
|
xm = (xm == 1 or (string.find(minetest.env:get_node(xmpos ).name, "mesecons:mesecon_") ~= nil or
|
|
|
|
string.find(minetest.env:get_node(xmympos).name, "mesecons:mesecon_") ~= nil)) and 1 or 0
|
|
|
|
zm = (zm == 1 or (string.find(minetest.env:get_node(zmpos ).name, "mesecons:mesecon_") ~= nil or
|
|
|
|
string.find(minetest.env:get_node(zmympos).name, "mesecons:mesecon_") ~= nil)) and 1 or 0
|
|
|
|
|
|
|
|
xpy = (xpy == 1 or string.find(minetest.env:get_node(xpypos).name, "mesecons:mesecon_") ~=nil) and 1 or 0
|
|
|
|
zpy = (zpy == 1 or string.find(minetest.env:get_node(zpypos).name, "mesecons:mesecon_") ~=nil) and 1 or 0
|
|
|
|
xmy = (xmy == 1 or string.find(minetest.env:get_node(xmypos).name, "mesecons:mesecon_") ~=nil) and 1 or 0
|
|
|
|
zmy = (zmy == 1 or string.find(minetest.env:get_node(zmypos).name, "mesecons:mesecon_") ~=nil) and 1 or 0
|
|
|
|
end
|
|
|
|
|
|
|
|
if xpy == 1 then xp = 1 end
|
|
|
|
if zpy == 1 then zp = 1 end
|
|
|
|
if xmy == 1 then xm = 1 end
|
|
|
|
if zmy == 1 then zm = 1 end
|
|
|
|
|
|
|
|
local nodeid = tostring(xp )..tostring(zp )..tostring(xm )..tostring(zm )..
|
|
|
|
tostring(xpy)..tostring(zpy)..tostring(xmy)..tostring(zmy)
|
|
|
|
|
|
|
|
if string.find(nodename, "_off") ~= nil then
|
|
|
|
minetest.env:set_node(pos, {name = "mesecons:wire_"..nodeid.."_off"})
|
|
|
|
else
|
|
|
|
minetest.env:set_node(pos, {name = "mesecons:wire_"..nodeid.."_on" })
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
minetest.register_craft({
|
|
|
|
output = '"mesecons:wire_00000000_off" 16',
|
|
|
|
recipe = {
|
|
|
|
{'"default:mese"'},
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_abm(
|
|
|
|
{nodenames = {"mesecons:mesecon_off", "mesecons:mesecon_on"},
|
|
|
|
interval = 2,
|
|
|
|
chance = 1,
|
|
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
|
|
mesecon:update_autoconnect(pos, false, true)
|
|
|
|
end,
|
|
|
|
})
|
|
|
|
end
|