diff options
| -rw-r--r-- | depends.txt | 1 | ||||
| -rw-r--r-- | unified_inventory/aaa_recipeshook/depends.txt | 1 | ||||
| -rw-r--r-- | unified_inventory/aaa_recipeshook/init.lua | 27 | ||||
| -rw-r--r-- | unified_inventory/modpack.txt | 1 | ||||
| -rw-r--r-- | unified_inventory/unified_inventory/api.lua (renamed from init.lua) | 319 | ||||
| -rw-r--r-- | unified_inventory/unified_inventory/bags.lua (renamed from bags.lua) | 0 | ||||
| -rw-r--r-- | unified_inventory/unified_inventory/depends.txt | 1 | ||||
| -rw-r--r-- | unified_inventory/unified_inventory/init.lua | 4 | ||||
| -rw-r--r-- | unified_inventory/unified_inventory/textures/bags_large.png (renamed from textures/bags_large.png) | bin | 572 -> 572 bytes | |||
| -rw-r--r-- | unified_inventory/unified_inventory/textures/bags_medium.png (renamed from textures/bags_medium.png) | bin | 797 -> 797 bytes | |||
| -rw-r--r-- | unified_inventory/unified_inventory/textures/bags_small.png (renamed from textures/bags_small.png) | bin | 572 -> 572 bytes | 
11 files changed, 312 insertions, 42 deletions
| diff --git a/depends.txt b/depends.txt deleted file mode 100644 index 562cf63..0000000 --- a/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default
 diff --git a/unified_inventory/aaa_recipeshook/depends.txt b/unified_inventory/aaa_recipeshook/depends.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/unified_inventory/aaa_recipeshook/depends.txt @@ -0,0 +1 @@ + diff --git a/unified_inventory/aaa_recipeshook/init.lua b/unified_inventory/aaa_recipeshook/init.lua new file mode 100644 index 0000000..d1ce1e9 --- /dev/null +++ b/unified_inventory/aaa_recipeshook/init.lua @@ -0,0 +1,27 @@ +-- override minetest.register_craft +crafts_table ={} +crafts_table_count=0 + +local minetest_register_craft = minetest.register_craft +minetest.register_craft = function (options)  +	minetest_register_craft(options)  +	register_craft(options) +end + +-- register_craft +register_craft = function(options) +	if  options.output == nil then +		return +	end +	local itemstack = ItemStack(options.output) +	if itemstack:is_empty() then +		return +	end +	if crafts_table[itemstack:get_name()]==nil then +		crafts_table[itemstack:get_name()] = {} +	end +	table.insert(crafts_table[itemstack:get_name()],options) +	crafts_table_count=crafts_table_count+1 +end + + diff --git a/unified_inventory/modpack.txt b/unified_inventory/modpack.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/unified_inventory/modpack.txt @@ -0,0 +1 @@ + diff --git a/init.lua b/unified_inventory/unified_inventory/api.lua index ec96e89..db0a069 100644 --- a/init.lua +++ b/unified_inventory/unified_inventory/api.lua @@ -1,12 +1,5 @@ ---loading modules -modpath=minetest.get_modpath("unified_inventory") -dofile(modpath.."/bags.lua") - --- expose api +--data tables definitions  unified_inventory = {} --- define buttons -unified_inventory.buttons = {} -unified_inventory.control_buttons = {}  unified_inventory.players = {}  unified_inventory.current_page = {}  unified_inventory.current_index = {} @@ -15,11 +8,13 @@ unified_inventory.items_list = {}  unified_inventory.filtered_items_list_size = {}  unified_inventory.filtered_items_list = {}  unified_inventory.activefilter = {} +unified_inventory.alternate = {} +unified_inventory.current_item = {}  -- default inventory page  unified_inventory.default = "craft" - +-- homepos stuff  local home_gui = {}  local homepos = {}  unified_inventory.home_filename = minetest.get_worldpath()..'/unified_inventory_home' @@ -48,7 +43,25 @@ minetest.register_on_joinplayer(function(player)  	unified_inventory.filtered_items_list_size[player_name]=unified_inventory.items_list_size  	unified_inventory.activefilter[player_name]=""  	unified_inventory.apply_filter(player_name, "") +	unified_inventory.alternate[player_name] = 1 +	unified_inventory.current_item[player_name] =nil  	unified_inventory.set_inventory_formspec(player,unified_inventory.get_formspec(player, unified_inventory.default)) +	 +	local inv = minetest.create_detached_inventory(player:get_player_name().."craftrecipe",{ +		allow_put = function(inv, listname, index, stack, player) +			return 0 +			end, +		allow_take = function(inv, listname, index, stack, player) +			return 0 +		end, +		allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) +			return 0 +		end, +	}) +	inv:set_size("output", 1) +	inv:set_size("build", 3*3) +	inv:set_size("cook", 1) +	inv:set_size("fuel", 1)  end)  -- set_inventory_formspec @@ -95,15 +108,11 @@ unified_inventory.get_formspec = function(player,page)  		formspec = formspec .. "field[9.195,8.325;3,1;searchbox;;]"  	  	formspec = formspec .. "button[12,8;1.2,1;searchbutton;Search]" -	if page=="main" then -		return formspec -		end -	  	-- craft page  	if page=="craft" then  		formspec = formspec.."label[0,0;Crafting]" -		formspec = formspec.."list[current_player;craftpreview;5.25,2;1,1;]" -		formspec = formspec.."list[current_player;craft;1.75,1;3,3;]" +		formspec = formspec.."list[current_player;craftpreview;6,1;1,1;]" +		formspec = formspec.."list[current_player;craft;2,1;3,3;]"  			if minetest.setting_getbool("creative_mode") then  				formspec = formspec.."label[0,2.5;Refill:]"  				formspec = formspec.."list[detached:refill;main;0,3;1,1;]" @@ -115,6 +124,45 @@ unified_inventory.get_formspec = function(player,page)  	-- craft guide page  	if page=="craftguide" then  		formspec = formspec.."label[0,0;Crafting Guide]" +		formspec = formspec.."list[detached:"..player_name.."craftrecipe;build;2,1;3,3;]" +		formspec = formspec.."list[detached:"..player_name.."craftrecipe;output;6,1;1,1;]" +		formspec = formspec.."label[2,0.5;Input:]" +		formspec = formspec.."label[6,0.5;Output:]" +		formspec = formspec.."label[6,2.6;Method:]" +		local item_name=unified_inventory.current_item[player_name] +		--print (dump(item_name)) +		if item_name then +			local alternates = 0 +			local alternate = unified_inventory.alternate[player_name] +			local crafts = crafts_table[item_name] +			 +			if crafts ~= nil then +				alternates = #crafts +				local craft = crafts[alternate] +				local method = "Crafting" +				if craft.type == "shapeless" then +				method="Crafting" +				end	 +				if craft.type == "cooking" then +				method="Cooking" +				end	 +				if craft.type == "fuel" then +				method="Fuel" +				end	 +				if craft.type == "grinding" then +				method="Grinding" +				end	 +				if craft.type == "alloy" then +				method="Alloy cooking" +				end	 +				formspec = formspec.."label[6,3;"..method.."]" +			end +			 +			if alternates > 1 then +			formspec = formspec.."label[0,2.6;Recipe "..tostring(alternate).." of "..tostring(alternates).."]" +			formspec = formspec.."button[0,3.15;2,1;alternate;Alternate]" +			end +		end  	end  	-- bags @@ -124,10 +172,10 @@ unified_inventory.get_formspec = function(player,page)  	formspec=formspec.."button[2,2;2,0.5;bag2;Bag 2]"  	formspec=formspec.."button[4,2;2,0.5;bag3;Bag 3]"  	formspec=formspec.."button[6,2;2,0.5;bag4;Bag 4]" -	formspec=formspec.."list[detached:"..player:get_player_name().."_bags;bag1;0.5,1;1,1;]" -	formspec=formspec.."list[detached:"..player:get_player_name().."_bags;bag2;2.5,1;1,1;]" -	formspec=formspec.."list[detached:"..player:get_player_name().."_bags;bag3;4.5,1;1,1;]" -	formspec=formspec.."list[detached:"..player:get_player_name().."_bags;bag4;6.5,1;1,1;]" +	formspec=formspec.."list[detached:"..player_name.."_bags;bag1;0.5,1;1,1;]" +	formspec=formspec.."list[detached:"..player_name.."_bags;bag2;2.5,1;1,1;]" +	formspec=formspec.."list[detached:"..player_name.."_bags;bag3;4.5,1;1,1;]" +	formspec=formspec.."list[detached:"..player_name.."_bags;bag4;6.5,1;1,1;]"  		end  	for i=1,4 do @@ -143,7 +191,7 @@ unified_inventory.get_formspec = function(player,page)  		formspec = formspec.."label[0,0;Miscellaneous]"  		formspec=formspec.."button[0,1;2,0.5;home_gui_set;Set Home]"  		formspec=formspec.."button_exit[2,1;2,0.5;home_gui_go;Go Home]" -		local home = homepos[player:get_player_name()] +		local home = homepos[player_name]  		if home ~= nil then  		formspec = formspec  			formspec=formspec.."label[4,.9;Home set to:]" @@ -171,7 +219,7 @@ unified_inventory.get_formspec = function(player,page)  	end  	end	  	formspec=formspec.."label[8.2,0;Page:]" -	formspec=formspec.."label[9,0;"..page.."/"..pagemax.."]" +	formspec=formspec.."label[9,0;"..page.." of "..pagemax.."]"  	formspec=formspec.."label[8.2,0.4;Filter:]"  	formspec=formspec.."label[9,0.4;"..unified_inventory.activefilter[player_name].."]"  	return formspec @@ -211,7 +259,7 @@ unified_inventory.refill:set_size("main", 1)  minetest.register_on_player_receive_fields(function(player, formname, fields)  	local player_name = player:get_player_name() -	-- main +	-- main buttons  	if fields.craft then  		unified_inventory.set_inventory_formspec(player, unified_inventory.get_formspec(player,"craft"))  		return @@ -244,7 +292,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)  		end  	end -	-- Miscellanous +	-- Miscellaneous  	if fields.home_gui_set then  		unified_inventory.set_inventory_formspec(player, unified_inventory.get_formspec(player,"misc"))  		unified_inventory.set_home(player, player:getpos()) @@ -254,12 +302,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)  		unified_inventory.go_home(player)  	end  	if fields.misc_set_day then -		minetest.env:set_timeofday((12000 % 24000) / 24000) -		minetest.chat_send_player(player_name, "Time of day set to noon.") +		minetest.env:set_timeofday((6000 % 24000) / 24000) +		minetest.chat_send_player(player_name, "Time of day set to 6am")  	end  	if fields.misc_set_night then -		minetest.env:set_timeofday(0) -		minetest.chat_send_player(player_name, "Time of day set to midnight.")	 +		minetest.env:set_timeofday((21000 % 24000) / 24000) +		minetest.chat_send_player(player_name, "Time of day set to 9pm")	  	end  	-- Inventory page controls @@ -295,22 +343,28 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)  		unified_inventory.current_index[player_name] = (start_i-1)*80+1  		unified_inventory.set_inventory_formspec(player, unified_inventory.get_formspec(player,unified_inventory.current_page[player_name]))  		end -		 +	 +	-- Item list buttons  	local list_index=unified_inventory.current_index[player_name] +	local page=unified_inventory.current_page[player_name]  	for i=0,80,1 do  		local button="item_button"..list_index  		if fields[button] then  -			local input={} -			input=minetest.get_craft_recipe(unified_inventory.filtered_items_list[player_name][list_index]) -			print (dump(input)) -			if minetest.setting_getbool("creative_mode") then -				local inv = player:get_inventory() -				dst_stack={} -				dst_stack["name"] = unified_inventory.filtered_items_list[player_name][list_index]  -				dst_stack["count"]=99 -				if inv:room_for_item("main",dst_stack) then -				inv:add_item("main",dst_stack) -				end +			if page=="craftguide" then  +				unified_inventory.current_item[player_name] = unified_inventory.filtered_items_list[player_name][list_index]  +				unified_inventory.alternate[player_name] = 1 +				unified_inventory.update_recipe (player, unified_inventory.filtered_items_list[player_name][list_index], 1) +				unified_inventory.set_inventory_formspec(player, unified_inventory.get_formspec(player,unified_inventory.current_page[player_name])) +			else +				if minetest.setting_getbool("creative_mode") then +					local inv = player:get_inventory() +					dst_stack={} +					dst_stack["name"] = unified_inventory.filtered_items_list[player_name][list_index]  +					dst_stack["count"]=99 +					if inv:room_for_item("main",dst_stack) then +					inv:add_item("main",dst_stack) +					end +				end	  			end	  		end	  	list_index=list_index+1 @@ -321,6 +375,27 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)  		unified_inventory.set_inventory_formspec(player, unified_inventory.get_formspec(player,unified_inventory.current_page[player_name]))  	end	 +	-- alternate button +	if fields.alternate then +		local item_name=unified_inventory.current_item[player_name] +		if item_name then +			local alternates = 0 +			local alternate=unified_inventory.alternate[player_name] +			local crafts = crafts_table[item_name] +			if crafts ~= nil then +				alternates = #crafts +			end +			if alternates > 1 then +			alternate=alternate+1 +			if alternate>alternates then +				alternate=1 +			end +			unified_inventory.alternate[player_name]=alternate		 +			unified_inventory.update_recipe (player, unified_inventory.current_item[player_name], alternate) +			unified_inventory.set_inventory_formspec(player, unified_inventory.get_formspec(player,unified_inventory.current_page[player_name])) +			end +		end	 +	end		  end)  -- load_home @@ -365,14 +440,19 @@ unified_inventory.go_home = function(player)  	end  end ---apply filter to the inventory list +--apply filter to the inventory list (create filtered copy of full one)  unified_inventory.apply_filter = function(player_name,filter)  	local size=0 +	local str_temp1=string.lower(filter) +	local str_temp2 +	local str_temp3  	unified_inventory.filtered_items_list[player_name]={}  	for name,def in pairs(minetest.registered_items) do  		if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0)  				and def.description and def.description ~= "" then -			if string.find(def.name, filter) or string.find(def.description, filter) then +			str_temp2=string.lower(def.name) +			str_temp3=string.lower(def.description) +			if string.find(str_temp2, str_temp1) or string.find(str_temp3, str_temp1) then  				table.insert(unified_inventory.filtered_items_list[player_name], name)  				size=size+1  			end @@ -387,3 +467,160 @@ unified_inventory.apply_filter = function(player_name,filter)  end +-- update_recipe +unified_inventory.update_recipe = function(player, stack_name, alternate) +	--print("Lookup:"..stack_name) +	local inv = minetest.get_inventory({type="detached", name=player:get_player_name().."craftrecipe"})	 +	for i=0,inv:get_size("build"),1 do +		inv:set_stack("build", i, nil) +	end +	inv:set_stack("cook", 1, nil) +	inv:set_stack("fuel", 1, nil) + +	inv:set_stack("output", 1, stack_name) +	local def +	alternate = tonumber(alternate) or 1 +	local crafts = crafts_table[stack_name] +	if crafts == nil then +		--minetest.chat_send_player(player:get_player_name(), "no recipe available for "..stack_name) +		return +	end +	if alternate < 1 or alternate > #crafts then +		alternate = 1 +	end +	local craft = crafts[alternate] +	print (dump(craft)) +	--minetest.chat_send_player(player:get_player_name(), "recipe for "..stack_name..": "..dump(craft)) +	 +	local itemstack = ItemStack(craft.output) +	inv:set_stack("output", 1, itemstack) + +	-- cook +	if craft.type == "cooking" then +		def=unified_inventory.find_item_def(craft.recipe) +		if def then +			inv:set_stack("build", 1, def) +		end +		return  +	end +	-- fuel +	if craft.type == "fuel" then +		def=unified_inventory.find_item_def(craft.recipe) +		if def then +			inv:set_stack("build", 1, def) +		end +		return +	end +	-- build (shaped or shapeless) +	if craft.recipe[1] then +		def=unified_inventory.find_item_def(craft.recipe[1]) +		if def then +			inv:set_stack("build", 1, def) +		else +			def=unified_inventory.find_item_def(craft.recipe[1][1]) +			if def then +				inv:set_stack("build", 1, def) +			end +			def=unified_inventory.find_item_def(craft.recipe[1][2]) +			if def then +				inv:set_stack("build", 2, def) +			end +			def=unified_inventory.find_item_def(craft.recipe[1][3]) +			if def then +				inv:set_stack("build", 3, def) +			end +		end +	end +	if craft.recipe[2] then +		def=unified_inventory.find_item_def(craft.recipe[2]) +		if def then +			inv:set_stack("build", 2, def) +		else +			def=unified_inventory.find_item_def(craft.recipe[2][1]) +			if def then +				inv:set_stack("build", 4, def) +			end +			def=unified_inventory.find_item_def(craft.recipe[2][2]) +			if def then +				inv:set_stack("build", 5, def) +			end +			def=unified_inventory.find_item_def(craft.recipe[2][3]) +			if def then +				inv:set_stack("build", 6, def) +			end +		end +	end +	 +	if craft.recipe[3] then +		def=unified_inventory.find_item_def(craft.recipe[3]) +		if def then +			inv:set_stack("build", 3, def) +		else +			def=unified_inventory.find_item_def(craft.recipe[3][1]) +			if def then +				inv:set_stack("build", 7, def) +			end +			def=unified_inventory.find_item_def(craft.recipe[3][2]) +			if def then +				inv:set_stack("build", 8, def) +			end +			def=unified_inventory.find_item_def(craft.recipe[3][3]) +			if def then +				inv:set_stack("build", 9, def) +			end +		end +	end +	if craft.recipe[4] then +		def=unified_inventory.find_item_def(craft.recipe[4]) +		if def then +			inv:set_stack("build", 4, def) +		end +	end +	if craft.recipe[5] then +		def=unified_inventory.find_item_def(craft.recipe[5]) +		if def then +			inv:set_stack("build", 5, def) +		end +	end +	if craft.recipe[6] then +		def=unified_inventory.find_item_def(craft.recipe[6]) +		if def then +			inv:set_stack("build", 6, def) +		end +	end +	if craft.recipe[7] then +		def=unified_inventory.find_item_def(craft.recipe[7]) +		if def then +			inv:set_stack("build", 7, def) +		end +	end +	if craft.recipe[8] then +		def=unified_inventory.find_item_def(craft.recipe[8]) +		if def then +			inv:set_stack("build", 8, def) +		end +	end +	if craft.recipe[9] then +		def=unified_inventory.find_item_def(craft.recipe[9]) +		if def then +			inv:set_stack("build", 9, def) +		end +	end +end + +unified_inventory.find_item_def = function(def1) +if type(def1)=="string" then +	if string.find(def1, "group:") then +		def1=string.gsub(def1, "group:", "") +		def1=string.gsub(def1, '\"', "") +		for name,def in pairs(minetest.registered_items) do +				if def.groups[def1] == 1 and def.groups.not_in_creative_inventory ~= 1 then +					return def +				end +		end +	else +	return def1 +	end +end +return nil +end diff --git a/bags.lua b/unified_inventory/unified_inventory/bags.lua index b0ec4b8..b0ec4b8 100644 --- a/bags.lua +++ b/unified_inventory/unified_inventory/bags.lua diff --git a/unified_inventory/unified_inventory/depends.txt b/unified_inventory/unified_inventory/depends.txt new file mode 100644 index 0000000..2feb7d0 --- /dev/null +++ b/unified_inventory/unified_inventory/depends.txt @@ -0,0 +1 @@ +aaa_recipeshook
 diff --git a/unified_inventory/unified_inventory/init.lua b/unified_inventory/unified_inventory/init.lua new file mode 100644 index 0000000..80855b3 --- /dev/null +++ b/unified_inventory/unified_inventory/init.lua @@ -0,0 +1,4 @@ +-- load api +dofile(minetest.get_modpath("unified_inventory").."/api.lua") + +dofile(minetest.get_modpath("unified_inventory").."/bags.lua") diff --git a/textures/bags_large.png b/unified_inventory/unified_inventory/textures/bags_large.pngBinary files differ index c26f075..c26f075 100644 --- a/textures/bags_large.png +++ b/unified_inventory/unified_inventory/textures/bags_large.png diff --git a/textures/bags_medium.png b/unified_inventory/unified_inventory/textures/bags_medium.pngBinary files differ index 7bc8030..7bc8030 100644 --- a/textures/bags_medium.png +++ b/unified_inventory/unified_inventory/textures/bags_medium.png diff --git a/textures/bags_small.png b/unified_inventory/unified_inventory/textures/bags_small.pngBinary files differ index e9656a5..e9656a5 100644 --- a/textures/bags_small.png +++ b/unified_inventory/unified_inventory/textures/bags_small.png | 
