--COMMON WIRELESS FUNCTIONS mesecon.wireless_receivers={} function mesecon:read_wlre_from_file() print "[MESEcons] Reading Mesecon Data..." mesecon_file=io.open(minetest.get_modpath("jeija").."/mesecon_data", "r") if mesecon_file==nil then return end local row=mesecon_file:read() local i=1 while row~=nil do mesecon.wireless_receivers[i]={} mesecon.wireless_receivers[i].pos={} mesecon.wireless_receivers[i].pos.x=tonumber(mesecon_file:read()) mesecon.wireless_receivers[i].pos.y=tonumber(mesecon_file:read()) mesecon.wireless_receivers[i].pos.z=tonumber(mesecon_file:read()) mesecon.wireless_receivers[i].channel=mesecon_file:read() mesecon.wireless_receivers[i].requested_state=tonumber(mesecon_file:read()) mesecon.wireless_receivers[i].inverting=tonumber(mesecon_file:read()) i=i+1 row=mesecon_file:read() end mesecon_file:close() print "[MESEcons] Finished Reading Mesecon Data..." end function mesecon:register_wireless_receiver(pos, inverting) local i = 1 repeat if mesecon.wireless_receivers[i]==nil then break end i=i+1 until false local node_under_pos={} node_under_pos.x=pos.x node_under_pos.y=pos.y node_under_pos.z=pos.z node_under_pos.y=node_under_pos.y-1 local node_under=minetest.env:get_node(node_under_pos) mesecon.wireless_receivers[i]={} mesecon.wireless_receivers[i].pos={} mesecon.wireless_receivers[i].pos.x=pos.x mesecon.wireless_receivers[i].pos.y=pos.y mesecon.wireless_receivers[i].pos.z=pos.z mesecon.wireless_receivers[i].channel=node_under.name mesecon.wireless_receivers[i].requested_state=0 mesecon.wireless_receivers[i].inverting=inverting end function mesecon:remove_wireless_receiver(pos) local i = 1 while mesecon.wireless_receivers[i]~=nil do if mesecon.wireless_receivers[i].pos.x==pos.x and mesecon.wireless_receivers[i].pos.y==pos.y and mesecon.wireless_receivers[i].pos.z==pos.z then mesecon.wireless_receivers[i]=nil break end i=i+1 end end function mesecon:set_wlre_channel(pos, channel) --local i = 1 --while mesecon.wireless_receivers[i]~=nil do -- if tonumber(mesecon.wireless_receivers[i].pos.x)==tonumber(pos.x) and -- tonumber(mesecon.wireless_receivers[i].pos.y)==tonumber(pos.y) and -- tonumber(mesecon.wireless_receivers[i].pos.z)==tonumber(pos.z) then -- mesecon.wireless_receivers[i].channel=channel -- break -- end -- i=i+1 --end local wlre=mesecon:get_wlre(pos) if wlre~=nil then wlre.channel=channel end end function mesecon:get_wlre(pos) local i=1 while mesecon.wireless_receivers[i]~=nil do if mesecon.wireless_receivers[i].pos.x==pos.x and mesecon.wireless_receivers[i].pos.y==pos.y and mesecon.wireless_receivers[i].pos.z==pos.z then return mesecon.wireless_receivers[i] end i=i+1 end end minetest.register_on_placenode(function(pos, newnode, placer) pos.y=pos.y+1 if minetest.env:get_node(pos).name == "mesecons_wireless:wireless_receiver_off" or minetest.env:get_node(pos).name == "mesecons_wireless:wireless_receiver_on" or minetest.env:get_node(pos).name == "mesecons_wireless:wireless_inverter_off" or minetest.env:get_node(pos).name == "mesecons_wireless:wireless_inverter_on" then mesecon:set_wlre_channel(pos, newnode.name) end end) minetest.register_on_dignode( function(pos, oldnode, digger) local channel pos.y=pos.y+1 if minetest.env:get_node(pos).name == "mesecons_wireless:wireless_receiver_on" or minetest.env:get_node(pos).name == "mesecons_wireless:wireless_receiver_off" or minetest.env:get_node(pos).name == "mesecons_wireless:wireless_inverter_on" or minetest.env:get_node(pos).name == "mesecons_wireless:wireless_inverter_off" then mesecon:set_wlre_channel(pos, "air") end end ) minetest.register_abm( {nodenames = {"mesecons_wireless:wireless_receiver_on", "mesecons_wireless:wireless_receiver_off", "mesecons_wireless:wireless_inverter_on", "mesecons_wireless:wireless_inverter_off"}, interval = 1.0, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) local wlre=mesecon:get_wlre(pos) if (wlre==nil) then return end if node.name=="mesecons_wireless:wireless_receiver_on" and wlre.requested_state==0 then minetest.env:add_node(pos, {name="mesecons_wireless:wireless_receiver_off"}) mesecon:receptor_off(pos) end if node.name=="mesecons_wireless:wireless_receiver_off" and wlre.requested_state==1 then minetest.env:add_node(pos, {name="mesecons_wireless:wireless_receiver_on"}) mesecon:receptor_on(pos) end if node.name=="mesecons_wireless:wireless_inverter_off" and wlre.requested_state==0 and wlre.inverting==1 then minetest.env:add_node(pos, {name="mesecons_wireless:wireless_inverter_on"}) mesecon:receptor_on(pos) end if node.name=="mesecons_wireless:wireless_inverter_on" and wlre.requested_state==1 and wlre.inverting==1 then minetest.env:add_node(pos, {name="mesecons_wireless:wireless_inverter_off"}) mesecon:receptor_off(pos) end end, }) --WIRELESS RECEIVER minetest.register_node("mesecons_wireless:wireless_receiver_off", { tile_images = {"jeija_wireless_receiver_tb_off.png", "jeija_wireless_receiver_tb_off.png", "jeija_wireless_receiver_off.png", "jeija_wireless_receiver_off.png", "jeija_wireless_receiver_off.png", "jeija_wireless_receiver_off.png"}, inventory_image = minetest.inventorycube("jeija_wireless_receiver_off.png"), groups = {choppy=2}, description="Wireless Receiver", after_place_node = function(pos) mesecon:register_wireless_receiver(pos, 0) end, after_dig_node = function(pos) mesecon:remove_wireless_receiver(pos) mesecon:receptor_off(pos) end }) minetest.register_node("mesecons_wireless:wireless_receiver_on", { tile_images = {"jeija_wireless_receiver_tb_on.png", "jeija_wireless_receiver_tb_on.png", "jeija_wireless_receiver_on.png", "jeija_wireless_receiver_on.png", "jeija_wireless_receiver_on.png", "jeija_wireless_receiver_on.png"}, inventory_image = minetest.inventorycube("jeija_wireless_receiver_on.png"), groups = {choppy=2}, drop = 'mesecons_wireless:wireless_receiver_off', description="Wireless Receiver", after_place_node = function(pos) mesecon:register_wireless_receiver(pos, 0) end, after_dig_node = function(pos) mesecon:remove_wireless_receiver(pos) end }) minetest.register_craft({ output = '"mesecons_wireless:wireless_receiver_off" 2', recipe = { {'', "group:mesecon_conductor_craftable", ''}, {'', "group:mesecon_conductor_craftable", ''}, {'', "mesecons_materials:ic", ''}, } }) minetest.register_abm( -- SAVE WIRELESS RECEIVERS TO FILE {nodenames = {"mesecons_wireless:wireless_receiver_off", "mesecons_wireless:wireless_receiver_on", "mesecons_wireless:wireless_inverter_on", "mesecons_wireless:wireless_inverter_off"}, interval = 10, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) local mesecon_file = io.open(minetest.get_modpath("jeija").."/mesecon_data", "w") local i=1 while mesecon.wireless_receivers[i]~=nil do mesecon_file:write("NEXT\n") mesecon_file:write(mesecon.wireless_receivers[i].pos.x.."\n") mesecon_file:write(mesecon.wireless_receivers[i].pos.y.."\n") mesecon_file:write(mesecon.wireless_receivers[i].pos.z.."\n") mesecon_file:write(mesecon.wireless_receivers[i].channel.."\n") mesecon_file:write(mesecon.wireless_receivers[i].requested_state.."\n") mesecon_file:write(mesecon.wireless_receivers[i].inverting.."\n") i=i+1 end mesecon_file:close() end, }) mesecon:add_receptor_node("mesecons_wireless:wireless_receiver_on") mesecon:add_receptor_node_off("mesecons_wireless:wireless_receiver_off") -- WIRELESS INVERTER OFF/ON BELONGS TO THE OUTPUT STATE (ON=INPUT OFF) minetest.register_node("mesecons_wireless:wireless_inverter_off", { tile_images = {"jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_off.png", "jeija_wireless_inverter_off.png", "jeija_wireless_inverter_off.png", "jeija_wireless_inverter_off.png"}, inventory_image = minetest.inventorycube("jeija_wireless_inverter_off.png"), groups = {choppy=2}, drop = 'mesecons_wireless:wireless_inverter_on', description = "Wireless Inverter", after_place_node = function(pos) mesecon:register_wireless_receiver(pos, 1) mesecon:receptor_on(pos) end, after_dig_node = function(pos) mesecon:remove_wireless_receiver(pos) end }) minetest.register_node("mesecons_wireless:wireless_inverter_on", { tile_images = {"jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_on.png", "jeija_wireless_inverter_on.png", "jeija_wireless_inverter_on.png", "jeija_wireless_inverter_on.png"}, inventory_image = minetest.inventorycube("jeija_wireless_inverter_on.png"), groups = {choppy=2}, description = "Wireless Inverter", after_place_node = function(pos) mesecon:register_wireless_receiver(pos, 1) mesecon:receptor_on(pos) end, after_dig_node = function(pos) mesecon:remove_wireless_receiver(pos) mesecon:receptor_off(pos) end }) minetest.register_craft({ output = '"mesecons_wireless:wireless_inverter_off" 2', recipe = { {'', 'default:steel_ingot', ''}, {'mesecons_materials:ic', 'group:mesecon_conductor_craftable', 'mesecons_materials:ic'}, {'', 'group:mesecon_conductor_craftable', ''}, } }) mesecon:add_receptor_node("mesecons_wireless:wireless_inverter_on") mesecon:add_receptor_node_off("mesecons_wireless:wireless_inverter_off") -- WIRELESS TRANSMITTER function mesecon:wireless_transmit(channel, senderstate) local i = 1 while mesecon.wireless_receivers[i]~=nil do if mesecon.wireless_receivers[i].channel==channel then if senderstate==1 then mesecon.wireless_receivers[i].requested_state=1 elseif senderstate==0 then mesecon.wireless_receivers[i].requested_state=0 end end i=i+1 end end minetest.register_node("mesecons_wireless:wireless_transmitter_on", { tile_images = {"jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_on.png", "jeija_wireless_transmitter_on.png", "jeija_wireless_transmitter_on.png", "jeija_wireless_transmitter_on.png"}, inventory_image = minetest.inventorycube("jeija_wireless_transmitter_on.png"), groups = {choppy=2}, drop = {'"mesecons_wireless:wireless_transmitter_off" 1'}, description="Wireless Transmitter", }) minetest.register_node("mesecons_wireless:wireless_transmitter_off", { tile_images = {"jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_off.png", "jeija_wireless_transmitter_off.png", "jeija_wireless_transmitter_off.png", "jeija_wireless_transmitter_off.png"}, inventory_image = minetest.inventorycube("jeija_wireless_transmitter_off.png"), groups = {choppy=2}, description="Wireless Transmitter", }) minetest.register_craft({ output = '"mesecons_wireless:wireless_transmitter_off" 2', recipe = { {'default:steel_ingot', 'group:mesecon_conductor_craftable', 'default:steel_ingot'}, {'', 'group:mesecon_conductor_craftable', ''}, {'', 'mesecons_materials:ic', ''}, } }) mesecon:register_on_signal_on(function(pos, node) if node.name=="mesecons_wireless:wireless_transmitter_off" then minetest.env:add_node(pos, {name="mesecons_wireless:wireless_transmitter_on"}) local node_under_pos=pos node_under_pos.y=node_under_pos.y-1 local node_under=minetest.env:get_node(node_under_pos) mesecon:wireless_transmit(node_under.name, 1) end end) mesecon:register_on_signal_off(function(pos, node) if node.name=="mesecons_wireless:wireless_transmitter_on" then minetest.env:add_node(pos, {name="mesecons_wireless:wireless_transmitter_off"}) local node_under_pos=pos node_under_pos.y=node_under_pos.y-1 local node_under=minetest.env:get_node(node_under_pos) mesecon:wireless_transmit(node_under.name, 0) end end) mesecon:read_wlre_from_file()