123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- -- 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}
- box_bump1 = { -2/16, -8/16, -2/16, 2/16, -13/32, 2/16 }
- 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, .4999+1/16, 1/16}
- box_zpy = {-1/16, -.5+1/16, .5-1/16, 1/16, .4999+1/16, .5}
- box_xmy = {-.5, -.5+1/16, -1/16, -.5+1/16, .4999+1/16, 1/16}
- box_zmy = {-1/16, -.5+1/16, -.5, 1/16, .4999+1/16, -.5+1/16}
- -- Registering the wires
- 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
- groups = {dig_immediate = 3, mesecon_conductor_craftable=1}
- wiredesc = "Mesecon"
- else
- groups = {dig_immediate = 3, not_in_creative_inventory = 1}
- 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
- if adjx and adjz and (xp + zp + xm + zm > 2) then
- table.insert(nodebox, box_bump1)
- tiles_off = {
- "wires_bump_off.png",
- "wires_bump_off.png",
- "wires_vertical_off.png",
- "wires_vertical_off.png",
- "wires_vertical_off.png",
- "wires_vertical_off.png"
- }
- tiles_on = {
- "wires_bump_on.png",
- "wires_bump_on.png",
- "wires_vertical_on.png",
- "wires_vertical_on.png",
- "wires_vertical_on.png",
- "wires_vertical_on.png"
- }
- else
- table.insert(nodebox, box_center)
- tiles_off = {
- "wires_off.png",
- "wires_off.png",
- "wires_vertical_off.png",
- "wires_vertical_off.png",
- "wires_vertical_off.png",
- "wires_vertical_off.png"
- }
- tiles_on = {
- "wires_on.png",
- "wires_on.png",
- "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,
- -- inventory_image = "wires_inv.png",
- -- wield_image = "wires_inv.png",
- inventory_image = "jeija_mesecon_off.png",
- wield_image = "jeija_mesecon_off.png",
- paramtype = "light",
- paramtype2 = "facedir",
- sunlight_propagates = true,
- 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",
- mesecons = {conductor={
- state = mesecon.state.off,
- onstate = "mesecons:wire_"..nodeid.."_on"
- }}
- })
- minetest.register_node("mesecons:wire_"..nodeid.."_on", {
- description = "Wire ID:"..nodeid,
- drawtype = "nodebox",
- tiles = tiles_on,
- -- inventory_image = "wires_inv.png",
- -- wield_image = "wires_inv.png",
- inventory_image = "jeija_mesecon_off.png",
- wield_image = "jeija_mesecon_off.png",
- paramtype = "light",
- paramtype2 = "facedir",
- sunlight_propagates = true,
- selection_box = {
- type = "fixed",
- fixed = {-.5, -.5, -.5, .5, -.5+1/16, .5}
- },
- node_box = {
- type = "fixed",
- fixed = nodebox
- },
- groups = {dig_immediate = 3, mesecon = 2, not_in_creative_inventory = 1},
- walkable = false,
- stack_max = 99,
- drop = "mesecons:wire_00000000_off",
- mesecons = {conductor={
- state = mesecon.state.on,
- offstate = "mesecons:wire_"..nodeid.."_off"
- }}
- })
- end
- end
- end
- end
- end
- end
- end
- end
- -- Updating the wires:
- -- Place the right connection wire
- local update_on_place_dig = function (pos, node)
- if minetest.registered_nodes[node.name]
- and minetest.registered_nodes[node.name].mesecons then
- mesecon:update_autoconnect(pos)
- end
- end
- minetest.register_on_placenode(update_on_place_dig)
- minetest.register_on_dignode(update_on_place_dig)
- 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
- if mesecon:rules_link_anydir(pos, xppos) then xp = 1 else xp = 0 end
- if mesecon:rules_link_anydir(pos, xmpos) then xm = 1 else xm = 0 end
- if mesecon:rules_link_anydir(pos, zppos) then zp = 1 else zp = 0 end
- if mesecon:rules_link_anydir(pos, zmpos) then zm = 1 else zm = 0 end
- if mesecon:rules_link_anydir(pos, xpympos) then xp = 1 end
- if mesecon:rules_link_anydir(pos, xmympos) then xm = 1 end
- if mesecon:rules_link_anydir(pos, zpympos) then zp = 1 end
- if mesecon:rules_link_anydir(pos, zmympos) then zm = 1 end
- if mesecon:rules_link_anydir(pos, xpypos) then xpy = 1 else xpy = 0 end
- if mesecon:rules_link_anydir(pos, zpypos) then zpy = 1 else zpy = 0 end
- if mesecon:rules_link_anydir(pos, xmypos) then xmy = 1 else xmy = 0 end
- if mesecon:rules_link_anydir(pos, zmypos) then zmy = 1 else zmy = 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
- if minetest.registered_nodes["default:stone_with_mese"] == nil then
- minetest.register_craft({
- output = "mesecons:wire_00000000_off 18",
- recipe = {
- {"default:mese"},
- }
- })
- else
- minetest.register_craft({
- type = "cooking",
- output = "mesecons:wire_00000000_off 2",
- recipe = "default:mese_crystal_fragment",
- cooktime = 3,
- })
- minetest.register_craft({
- type = "cooking",
- output = "mesecons:wire_00000000_off 18",
- recipe = "default:mese_crystal",
- cooktime = 15,
- })
- minetest.register_craft({
- type = "cooking",
- output = "mesecons:wire_00000000_off 162",
- recipe = "default:mese",
- cooktime = 30,
- })
- end
- minetest.register_craft({
- type = "cooking",
- output = '"mesecons:wire_00000000_off" 16',
- recipe = "default:mese_crystal",
- })
|