diff options
| -rw-r--r-- | README~ | 0 | ||||
| -rw-r--r-- | jeija/button.lua | 84 | ||||
| -rw-r--r-- | jeija/detector.lua | 85 | ||||
| -rw-r--r-- | jeija/init.lua | 744 | ||||
| -rw-r--r-- | jeija/mesecon_data | 7 | ||||
| -rw-r--r-- | jeija/pressureplates.lua | 151 | ||||
| -rw-r--r-- | jeija/textures/jeija_wall_button_off.png | bin | 0 -> 174 bytes | |||
| -rw-r--r-- | jeija/textures/jeija_wall_button_on.png | bin | 0 -> 158 bytes | |||
| -rw-r--r-- | jeija/torches | 138 | ||||
| -rw-r--r-- | jeija/torches.lua | 138 | ||||
| -rw-r--r-- | jeija/wireless.lua | 327 | 
11 files changed, 967 insertions, 707 deletions
| 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.pngBinary files differ new file mode 100644 index 0000000..2c18986 --- /dev/null +++ b/jeija/textures/jeija_wall_button_off.png diff --git a/jeija/textures/jeija_wall_button_on.png b/jeija/textures/jeija_wall_button_on.pngBinary files differ new file mode 100644 index 0000000..d09701b --- /dev/null +++ b/jeija/textures/jeija_wall_button_on.png 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) | 
