forked from mtcontrib/pipeworks
		
	Added autocrafter.
Fixed a bug where items in mese tubes disappeared whan placing or removing a tube next to it.
This commit is contained in:
		
							
								
								
									
										75
									
								
								autocrafter.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								autocrafter.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | ||||
|  | ||||
|  | ||||
| function autocraft(inventory) | ||||
| 	local recipe=inventory:get_list("recipe") | ||||
| 	local result | ||||
| 	local new | ||||
| 	result,new=minetest.get_craft_result({method="normal",width=3,items=recipe}) | ||||
| 	local input=inventory:get_list("input") | ||||
| 	if result.item:is_empty() then return end | ||||
| 	result=result.item | ||||
| 	local to_use={} | ||||
| 	for _,item in ipairs(recipe) do | ||||
| 		if item~=nil and not item:is_empty() then | ||||
| 			if to_use[item:get_name()]==nil then | ||||
| 				to_use[item:get_name()]=1 | ||||
| 			else | ||||
| 				to_use[item:get_name()]=to_use[item:get_name()]+1 | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	local stack | ||||
| 	for itemname,number in pairs(to_use) do | ||||
| 		stack=ItemStack({name=itemname, count=number}) | ||||
| 		if not inventory:contains_item("src",stack) then return end | ||||
| 	end | ||||
| 	for itemname,number in pairs(to_use) do | ||||
| 		stack=ItemStack({name=itemname, count=number}) | ||||
| 		inventory:remove_item("src",stack) | ||||
| 	end | ||||
| 	inventory:add_item("dst",result) | ||||
| 	print(dump(new)) | ||||
| end | ||||
|  | ||||
| minetest.register_node("pipeworks:autocrafter",{ | ||||
| 	description = "Autocrafter", | ||||
| 	drawtype="normal", | ||||
| 	tiles={"pipeworks_autocrafter.png"}, | ||||
| 	groups={snappy=3,tubedevice=1,tubedevice_receiver=1}, | ||||
| 	tube={insert_object=function(pos,node,stack,direction) | ||||
| 			local meta=minetest.env:get_meta(pos) | ||||
| 			local inv=meta:get_inventory() | ||||
| 			return inv:add_item("src",stack) | ||||
| 		end, | ||||
| 		can_insert=function(pos,node,stack,direction) | ||||
| 			local meta=minetest.env:get_meta(pos) | ||||
| 			local inv=meta:get_inventory() | ||||
| 			return inv:room_for_item("src",stack) | ||||
| 		end, | ||||
| 		input_inventory="dst"}, | ||||
| 	on_construct = function(pos) | ||||
| 		local meta = minetest.env:get_meta(pos) | ||||
| 		meta:set_string("formspec", | ||||
| 				"size[8,11]".. | ||||
| 				"list[current_name;recipe;0,0;3,3;]".. | ||||
| 				"list[current_name;src;0,3;8,3;]".. | ||||
| 				"list[current_name;dst;4,0;4,3;]".. | ||||
| 				"list[current_player;main;0,7;8,4;]") | ||||
| 		meta:set_string("infotext", "Autocrafter") | ||||
| 		local inv = meta:get_inventory() | ||||
| 		inv:set_size("src",3*8) | ||||
| 		inv:set_size("recipe",3*3) | ||||
| 		inv:set_size("dst",4*3) | ||||
| 	end, | ||||
| 	can_dig = function(pos,player) | ||||
| 		local meta = minetest.env:get_meta(pos); | ||||
| 		local inv = meta:get_inventory() | ||||
| 		return (inv:is_empty("src") and inv:is_empty("recipe") and inv:is_empty("dst")) | ||||
| 	end}) | ||||
|  | ||||
| minetest.register_abm({nodenames={"pipeworks:autocrafter"},interval=1,chance=1, | ||||
| 			action=function(pos,node) | ||||
| 				local meta=minetest.env:get_meta(pos) | ||||
| 				local inv=meta:get_inventory() | ||||
| 				autocraft(inv) | ||||
| 			end}) | ||||
| @@ -87,7 +87,12 @@ function tube_autoroute(pos) | ||||
|  | ||||
| 	nsurround = pxm..pxp..pym..pyp..pzm..pzp | ||||
| 	if is_tube(nctr.name) then | ||||
| 		minetest.env:add_node(pos, { name = string.sub(nctr.name,1,-7)..nsurround }) | ||||
| 		local meta=minetest.env:get_meta(pos) | ||||
| 		local meta0=meta:to_table() | ||||
| 		nctr.name=string.sub(nctr.name,1,-7)..nsurround | ||||
| 		minetest.env:add_node(pos, nctr) | ||||
| 		local meta=minetest.env:get_meta(pos) | ||||
| 		meta:from_table(meta0) | ||||
| 	end | ||||
|  | ||||
| end | ||||
|   | ||||
							
								
								
									
										2
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								init.lua
									
									
									
									
									
								
							| @@ -328,5 +328,5 @@ dofile(minetest.get_modpath("pipeworks").."/crafts.lua") | ||||
| dofile(minetest.get_modpath("pipeworks").."/flowing_logic.lua") | ||||
| dofile(minetest.get_modpath("pipeworks").."/compat.lua") | ||||
| dofile(minetest.get_modpath("pipeworks").."/item_transport.lua") | ||||
|  | ||||
| dofile(minetest.get_modpath("pipeworks").."/autocrafter.lua") | ||||
| print("Pipeworks loaded!") | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_autocrafter.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/pipeworks_autocrafter.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 167 B | 
		Reference in New Issue
	
	Block a user