From 521070541750a5913c6e83638c60ec3ff6ae79cd Mon Sep 17 00:00:00 2001
From: Jeija <norrepli@googlemail.com>
Date: Sun, 8 Jan 2012 18:23:44 +0100
Subject: Change Button Rules, Torch rules and split into multiple files.
 Object detectors with sign underneath only detect players with the name on
 it.

---
 jeija/button.lua                         |  84 ++++
 jeija/detector.lua                       |  85 ++++
 jeija/init.lua                           | 744 ++-----------------------------
 jeija/mesecon_data                       |   7 +
 jeija/pressureplates.lua                 | 151 +++++++
 jeija/textures/jeija_wall_button_off.png | Bin 0 -> 174 bytes
 jeija/textures/jeija_wall_button_on.png  | Bin 0 -> 158 bytes
 jeija/torches                            | 138 ++++++
 jeija/torches.lua                        | 138 ++++++
 jeija/wireless.lua                       | 327 ++++++++++++++
 10 files changed, 967 insertions(+), 707 deletions(-)
 create mode 100644 jeija/button.lua
 create mode 100644 jeija/detector.lua
 create mode 100644 jeija/pressureplates.lua
 create mode 100644 jeija/textures/jeija_wall_button_off.png
 create mode 100644 jeija/textures/jeija_wall_button_on.png
 create mode 100644 jeija/torches
 create mode 100644 jeija/torches.lua
 create mode 100644 jeija/wireless.lua

(limited to 'jeija')

diff --git a/jeija/button.lua b/jeija/button.lua
new file mode 100644
index 0000000..bc3ec17
--- /dev/null
+++ b/jeija/button.lua
@@ -0,0 +1,84 @@
+-- WALL BUTTON
+minetest.register_node("jeija:wall_button_off", {
+    drawtype = "signlike",
+    tile_images = {"jeija_wall_button_off.png"},
+    inventory_image = "jeija_wall_button_off.png",
+    paramtype = "light",
+    wall_mounted = true,
+    walkable = false,
+    selection_box = {
+        type = "wallmounted",
+    },
+    material = minetest.digprop_constanttime(0.3),
+})
+minetest.register_node("jeija:wall_button_on", {
+    drawtype = "signlike",
+    tile_images = {"jeija_wall_button_on.png"},
+    inventory_image = "jeija_wall_button_on.png",
+    paramtype = "light",
+    wall_mounted = true,
+    walkable = false,
+    selection_box = {
+        type = "wallmounted",
+    },
+    material = minetest.digprop_constanttime(0.3),
+    dug_item = 'node jeija:wall_button_off 1',
+})
+
+minetest.register_on_dignode(
+    function(pos, oldnode, digger)
+        if oldnode.name == "jeija:wall_button_on" then
+            mesecon:receptor_off(pos)
+        end    
+    end
+)
+minetest.register_on_punchnode(function(pos, node, puncher)
+	if node.name == "jeija:wall_button_off" then
+		minetest.env:add_node(pos, {name="jeija:wall_button_on",param2=node.param2})
+		local rules_string=""
+		if node.param2 == 32 then
+			rules_string="button_z+"
+		end
+		if node.param2 == 2 then
+			rules_string="button_x+"
+		end
+		if node.param2 == 16 then
+			rules_string="button_z-"
+		end
+		if node.param2 == 1 then
+			rules_string="button_x-"
+		end
+		mesecon:receptor_on(pos, rules_string)
+	end
+end)
+minetest.register_abm({
+	nodenames = {"jeija:wall_button_on"},
+	interval = 0.1,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+		minetest.env:add_node(pos, {name="jeija:wall_button_off",param2=node.param2})
+
+		local rules_string=""
+		if node.param2 == 32 then
+			rules_string="button_z+"
+		end
+		if node.param2 == 2 then
+			rules_string="button_x+"
+		end
+		if node.param2 == 16 then
+			rules_string="button_z-"
+		end
+		if node.param2 == 1 then
+			rules_string="button_x-"
+		end
+        	mesecon:receptor_off(pos, rules_string)
+	end
+})
+minetest.register_craft({
+	output = 'node "jeija:wall_button_off" 2',
+	recipe = {
+		{'node "jeija:mesecon_off"','node "default:stone"'},
+	}
+})
+mesecon:add_receptor_node("jeija:wall_button")
+mesecon:add_receptor_node_off("jeija:wall_button_off")
diff --git a/jeija/detector.lua b/jeija/detector.lua
new file mode 100644
index 0000000..2e9732b
--- /dev/null
+++ b/jeija/detector.lua
@@ -0,0 +1,85 @@
+--SHORT RANGE DETECTORS
+minetest.register_node("jeija:object_detector_off", {
+	tile_images = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png"},
+	inventory_image = minetest.inventorycube("default_steel_block.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png"),
+	paramtype = "light",
+	walkable = true,
+	material = minetest.digprop_stonelike(4),
+})
+
+minetest.register_node("jeija:object_detector_on", {
+	tile_images = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png"},
+	inventory_image = minetest.inventorycube("jeija_object_detector_on.png"),
+	paramtype = "light",
+	walkable = true,
+	material = minetest.digprop_stonelike(4),
+	dug_item = 'node "jeija:object_detector_off" 1'
+})
+
+minetest.register_craft({
+	output = 'node "jeija:object_detector_off" 1',
+	recipe = {
+		{'node "default:steelblock"', '', 'node "default:steelblock"'},
+		{'node "default:steelblock"', 'craft "jeija:ic"', 'node "default:steelblock"'},
+		{'node "default:steelblock"', 'node "jeija:mesecon_off', 'node "default:steelblock"'},
+	}
+})
+
+minetest.register_abm(
+	{nodenames = {"jeija:object_detector_off"},
+	interval = 1.0,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+		local objs = minetest.env:get_objects_inside_radius(pos, 6)
+		for k, obj in pairs(objs) do
+			if obj:get_entity_name()~="jeija:piston_pusher_sticky" and obj:get_entity_name()~="jeija:piston_pusher_normal" and obj:get_player_name()~=nil then -- Detected object is not piston pusher - will be changed if every entity has a type (like entity_type=mob)
+				if minetest.env:get_node({x=pos.x, y=pos.y-1, z=pos.z}).name=="default:sign_wall" then
+					if obj:get_player_name()~=minetest.env:get_meta({x=pos.x, y=pos.y-1, z=pos.z}):get_text() then
+						return
+					end
+				end
+				local objpos=obj:getpos()
+				minetest.env:add_node(pos, {name="jeija:object_detector_on"})
+				mesecon:receptor_on(pos, "pressureplate")
+			end
+		end	
+	end,
+})
+
+minetest.register_abm(
+	{nodenames = {"jeija:object_detector_on"},
+	interval = 1.0,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+		local objs = minetest.env:get_objects_inside_radius(pos, 6)
+		local objectfound=0
+		for k, obj in pairs(objs) do
+			if obj:get_entity_name()~="jeija:piston_pusher_sticky" and obj:get_entity_name()~="jeija:piston_pusher_normal" and obj~=nil 
+			and obj:get_player_name()~=nil then
+				if minetest.env:get_node({x=pos.x, y=pos.y-1, z=pos.z}).name=="default:sign_wall" then
+					if minetest.env:get_meta({x=pos.x, y=pos.y-1, z=pos.z}):get_text() == obj:get_player_name() then
+						objectfound=objectfound+1
+					end
+				else
+-- Detected object is not piston pusher - will be changed if every entity has a type (like entity_type=mob)
+					objectfound=objectfound + 1
+				end
+			end
+		end	
+		if objectfound==0 then
+			minetest.env:add_node(pos, {name="jeija:object_detector_off"})
+			mesecon:receptor_off(pos, "pressureplate")
+		end
+	end,
+})
+
+minetest.register_on_dignode(
+	function(pos, oldnode, digger)
+		if oldnode.name == "jeija:object_detector_on" then
+			mesecon:receptor_off(pos, "pressureplate")
+		end	
+	end
+)
+
+mesecon:add_receptor_node("jeija:object_detector_on")
+mesecon:add_receptor_node_off("jeija:object_detector_off")
diff --git a/jeija/init.lua b/jeija/init.lua
index f71609a..49e2158 100644
--- a/jeija/init.lua
+++ b/jeija/init.lua
@@ -137,7 +137,6 @@ function mesecon:is_power_off(p, x, y, z)
 end
 
 function mesecon:turnon(p, x, y, z, firstcall, rules)
-	print (dump(rules))
 	if rules==nil then
 		rules="default"
 	end
@@ -500,7 +499,35 @@ function mesecon:get_rules(name)
 		table.insert(rules, {x=0,  y=-1,  z=0})
 		table.insert(rules, {x=0,  y=-1,  z=1})
 		table.insert(rules, {x=0,  y=-1,  z=-1})
-		print ("Y++++++++++")
+	end
+
+	if name=="button_x+" or name=="button_x-"
+	or name=="button_z-" or name=="button_z+" then --Is any button
+table.insert(rules, {x=0,  y=0,  z=-1})
+		table.insert(rules, {x=1,  y=0,  z=0})
+		table.insert(rules, {x=-1, y=0,  z=0})
+		table.insert(rules, {x=0,  y=0,  z=1})
+		table.insert(rules, {x=1,  y=1,  z=0})
+		table.insert(rules, {x=1,  y=-1, z=0})
+		table.insert(rules, {x=-1, y=1,  z=0})
+		table.insert(rules, {x=-1, y=-1, z=0})
+		table.insert(rules, {x=0,  y=1,  z=1})
+		table.insert(rules, {x=0,  y=-1, z=1})
+		table.insert(rules, {x=0,  y=1,  z=-1})
+		table.insert(rules, {x=0,  y=-1, z=-1})
+		table.insert(rules, {x=0,  y=-1, z=0})
+	end
+	if name=="button_x+" then	
+		table.insert(rules, {x=-2,  y=0,  z=0})	
+	end
+	if name=="button_x-" then	
+		table.insert(rules, {x=2,  y=0,  z=0})	
+	end
+	if name=="button_z+" then	
+		table.insert(rules, {x=0,  y=0,  z=-2})	
+	end
+	if name=="button_z-" then	
+		table.insert(rules, {x=0,  y=0,  z=2})	
 	end
 	return rules
 end
@@ -1047,18 +1074,12 @@ mesecon:add_receptor_node_off("jeija:mesecon_switch_off")
 
 minetest.register_on_punchnode(function(pos, node, puncher)
 	if node.name == "jeija:mesecon_switch_on" then
-		--local param2=minetest.env:get_node(pos).param2
-		--print (param2)
-		--minetest.env:remove_node(pos)
-		minetest.env:add_node(pos, {name="jeija:mesecon_switch_off"})
+		minetest.env:add_node(pos, {name="jeija:mesecon_switch_off", param1=node.param1})
 		nodeupdate(pos)
 		mesecon:receptor_off(pos)
 	end
 	if node.name == "jeija:mesecon_switch_off" then
-		--local param2=minetest.env:get_node(pos).param2
-		--print (param2)
-		--minetest.env:remove_node(pos)
-		minetest.env:add_node(pos, {name="jeija:mesecon_switch_on"})
+		minetest.env:add_node(pos, {name="jeija:mesecon_switch_on", param1=node.param1})
 		nodeupdate(pos)
 		mesecon:receptor_on(pos)
 	end
@@ -1113,705 +1134,14 @@ mesecon:register_on_signal_on(function(pos, node)
 	end
 end)
 
--- IC
-minetest.register_craftitem("jeija:ic", {
-	image = "jeija_ic.png",
-	on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craft({
-	output = 'craft "jeija:ic" 2',
-	recipe = {
-		{'craft "jeija:silicon"', 'craft "jeija:silicon"', 'node "jeija:mesecon_off"'},
-		{'craft "jeija:silicon"', 'craft "jeija:silicon"', 'node "jeija:mesecon_off"'},
-		{'node "jeija:mesecon_off"', 'node "jeija:mesecon_off"', ''},
-	}
-})
-
---COMMON WIRELESS FUNCTIONS
-
-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 == "jeija:wireless_receiver_off" or
-	   minetest.env:get_node(pos).name == "jeija:wireless_receiver_on"  or
-	   minetest.env:get_node(pos).name == "jeija:wireless_inverter_off" or
-	   minetest.env:get_node(pos).name == "jeija: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 == "jeija:wireless_receiver_on" or
-		   minetest.env:get_node(pos).name == "jeija:wireless_receiver_off" or
-		   minetest.env:get_node(pos).name == "jeija:wireless_inverter_on" or
-		   minetest.env:get_node(pos).name == "jeija:wireless_inverter_off" then
-			mesecon:set_wlre_channel(pos, "air")
-		end	
-	end
-)
-
-minetest.register_abm(
-	{nodenames = {"jeija:wireless_receiver_on", "jeija:wireless_receiver_off",
-		      "jeija:wireless_inverter_on", "jeija: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=="jeija:wireless_receiver_on" and wlre.requested_state==0  then
-			minetest.env:add_node(pos, {name="jeija:wireless_receiver_off"})
-			mesecon:receptor_off(pos)
-		end
-		if node.name=="jeija:wireless_receiver_off" and wlre.requested_state==1  then
-			minetest.env:add_node(pos, {name="jeija:wireless_receiver_on"})
-			mesecon:receptor_on(pos)
-		end
-		if node.name=="jeija:wireless_inverter_off" and wlre.requested_state==0 and wlre.inverting==1 then
-			minetest.env:add_node(pos, {name="jeija:wireless_inverter_on"})
-			mesecon:receptor_on(pos)
-		end
-		if node.name=="jeija:wireless_inverter_on" and wlre.requested_state==1 and wlre.inverting==1 then
-			minetest.env:add_node(pos, {name="jeija:wireless_inverter_off"})
-			mesecon:receptor_off(pos)
-		end
-	end,
-})
-
---WIRELESS RECEIVER
-
-minetest.register_node("jeija: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"),
-	material = minetest.digprop_constanttime(0.8),
-})
-
-minetest.register_node("jeija: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"),
-	material = minetest.digprop_constanttime(0.8),
-	dug_item = 'node "jeija:wireless_receiver_off" 1'
-})
-
-minetest.register_craft({
-	output = 'node "jeija:wireless_receiver_off" 2',
-	recipe = {
-		{'', 'node "jeija:mesecon_off"', ''},
-		{'', 'node "jeija:mesecon_off"', ''},
-		{'', 'craft "jeija:ic"', ''},
-	}
-})
-
-minetest.register_on_placenode(function(pos, newnode, placer)
-	if newnode.name == "jeija:wireless_receiver_off" then
-		mesecon:register_wireless_receiver(pos, 0)
-	end
-end)
-
-minetest.register_on_dignode(
-	function(pos, oldnode, digger)
-		if oldnode.name == "jeija:wireless_receiver_on" then
-			mesecon:remove_wireless_receiver(pos)
-			mesecon:receptor_off(pos)
-		end	
-		if oldnode.name == "jeija:wireless_receiver_off" then
-			mesecon:remove_wireless_receiver(pos)		
-		end
-	end
-)
-
-minetest.register_abm( -- SAVE WIRELESS RECEIVERS TO FILE
-	{nodenames = {"jeija:wireless_receiver_off", "jeija:wireless_receiver_on", "jeija:wireless_inverter_on", "jeija: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("jeija:wireless_receiver_on")
-mesecon:add_receptor_node_off("jeija:wireless_receiver_off")
-
--- WIRELESS INVERTER OFF/ON BELONGS TO THE OUTPUT STATE (ON=INPUT OFF)
-
-minetest.register_node("jeija: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"),
-	material = minetest.digprop_constanttime(0.8),
-	dug_item = 'node "jeija:wireless_inverter_on" 1'
-})
-
-minetest.register_node("jeija: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"),
-	material = minetest.digprop_constanttime(0.8),
-})
-
-minetest.register_craft({
-	output = 'node "jeija:wireless_inverter_off" 2',
-	recipe = {
-		{'', 'craft "default:steel_ingot"', ''},
-		{'craft "jeija:ic"', 'node "jeija:mesecon_off"', 'craft "jeija:ic"'},
-		{'', 'node "jeija:mesecon_off"', ''},
-	}
-})
-
-minetest.register_on_placenode(function(pos, newnode, placer)
-	if newnode.name == "jeija:wireless_inverter_on" then
-		mesecon:register_wireless_receiver(pos, 1)
-		mesecon:receptor_on(pos)
-	end
-end)
-
-minetest.register_on_dignode(
-	function(pos, oldnode, digger)
-		if oldnode.name == "jeija:wireless_inverter_on" then
-			mesecon:remove_wireless_receiver(pos)
-			mesecon:receptor_off(pos)
-		end	
-		if oldnode.name == "jeija:wireless_inverter_off" then
-			mesecon:remove_wireless_receiver(pos)		
-		end
-	end
-)
-
-mesecon:add_receptor_node("jeija:wireless_inverter_on")
-mesecon:add_receptor_node_off("jeija: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("jeija: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"),
-	material = minetest.digprop_constanttime(0.8),
-	dug_item = 'node "jeija:wireless_transmitter_off" 1',
-})
-
-minetest.register_node("jeija: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"),
-	material = minetest.digprop_constanttime(0.8),
-})
-
-minetest.register_craft({
-	output = 'node "jeija:wireless_transmitter_off" 2',
-	recipe = {
-		{'craft "default:steel_ingot"', 'node "jeija:mesecon_off"', 'craft "default:steel_ingot"'},
-		{'', 'node "jeija:mesecon_off"', ''},
-		{'', 'craft "jeija:ic"', ''},
-	}
-})
-
-mesecon:register_on_signal_on(function(pos, node)
-	if node.name=="jeija:wireless_transmitter_off" then
-		minetest.env:add_node(pos, {name="jeija: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=="jeija:wireless_transmitter_on" then
-		minetest.env:add_node(pos, {name="jeija: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)
-
--- PRESSURE PLATE WOOD
-
-minetest.register_node("jeija:pressure_plate_wood_off", {
-	drawtype = "raillike",
-	tile_images = {"jeija_pressure_plate_wood_off.png"},
-	inventory_image = "jeija_pressure_plate_wood_off.png",
-	paramtype = "light",
-	is_ground_content = true,
-	walkable = false,
-	selection_box = {
-		type = "fixed",
-	},
-	material = minetest.digprop_constanttime(0.3),
-})
-
-minetest.register_node("jeija:pressure_plate_wood_on", {
-	drawtype = "raillike",
-	tile_images = {"jeija_pressure_plate_wood_on.png"},
-	inventory_image = "jeija_pressure_plate_wood_on.png",
-	paramtype = "light",
-	is_ground_content = true,
-	walkable = false,
-	selection_box = {
-		type = "fixed",
-	},
-	material = minetest.digprop_constanttime(0.3),
-	dug_item='node "jeija:pressure_plate_wood_off" 1'
-})
-
-minetest.register_craft({
-	output = 'node "jeija:pressure_plate_wood_off" 1',
-	recipe = {
-		{'node "default:wood"', 'node "default:wood"'},
-	}
-})
-
-minetest.register_abm(
-	{nodenames = {"jeija:pressure_plate_wood_off"},
-	interval = 1.0,
-	chance = 1,
-	action = function(pos, node, active_object_count, active_object_count_wider)
-		local objs = minetest.env:get_objects_inside_radius(pos, 1)
-		for k, obj in pairs(objs) do
-			local objpos=obj:getpos()
-			if objpos.y>pos.y-1 and objpos.y<pos.y then
-				minetest.env:add_node(pos, {name="jeija:pressure_plate_wood_on"})
-				mesecon:receptor_on(pos, "pressureplate")
-			end
-		end	
-	end,
-})
-
-minetest.register_abm(
-	{nodenames = {"jeija:pressure_plate_wood_on"},
-	interval = 1.0,
-	chance = 1,
-	action = function(pos, node, active_object_count, active_object_count_wider)
-		local objs = minetest.env:get_objects_inside_radius(pos, 1)
-		if objs[1]==nil then
-			minetest.env:add_node(pos, {name="jeija:pressure_plate_wood_off"})
-			mesecon:receptor_off(pos, "pressureplate")
-		end
-	end,
-})
-
-minetest.register_on_dignode(
-	function(pos, oldnode, digger)
-		if oldnode.name == "jeija:pressure_plate_wood_on" then
-			mesecon:receptor_off(pos, "pressureplate")
-		end	
-	end
-)
-
-mesecon:add_receptor_node("jeija:pressure_plate_wood_on")
-mesecon:add_receptor_node_off("jeija:pressure_plate_wood_off")
-
--- PRESSURE PLATE STONE
-
-minetest.register_node("jeija:pressure_plate_stone_off", {
-	drawtype = "raillike",
-	tile_images = {"jeija_pressure_plate_stone_off.png"},
-	inventory_image = "jeija_pressure_plate_stone_off.png",
-	paramtype = "light",
-	is_ground_content = true,
-	walkable = false,
-	selection_box = {
-		type = "fixed",
-	},
-	material = minetest.digprop_constanttime(0.3),
-})
-
-minetest.register_node("jeija:pressure_plate_stone_on", {
-	drawtype = "raillike",
-	tile_images = {"jeija_pressure_plate_stone_on.png"},
-	inventory_image = "jeija_pressure_plate_stone_on.png",
-	paramtype = "light",
-	is_ground_content = true,
-	walkable = false,
-	selection_box = {
-		type = "fixed",
-	},
-	material = minetest.digprop_constanttime(0.3),
-	dug_item='node "jeija:pressure_plate_stone_off" 1'
-})
-
-minetest.register_craft({
-	output = 'node "jeija:pressure_plate_stone_off" 1',
-	recipe = {
-		{'node "default:cobble"', 'node "default:cobble"'},
-	}
-})
-
-minetest.register_abm(
-	{nodenames = {"jeija:pressure_plate_stone_off"},
-	interval = 1.0,
-	chance = 1,
-	action = function(pos, node, active_object_count, active_object_count_wider)
-		local objs = minetest.env:get_objects_inside_radius(pos, 1)
-		for k, obj in pairs(objs) do
-			local objpos=obj:getpos()
-			if objpos.y>pos.y-1 and objpos.y<pos.y then
-				minetest.env:add_node(pos, {name="jeija:pressure_plate_stone_on"})
-				mesecon:receptor_on(pos, "pressureplate")
-			end
-		end	
-	end,
-})
-
-minetest.register_abm(
-	{nodenames = {"jeija:pressure_plate_stone_on"},
-	interval = 1.0,
-	chance = 1,
-	action = function(pos, node, active_object_count, active_object_count_wider)
-		local objs = minetest.env:get_objects_inside_radius(pos, 1)
-		if objs[1]==nil then
-			minetest.env:add_node(pos, {name="jeija:pressure_plate_stone_off"})
-			mesecon:receptor_off(pos, "pressureplate")
-		end
-	end,
-})
-
-minetest.register_on_dignode(
-	function(pos, oldnode, digger)
-		if oldnode.name == "jeija:pressure_plate_stone_on" then
-			mesecon:receptor_off(pos, "pressureplate")
-		end	
-	end
-)
-
-mesecon:add_receptor_node("jeija:pressure_plate_stone_on")
-mesecon:add_receptor_node_off("jeija:pressure_plate_stone_off")
-
-
---SHORT RANGE DETECTORS
-minetest.register_node("jeija:object_detector_off", {
-	tile_images = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png"},
-	inventory_image = minetest.inventorycube("default_steel_block.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png"),
-	paramtype = "light",
-	walkable = true,
-	material = minetest.digprop_stonelike(4),
-})
-
-minetest.register_node("jeija:object_detector_on", {
-	tile_images = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png"},
-	inventory_image = minetest.inventorycube("jeija_object_detector_on.png"),
-	paramtype = "light",
-	walkable = true,
-	material = minetest.digprop_stonelike(4),
-	dug_item = 'node "jeija:object_detector_off" 1'
-})
-
-minetest.register_craft({
-	output = 'node "jeija:object_detector_off" 1',
-	recipe = {
-		{'node "default:steelblock"', '', 'node "default:steelblock"'},
-		{'node "default:steelblock"', 'craft "jeija:ic"', 'node "default:steelblock"'},
-		{'node "default:steelblock"', 'node "jeija:mesecon_off', 'node "default:steelblock"'},
-	}
-})
-
-minetest.register_abm(
-	{nodenames = {"jeija:object_detector_off"},
-	interval = 1.0,
-	chance = 1,
-	action = function(pos, node, active_object_count, active_object_count_wider)
-		local objs = minetest.env:get_objects_inside_radius(pos, 6)
-		for k, obj in pairs(objs) do
-			if obj:get_entity_name()~="jeija:piston_pusher_sticky" and obj:get_entity_name()~="jeija:piston_pusher_normal" and obj:get_player_name()~=nil then -- Detected object is not piston pusher - will be changed if every entity has a type (like entity_type=mob)
-				local objpos=obj:getpos()
-				minetest.env:add_node(pos, {name="jeija:object_detector_on"})
-				mesecon:receptor_on(pos, "pressureplate")
-			end
-		end	
-	end,
-})
-
-minetest.register_abm(
-	{nodenames = {"jeija:object_detector_on"},
-	interval = 1.0,
-	chance = 1,
-	action = function(pos, node, active_object_count, active_object_count_wider)
-		local objs = minetest.env:get_objects_inside_radius(pos, 6)
-		local objectfound=0
-		for k, obj in pairs(objs) do
-			if obj:get_entity_name()~="jeija:piston_pusher_sticky" and obj:get_entity_name()~="jeija:piston_pusher_normal" and obj~=nil and obj:get_player_name()~=nil then -- Detected object is not piston pusher - will be changed if every entity has a type (like entity_type=mob)
-				objectfound=objectfound + 1
-			end
-		end	
-		if objectfound==0 then
-			minetest.env:add_node(pos, {name="jeija:object_detector_off"})
-			mesecon:receptor_off(pos, "pressureplate")
-		end
-	end,
-})
-
-minetest.register_on_dignode(
-	function(pos, oldnode, digger)
-		if oldnode.name == "jeija:object_detector_on" then
-			mesecon:receptor_off(pos, "pressureplate")
-		end	
-	end
-)
-
-mesecon:add_receptor_node("jeija:object_detector_on")
-mesecon:add_receptor_node_off("jeija:object_detector_off")
-
-
---MESECON TORCHES
-
-minetest.register_craft({
-    output = 'node "jeija:mesecon_torch_on" 4',
-    recipe = {
-        {'node "jeija:mesecon_off"'},
-        {'craft "default:stick"'},
-    }
-})
-
-minetest.register_node("jeija:mesecon_torch_off", {
-    drawtype = "torchlike",
-    tile_images = {"jeija_torches_off.png", "jeija_torches_off_ceiling.png", "jeija_torches_off_side.png"},
-    inventory_image = "jeija_torches_off.png",
-    sunlight_propagates = true,
-    walkable = false,
-    wall_mounted = true,
-    material = minetest.digprop_constanttime(0.5),
-    dug_item = 'node "jeija:mesecon_torch_on" 1',
-})
-
-minetest.register_node("jeija:mesecon_torch_on", {
-    drawtype = "torchlike",
-    tile_images = {"jeija_torches_on.png", "jeija_torches_on_ceiling.png", "jeija_torches_on_side.png"},
-    inventory_image = "jeija_torches_on.png",
-    paramtype = "light",
-    sunlight_propagates = true,
-    walkable = false,
-    wall_mounted = true,
-    material = minetest.digprop_constanttime(0.5),
-    light_source = LIGHT_MAX-5,
-})
-
---[[minetest.register_on_placenode(function(pos, newnode, placer)
-	if (newnode.name=="jeija:mesecon_torch_off" or newnode.name=="jeija:mesecon_torch_on")
-	and (newnode.param2==8 or newnode.param2==4) then
-		minetest.env:remove_node(pos)
-		--minetest.env:add_item(pos, "craft 'jeija:mesecon_torch_on' 1")
-	end
-end)]]
-
-minetest.register_abm({
-    nodenames = {"jeija:mesecon_torch_off","jeija:mesecon_torch_on"},
-    interval = 0.2,
-    chance = 1,
-    action = function(pos, node, active_object_count, active_object_count_wider)
-        local pa = {x=0, y=0, z=0}
-	pa.y = 1
-	local rules_string=""
-
-	if node.param2 == 32 then
-		pa.z = -1
-		rules_string="mesecontorch_z+"
-	end
-	if node.param2 == 2 then
-		pa.x = -1
-		rules_string="mesecontorch_x+"
-	end
-	if node.param2 == 16 then
-		pa.z = 1
-		rules_string="mesecontorch_z-"
-	end
-	if node.param2 == 1 then
-		pa.x = 1
-		rules_string="mesecontorch_x-"
-	end
-	if node.param2 == 4 then
-		rules_string="mesecontorch_y-"
-		pa.y = 1
-		pa.z=0
-		pa.x=0
-        end
-        if node.param2 == 8 then
-		rules_string="mesecontorch_y+"
-		pa.y = -1
-		pa.z=0
-		pa.x=0
-        end
-
-	local rules=mesecon:get_rules(rules_string)
-        if mesecon:is_power_on({x=pos.x, y=pos.y, z=pos.z}, pa.x, pa.y, pa.z)==1 then
-            if node.name ~= "jeija:mesecon_torch_off" then
-                minetest.env:add_node(pos, {name="jeija:mesecon_torch_off",param2=node.param2})
-                mesecon:receptor_off({x=pos.x-pa.x, y=pos.y-pa.y, z=pos.z-pa.z}, rules)
-            end
-        else
-            if node.name ~= "jeija:mesecon_torch_on" then
-                minetest.env:add_node(pos, {name="jeija:mesecon_torch_on",param2=node.param2})
-                mesecon:receptor_on({x=pos.x-pa.x, y=pos.y-pa.y, z=pos.z-pa.z}, rules)
-            end
-        end
-    end
-})
-
-minetest.register_on_dignode(
-	function(pos, oldnode, digger)
-		if oldnode.name == "jeija:mesecon_torch_on" then
-			mesecon:receptor_off(pos)
-		end	
-	end
-)
-
-minetest.register_on_placenode(function(pos, node, placer)
-	if node.name == "jeija:mesecon_torch_on" then
-		local rules_string=""
-
-		if node.param2 == 32 then
-			rules_string="mesecontorch_z+"
-		end
-		if node.param2 == 2 then
-			rules_string="mesecontorch_x+"
-		end
-		if node.param2 == 16 then
-			rules_string="mesecontorch_z-"
-		end
-		if node.param2 == 1 then
-			rules_string="mesecontorch_x-"
-		end
-		if node.param2 == 4 then
-			rules_string="mesecontorch_y-"
-	        end
-	        if node.param2 == 8 then
-			rules_string="mesecontorch_y+"
-	        end
-		
-		local rules=mesecon:get_rules(rules_string)
-		mesecon:receptor_on(pos, rules)
-	end
-end)
-
-mesecon:add_receptor_node("jeija:mesecon_torch_on")
-mesecon:add_receptor_node_off("jeija:mesecon_torch_off")
-
--- Param2 Table (Block Attached To)
--- 32 = z-1
--- 2 = x-1
--- 16 = z+1
--- 1 = x+1
--- 4 = y+1
--- 8 = y-1
-
 
--- MOVESTONES
+-- Include other files
 dofile(minetest.get_modpath("jeija").."/movestone.lua")
+dofile(minetest.get_modpath("jeija").."/button.lua")
+dofile(minetest.get_modpath("jeija").."/torches.lua")
+dofile(minetest.get_modpath("jeija").."/detector.lua")
+dofile(minetest.get_modpath("jeija").."/pressureplates.lua")
+dofile(minetest.get_modpath("jeija").."/wireless.lua")
 --TEMPEREST's STUFF
 if ENABLE_TEMPEREST==1 then
 	dofile(minetest.get_modpath("jeija").."temperest.lua")
diff --git a/jeija/mesecon_data b/jeija/mesecon_data
index e69de29..3070915 100644
--- a/jeija/mesecon_data
+++ b/jeija/mesecon_data
@@ -0,0 +1,7 @@
+NEXT
+69
+10
+6
+default:glass
+1
+0
diff --git a/jeija/pressureplates.lua b/jeija/pressureplates.lua
new file mode 100644
index 0000000..d894ff5
--- /dev/null
+++ b/jeija/pressureplates.lua
@@ -0,0 +1,151 @@
+-- PRESSURE PLATE WOOD
+
+minetest.register_node("jeija:pressure_plate_wood_off", {
+	drawtype = "raillike",
+	tile_images = {"jeija_pressure_plate_wood_off.png"},
+	inventory_image = "jeija_pressure_plate_wood_off.png",
+	paramtype = "light",
+	is_ground_content = true,
+	walkable = false,
+	selection_box = {
+		type = "fixed",
+	},
+	material = minetest.digprop_constanttime(0.3),
+})
+
+minetest.register_node("jeija:pressure_plate_wood_on", {
+	drawtype = "raillike",
+	tile_images = {"jeija_pressure_plate_wood_on.png"},
+	inventory_image = "jeija_pressure_plate_wood_on.png",
+	paramtype = "light",
+	is_ground_content = true,
+	walkable = false,
+	selection_box = {
+		type = "fixed",
+	},
+	material = minetest.digprop_constanttime(0.3),
+	dug_item='node "jeija:pressure_plate_wood_off" 1'
+})
+
+minetest.register_craft({
+	output = 'node "jeija:pressure_plate_wood_off" 1',
+	recipe = {
+		{'node "default:wood"', 'node "default:wood"'},
+	}
+})
+
+minetest.register_abm(
+	{nodenames = {"jeija:pressure_plate_wood_off"},
+	interval = 1.0,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+		local objs = minetest.env:get_objects_inside_radius(pos, 1)
+		for k, obj in pairs(objs) do
+			local objpos=obj:getpos()
+			if objpos.y>pos.y-1 and objpos.y<pos.y then
+				minetest.env:add_node(pos, {name="jeija:pressure_plate_wood_on"})
+				mesecon:receptor_on(pos, "pressureplate")
+			end
+		end	
+	end,
+})
+
+minetest.register_abm(
+	{nodenames = {"jeija:pressure_plate_wood_on"},
+	interval = 1.0,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+		local objs = minetest.env:get_objects_inside_radius(pos, 1)
+		if objs[1]==nil then
+			minetest.env:add_node(pos, {name="jeija:pressure_plate_wood_off"})
+			mesecon:receptor_off(pos, "pressureplate")
+		end
+	end,
+})
+
+minetest.register_on_dignode(
+	function(pos, oldnode, digger)
+		if oldnode.name == "jeija:pressure_plate_wood_on" then
+			mesecon:receptor_off(pos, "pressureplate")
+		end	
+	end
+)
+
+mesecon:add_receptor_node("jeija:pressure_plate_wood_on")
+mesecon:add_receptor_node_off("jeija:pressure_plate_wood_off")
+
+-- PRESSURE PLATE STONE
+
+minetest.register_node("jeija:pressure_plate_stone_off", {
+	drawtype = "raillike",
+	tile_images = {"jeija_pressure_plate_stone_off.png"},
+	inventory_image = "jeija_pressure_plate_stone_off.png",
+	paramtype = "light",
+	is_ground_content = true,
+	walkable = false,
+	selection_box = {
+		type = "fixed",
+	},
+	material = minetest.digprop_constanttime(0.3),
+})
+
+minetest.register_node("jeija:pressure_plate_stone_on", {
+	drawtype = "raillike",
+	tile_images = {"jeija_pressure_plate_stone_on.png"},
+	inventory_image = "jeija_pressure_plate_stone_on.png",
+	paramtype = "light",
+	is_ground_content = true,
+	walkable = false,
+	selection_box = {
+		type = "fixed",
+	},
+	material = minetest.digprop_constanttime(0.3),
+	dug_item='node "jeija:pressure_plate_stone_off" 1'
+})
+
+minetest.register_craft({
+	output = 'node "jeija:pressure_plate_stone_off" 1',
+	recipe = {
+		{'node "default:cobble"', 'node "default:cobble"'},
+	}
+})
+
+minetest.register_abm(
+	{nodenames = {"jeija:pressure_plate_stone_off"},
+	interval = 1.0,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+		local objs = minetest.env:get_objects_inside_radius(pos, 1)
+		for k, obj in pairs(objs) do
+			local objpos=obj:getpos()
+			if objpos.y>pos.y-1 and objpos.y<pos.y then
+				minetest.env:add_node(pos, {name="jeija:pressure_plate_stone_on"})
+				mesecon:receptor_on(pos, "pressureplate")
+			end
+		end	
+	end,
+})
+
+minetest.register_abm(
+	{nodenames = {"jeija:pressure_plate_stone_on"},
+	interval = 1.0,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+		local objs = minetest.env:get_objects_inside_radius(pos, 1)
+		if objs[1]==nil then
+			minetest.env:add_node(pos, {name="jeija:pressure_plate_stone_off"})
+			mesecon:receptor_off(pos, "pressureplate")
+		end
+	end,
+})
+
+minetest.register_on_dignode(
+	function(pos, oldnode, digger)
+		if oldnode.name == "jeija:pressure_plate_stone_on" then
+			mesecon:receptor_off(pos, "pressureplate")
+		end	
+	end
+)
+
+mesecon:add_receptor_node("jeija:pressure_plate_stone_on")
+mesecon:add_receptor_node_off("jeija:pressure_plate_stone_off")
diff --git a/jeija/textures/jeija_wall_button_off.png b/jeija/textures/jeija_wall_button_off.png
new file mode 100644
index 0000000..2c18986
Binary files /dev/null and b/jeija/textures/jeija_wall_button_off.png differ
diff --git a/jeija/textures/jeija_wall_button_on.png b/jeija/textures/jeija_wall_button_on.png
new file mode 100644
index 0000000..d09701b
Binary files /dev/null and b/jeija/textures/jeija_wall_button_on.png differ
diff --git a/jeija/torches b/jeija/torches
new file mode 100644
index 0000000..e5cfd73
--- /dev/null
+++ b/jeija/torches
@@ -0,0 +1,138 @@
+--MESECON TORCHES
+
+minetest.register_craft({
+    output = 'node "jeija:mesecon_torch_on" 4',
+    recipe = {
+        {'node "jeija:mesecon_off"'},
+        {'craft "default:stick"'},
+    }
+})
+
+minetest.register_node("jeija:mesecon_torch_off", {
+    drawtype = "torchlike",
+    tile_images = {"jeija_torches_off.png", "jeija_torches_off_ceiling.png", "jeija_torches_off_side.png"},
+    inventory_image = "jeija_torches_off.png",
+    sunlight_propagates = true,
+    walkable = false,
+    wall_mounted = true,
+    material = minetest.digprop_constanttime(0.5),
+    dug_item = 'node "jeija:mesecon_torch_on" 1',
+})
+
+minetest.register_node("jeija:mesecon_torch_on", {
+    drawtype = "torchlike",
+    tile_images = {"jeija_torches_on.png", "jeija_torches_on_ceiling.png", "jeija_torches_on_side.png"},
+    inventory_image = "jeija_torches_on.png",
+    paramtype = "light",
+    sunlight_propagates = true,
+    walkable = false,
+    wall_mounted = true,
+    material = minetest.digprop_constanttime(0.5),
+    light_source = LIGHT_MAX-5,
+})
+
+--[[minetest.register_on_placenode(function(pos, newnode, placer)
+	if (newnode.name=="jeija:mesecon_torch_off" or newnode.name=="jeija:mesecon_torch_on")
+	and (newnode.param2==8 or newnode.param2==4) then
+		minetest.env:remove_node(pos)
+		--minetest.env:add_item(pos, "craft 'jeija:mesecon_torch_on' 1")
+	end
+end)]]
+
+minetest.register_abm({
+    nodenames = {"jeija:mesecon_torch_off","jeija:mesecon_torch_on"},
+    interval = 0.2,
+    chance = 1,
+    action = function(pos, node, active_object_count, active_object_count_wider)
+        local pa = {x=0, y=0, z=0}
+	pa.y = 1
+	local rules_string=""
+
+	if node.param2 == 32 then
+		pa.z = -1
+		rules_string="mesecontorch_z+"
+	end
+	if node.param2 == 2 then
+		pa.x = -1
+		rules_string="mesecontorch_x+"
+	end
+	if node.param2 == 16 then
+		pa.z = 1
+		rules_string="mesecontorch_z-"
+	end
+	if node.param2 == 1 then
+		pa.x = 1
+		rules_string="mesecontorch_x-"
+	end
+	if node.param2 == 4 then
+		rules_string="mesecontorch_y-"
+		pa.y = 1
+		pa.z=0
+		pa.x=0
+        end
+        if node.param2 == 8 then
+		rules_string="mesecontorch_y+"
+		pa.y = -1
+		pa.z=0
+		pa.x=0
+        end
+
+        if mesecon:is_power_on({x=pos.x, y=pos.y, z=pos.z}, pa.x, pa.y, pa.z)==1 then
+            if node.name ~= "jeija:mesecon_torch_off" then
+                minetest.env:add_node(pos, {name="jeija:mesecon_torch_off",param2=node.param2})
+                mesecon:receptor_off({x=pos.x-pa.x, y=pos.y-pa.y, z=pos.z-pa.z}, rules_string)
+            end
+        else
+            if node.name ~= "jeija:mesecon_torch_on" then
+                minetest.env:add_node(pos, {name="jeija:mesecon_torch_on",param2=node.param2})
+                mesecon:receptor_on({x=pos.x-pa.x, y=pos.y-pa.y, z=pos.z-pa.z}, rules_string)
+            end
+        end
+    end
+})
+
+minetest.register_on_dignode(
+	function(pos, oldnode, digger)
+		if oldnode.name == "jeija:mesecon_torch_on" then
+			mesecon:receptor_off(pos)
+		end	
+	end
+)
+
+minetest.register_on_placenode(function(pos, node, placer)
+	if node.name == "jeija:mesecon_torch_on" then
+		local rules_string=""
+
+		if node.param2 == 32 then
+			rules_string="mesecontorch_z+"
+		end
+		if node.param2 == 2 then
+			rules_string="mesecontorch_x+"
+		end
+		if node.param2 == 16 then
+			rules_string="mesecontorch_z-"
+		end
+		if node.param2 == 1 then
+			rules_string="mesecontorch_x-"
+		end
+		if node.param2 == 4 then
+			rules_string="mesecontorch_y-"
+	        end
+	        if node.param2 == 8 then
+			rules_string="mesecontorch_y+"
+	        end
+		
+		mesecon:receptor_on(pos, rules_string)
+	end
+end)
+
+mesecon:add_receptor_node("jeija:mesecon_torch_on")
+mesecon:add_receptor_node_off("jeija:mesecon_torch_off")
+
+-- Param2 Table (Block Attached To)
+-- 32 = z-1
+-- 2 = x-1
+-- 16 = z+1
+-- 1 = x+1
+-- 4 = y+1
+-- 8 = y-1
diff --git a/jeija/torches.lua b/jeija/torches.lua
new file mode 100644
index 0000000..e5cfd73
--- /dev/null
+++ b/jeija/torches.lua
@@ -0,0 +1,138 @@
+--MESECON TORCHES
+
+minetest.register_craft({
+    output = 'node "jeija:mesecon_torch_on" 4',
+    recipe = {
+        {'node "jeija:mesecon_off"'},
+        {'craft "default:stick"'},
+    }
+})
+
+minetest.register_node("jeija:mesecon_torch_off", {
+    drawtype = "torchlike",
+    tile_images = {"jeija_torches_off.png", "jeija_torches_off_ceiling.png", "jeija_torches_off_side.png"},
+    inventory_image = "jeija_torches_off.png",
+    sunlight_propagates = true,
+    walkable = false,
+    wall_mounted = true,
+    material = minetest.digprop_constanttime(0.5),
+    dug_item = 'node "jeija:mesecon_torch_on" 1',
+})
+
+minetest.register_node("jeija:mesecon_torch_on", {
+    drawtype = "torchlike",
+    tile_images = {"jeija_torches_on.png", "jeija_torches_on_ceiling.png", "jeija_torches_on_side.png"},
+    inventory_image = "jeija_torches_on.png",
+    paramtype = "light",
+    sunlight_propagates = true,
+    walkable = false,
+    wall_mounted = true,
+    material = minetest.digprop_constanttime(0.5),
+    light_source = LIGHT_MAX-5,
+})
+
+--[[minetest.register_on_placenode(function(pos, newnode, placer)
+	if (newnode.name=="jeija:mesecon_torch_off" or newnode.name=="jeija:mesecon_torch_on")
+	and (newnode.param2==8 or newnode.param2==4) then
+		minetest.env:remove_node(pos)
+		--minetest.env:add_item(pos, "craft 'jeija:mesecon_torch_on' 1")
+	end
+end)]]
+
+minetest.register_abm({
+    nodenames = {"jeija:mesecon_torch_off","jeija:mesecon_torch_on"},
+    interval = 0.2,
+    chance = 1,
+    action = function(pos, node, active_object_count, active_object_count_wider)
+        local pa = {x=0, y=0, z=0}
+	pa.y = 1
+	local rules_string=""
+
+	if node.param2 == 32 then
+		pa.z = -1
+		rules_string="mesecontorch_z+"
+	end
+	if node.param2 == 2 then
+		pa.x = -1
+		rules_string="mesecontorch_x+"
+	end
+	if node.param2 == 16 then
+		pa.z = 1
+		rules_string="mesecontorch_z-"
+	end
+	if node.param2 == 1 then
+		pa.x = 1
+		rules_string="mesecontorch_x-"
+	end
+	if node.param2 == 4 then
+		rules_string="mesecontorch_y-"
+		pa.y = 1
+		pa.z=0
+		pa.x=0
+        end
+        if node.param2 == 8 then
+		rules_string="mesecontorch_y+"
+		pa.y = -1
+		pa.z=0
+		pa.x=0
+        end
+
+        if mesecon:is_power_on({x=pos.x, y=pos.y, z=pos.z}, pa.x, pa.y, pa.z)==1 then
+            if node.name ~= "jeija:mesecon_torch_off" then
+                minetest.env:add_node(pos, {name="jeija:mesecon_torch_off",param2=node.param2})
+                mesecon:receptor_off({x=pos.x-pa.x, y=pos.y-pa.y, z=pos.z-pa.z}, rules_string)
+            end
+        else
+            if node.name ~= "jeija:mesecon_torch_on" then
+                minetest.env:add_node(pos, {name="jeija:mesecon_torch_on",param2=node.param2})
+                mesecon:receptor_on({x=pos.x-pa.x, y=pos.y-pa.y, z=pos.z-pa.z}, rules_string)
+            end
+        end
+    end
+})
+
+minetest.register_on_dignode(
+	function(pos, oldnode, digger)
+		if oldnode.name == "jeija:mesecon_torch_on" then
+			mesecon:receptor_off(pos)
+		end	
+	end
+)
+
+minetest.register_on_placenode(function(pos, node, placer)
+	if node.name == "jeija:mesecon_torch_on" then
+		local rules_string=""
+
+		if node.param2 == 32 then
+			rules_string="mesecontorch_z+"
+		end
+		if node.param2 == 2 then
+			rules_string="mesecontorch_x+"
+		end
+		if node.param2 == 16 then
+			rules_string="mesecontorch_z-"
+		end
+		if node.param2 == 1 then
+			rules_string="mesecontorch_x-"
+		end
+		if node.param2 == 4 then
+			rules_string="mesecontorch_y-"
+	        end
+	        if node.param2 == 8 then
+			rules_string="mesecontorch_y+"
+	        end
+		
+		mesecon:receptor_on(pos, rules_string)
+	end
+end)
+
+mesecon:add_receptor_node("jeija:mesecon_torch_on")
+mesecon:add_receptor_node_off("jeija:mesecon_torch_off")
+
+-- Param2 Table (Block Attached To)
+-- 32 = z-1
+-- 2 = x-1
+-- 16 = z+1
+-- 1 = x+1
+-- 4 = y+1
+-- 8 = y-1
diff --git a/jeija/wireless.lua b/jeija/wireless.lua
new file mode 100644
index 0000000..3344d47
--- /dev/null
+++ b/jeija/wireless.lua
@@ -0,0 +1,327 @@
+-- IC
+minetest.register_craftitem("jeija:ic", {
+	image = "jeija_ic.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+	output = 'craft "jeija:ic" 2',
+	recipe = {
+		{'craft "jeija:silicon"', 'craft "jeija:silicon"', 'node "jeija:mesecon_off"'},
+		{'craft "jeija:silicon"', 'craft "jeija:silicon"', 'node "jeija:mesecon_off"'},
+		{'node "jeija:mesecon_off"', 'node "jeija:mesecon_off"', ''},
+	}
+})
+
+--COMMON WIRELESS FUNCTIONS
+
+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 == "jeija:wireless_receiver_off" or
+	   minetest.env:get_node(pos).name == "jeija:wireless_receiver_on"  or
+	   minetest.env:get_node(pos).name == "jeija:wireless_inverter_off" or
+	   minetest.env:get_node(pos).name == "jeija: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 == "jeija:wireless_receiver_on" or
+		   minetest.env:get_node(pos).name == "jeija:wireless_receiver_off" or
+		   minetest.env:get_node(pos).name == "jeija:wireless_inverter_on" or
+		   minetest.env:get_node(pos).name == "jeija:wireless_inverter_off" then
+			mesecon:set_wlre_channel(pos, "air")
+		end	
+	end
+)
+
+minetest.register_abm(
+	{nodenames = {"jeija:wireless_receiver_on", "jeija:wireless_receiver_off",
+		      "jeija:wireless_inverter_on", "jeija: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=="jeija:wireless_receiver_on" and wlre.requested_state==0  then
+			minetest.env:add_node(pos, {name="jeija:wireless_receiver_off"})
+			mesecon:receptor_off(pos)
+		end
+		if node.name=="jeija:wireless_receiver_off" and wlre.requested_state==1  then
+			minetest.env:add_node(pos, {name="jeija:wireless_receiver_on"})
+			mesecon:receptor_on(pos)
+		end
+		if node.name=="jeija:wireless_inverter_off" and wlre.requested_state==0 and wlre.inverting==1 then
+			minetest.env:add_node(pos, {name="jeija:wireless_inverter_on"})
+			mesecon:receptor_on(pos)
+		end
+		if node.name=="jeija:wireless_inverter_on" and wlre.requested_state==1 and wlre.inverting==1 then
+			minetest.env:add_node(pos, {name="jeija:wireless_inverter_off"})
+			mesecon:receptor_off(pos)
+		end
+	end,
+})
+
+--WIRELESS RECEIVER
+
+minetest.register_node("jeija: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"),
+	material = minetest.digprop_constanttime(0.8),
+})
+
+minetest.register_node("jeija: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"),
+	material = minetest.digprop_constanttime(0.8),
+	dug_item = 'node "jeija:wireless_receiver_off" 1'
+})
+
+minetest.register_craft({
+	output = 'node "jeija:wireless_receiver_off" 2',
+	recipe = {
+		{'', 'node "jeija:mesecon_off"', ''},
+		{'', 'node "jeija:mesecon_off"', ''},
+		{'', 'craft "jeija:ic"', ''},
+	}
+})
+
+minetest.register_on_placenode(function(pos, newnode, placer)
+	if newnode.name == "jeija:wireless_receiver_off" then
+		mesecon:register_wireless_receiver(pos, 0)
+	end
+end)
+
+minetest.register_on_dignode(
+	function(pos, oldnode, digger)
+		if oldnode.name == "jeija:wireless_receiver_on" then
+			mesecon:remove_wireless_receiver(pos)
+			mesecon:receptor_off(pos)
+		end	
+		if oldnode.name == "jeija:wireless_receiver_off" then
+			mesecon:remove_wireless_receiver(pos)		
+		end
+	end
+)
+
+minetest.register_abm( -- SAVE WIRELESS RECEIVERS TO FILE
+	{nodenames = {"jeija:wireless_receiver_off", "jeija:wireless_receiver_on", "jeija:wireless_inverter_on", "jeija: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("jeija:wireless_receiver_on")
+mesecon:add_receptor_node_off("jeija:wireless_receiver_off")
+
+-- WIRELESS INVERTER OFF/ON BELONGS TO THE OUTPUT STATE (ON=INPUT OFF)
+
+minetest.register_node("jeija: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"),
+	material = minetest.digprop_constanttime(0.8),
+	dug_item = 'node "jeija:wireless_inverter_on" 1'
+})
+
+minetest.register_node("jeija: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"),
+	material = minetest.digprop_constanttime(0.8),
+})
+
+minetest.register_craft({
+	output = 'node "jeija:wireless_inverter_off" 2',
+	recipe = {
+		{'', 'craft "default:steel_ingot"', ''},
+		{'craft "jeija:ic"', 'node "jeija:mesecon_off"', 'craft "jeija:ic"'},
+		{'', 'node "jeija:mesecon_off"', ''},
+	}
+})
+
+minetest.register_on_placenode(function(pos, newnode, placer)
+	if newnode.name == "jeija:wireless_inverter_on" then
+		mesecon:register_wireless_receiver(pos, 1)
+		mesecon:receptor_on(pos)
+	end
+end)
+
+minetest.register_on_dignode(
+	function(pos, oldnode, digger)
+		if oldnode.name == "jeija:wireless_inverter_on" then
+			mesecon:remove_wireless_receiver(pos)
+			mesecon:receptor_off(pos)
+		end	
+		if oldnode.name == "jeija:wireless_inverter_off" then
+			mesecon:remove_wireless_receiver(pos)		
+		end
+	end
+)
+
+mesecon:add_receptor_node("jeija:wireless_inverter_on")
+mesecon:add_receptor_node_off("jeija: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("jeija: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"),
+	material = minetest.digprop_constanttime(0.8),
+	dug_item = 'node "jeija:wireless_transmitter_off" 1',
+})
+
+minetest.register_node("jeija: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"),
+	material = minetest.digprop_constanttime(0.8),
+})
+
+minetest.register_craft({
+	output = 'node "jeija:wireless_transmitter_off" 2',
+	recipe = {
+		{'craft "default:steel_ingot"', 'node "jeija:mesecon_off"', 'craft "default:steel_ingot"'},
+		{'', 'node "jeija:mesecon_off"', ''},
+		{'', 'craft "jeija:ic"', ''},
+	}
+})
+
+mesecon:register_on_signal_on(function(pos, node)
+	if node.name=="jeija:wireless_transmitter_off" then
+		minetest.env:add_node(pos, {name="jeija: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=="jeija:wireless_transmitter_on" then
+		minetest.env:add_node(pos, {name="jeija: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)
-- 
cgit v1.2.3