peilaus alkaen
				https://github.com/minetest-mods/unified_inventory.git
				synced 2025-10-31 15:45:29 +01:00 
			
		
		
		
	Vertaa committeja
	
		
			29 Commitit
		
	
	
		
			version-2
			...
			9d66a21271
		
	
	| Tekijä | SHA1 | Päivämäärä | |
|---|---|---|---|
| 9d66a21271 | |||
|  | 3fffa41eaf | ||
|  | 077bed90eb | ||
| 15a84bdbf4 | |||
|  | 6d123da61c | ||
|  | d39dd78cb5 | ||
| 838c67ae86 | |||
|  | aeb9841e3a | ||
| 132a362f85 | |||
|  | afd38e0c73 | ||
|  | 4d4355a741 | ||
| 03b077cd1b | |||
|  | 6e6383f082 | ||
| 829b38c6fc | |||
|  | 860371ecf8 | ||
| 70fdb8556b | |||
|  | c044f5e3b0 | ||
|  | 608cdfb887 | ||
|  | afb295ec22 | ||
|  | a84ce24067 | ||
| 497c632b24 | |||
| 46eeb36784 | |||
| 9a31609cfd | |||
| 8e6a3740ae | |||
| 1fd87f5c51 | |||
| e5dc9ed53a | |||
|  | 4bf5f22696 | ||
|  | 4f666f93d0 | ||
|  | 264833ed41 | 
| @@ -14,6 +14,7 @@ read_globals = { | ||||
| 	"ItemStack", "datastorage", | ||||
|  | ||||
| 	"hb", | ||||
| 	"doors", | ||||
| } | ||||
|  | ||||
| files["callbacks.lua"].ignore = { "player", "draw_lite_mode" } | ||||
|   | ||||
| @@ -15,7 +15,8 @@ Unified Inventory replaces the default survival and creative inventory. | ||||
|     * Recipe search function by ingredients | ||||
|  * Up to four bags with up to 24 slots each | ||||
|  * Home function to teleport | ||||
|  * Trash slot | ||||
|  * Trash slot and refill slot for creative | ||||
|  * Waypoints to keep track of important locations | ||||
|  * Lite mode: reduces the item browser width | ||||
|     * `minetest.conf` setting `unified_inventory_lite = true` | ||||
|  * Mod API for modders: see [mod_api.txt](doc/mod_api.txt) | ||||
| @@ -25,6 +26,10 @@ Unified Inventory replaces the default survival and creative inventory. | ||||
| ## Requirements | ||||
|  | ||||
|  * Minetest 5.4.0+ | ||||
|  * Mod `default` for category filters (contained in Minetest Game) | ||||
|  * Mod `farming` for craftable bags (contained in Minetest Game) | ||||
|  * For waypoint migration: `datastorage` | ||||
|  | ||||
|  | ||||
| # Licenses | ||||
|  | ||||
|   | ||||
							
								
								
									
										10
									
								
								api.lua
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								api.lua
									
									
									
									
									
								
							| @@ -177,8 +177,14 @@ load_home() | ||||
| function ui.set_home(player, pos) | ||||
| 	local player_name = player:get_player_name() | ||||
| 	ui.home_pos[player_name] = vector.round(pos) | ||||
|  | ||||
| 	-- save the home data from the table to the file | ||||
| 	local output = io.open(ui.home_filename, "w") | ||||
| 	if not output then | ||||
| 		minetest.log("warning", "[unified_inventory] Failed to save file: " | ||||
| 			.. ui.home_filename) | ||||
| 		return | ||||
| 	end | ||||
| 	for k, v in pairs(ui.home_pos) do | ||||
| 		output:write(v.x.." "..v.y.." "..v.z.." "..k.."\n") | ||||
| 	end | ||||
| @@ -316,8 +322,8 @@ end | ||||
| function ui.make_trash_slot(xpos, ypos) | ||||
| 	return | ||||
| 		ui.single_slot(xpos, ypos).. | ||||
| 		"image["..xpos..","..ypos..";1.25,1.25;ui_trash_slot_icon.png^[opacity:95]".. | ||||
| 		"list[detached:trash;main;"..xpos..","..ypos..";1,1;]" | ||||
| 		"image["..xpos..","..ypos..";1.25,1.25;ui_trash_slot_icon.png]".. | ||||
| 		"list[detached:trash;main;"..(xpos + ui.list_img_offset)..","..(ypos + ui.list_img_offset)..";1,1;]" | ||||
| end | ||||
|  | ||||
| function ui.make_inv_img_grid(xpos, ypos, width, height, bright) | ||||
|   | ||||
| @@ -19,6 +19,8 @@ minetest.register_on_joinplayer(function(player) | ||||
| 	unified_inventory.active_search_direction[player_name] = "nochange" | ||||
| 	unified_inventory.apply_filter(player, "", "nochange") | ||||
| 	unified_inventory.current_searchbox[player_name] = "" | ||||
| 	unified_inventory.current_category[player_name] = "all" | ||||
| 	unified_inventory.current_category_scroll[player_name] = 0 | ||||
| 	unified_inventory.alternate[player_name] = 1 | ||||
| 	unified_inventory.current_item[player_name] = nil | ||||
| 	unified_inventory.current_craft_direction[player_name] = "recipe" | ||||
| @@ -69,6 +71,41 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
| 		unified_inventory.current_searchbox[player_name] = fields.searchbox | ||||
| 	end | ||||
|  | ||||
|  | ||||
| 	local clicked_category | ||||
| 	for name, value in pairs(fields) do | ||||
| 		local category_name = string.match(name, "^category_(.+)$") | ||||
| 		if category_name then | ||||
| 			clicked_category = category_name | ||||
| 			break | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	if clicked_category | ||||
| 	and clicked_category ~= unified_inventory.current_category[player_name] then | ||||
| 		unified_inventory.current_category[player_name] = clicked_category | ||||
| 		unified_inventory.apply_filter(player, unified_inventory.current_searchbox[player_name], "nochange") | ||||
| 		unified_inventory.set_inventory_formspec(player, | ||||
| 				unified_inventory.current_page[player_name]) | ||||
| 	end | ||||
|  | ||||
| 	if fields.next_category then | ||||
| 		local scroll = math.min(#unified_inventory.category_list-ui_peruser.pagecols, unified_inventory.current_category_scroll[player_name] + 1) | ||||
| 		if scroll ~= unified_inventory.current_category_scroll[player_name] then | ||||
| 			unified_inventory.current_category_scroll[player_name] = scroll | ||||
| 			unified_inventory.set_inventory_formspec(player, | ||||
| 					unified_inventory.current_page[player_name]) | ||||
| 		end | ||||
| 	end | ||||
| 	if fields.prev_category then | ||||
| 		local scroll = math.max(0, unified_inventory.current_category_scroll[player_name] - 1) | ||||
| 		if scroll ~= unified_inventory.current_category_scroll[player_name] then | ||||
| 			unified_inventory.current_category_scroll[player_name] = scroll | ||||
| 			unified_inventory.set_inventory_formspec(player, | ||||
| 					unified_inventory.current_page[player_name]) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	for i, def in pairs(unified_inventory.buttons) do | ||||
| 		if fields[def.name] then | ||||
| 			def.action(player) | ||||
| @@ -126,6 +163,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
| 			clicked_item = unified_inventory.demangle_for_formspec(mangled_item) | ||||
| 			if string.sub(clicked_item, 1, 6) == "group:" then | ||||
| 				-- Change search filter to this group | ||||
| 				unified_inventory.current_category[player_name] = "all" | ||||
| 				apply_new_filter(player, clicked_item, new_dir) | ||||
| 				return | ||||
| 			end | ||||
|   | ||||
							
								
								
									
										150
									
								
								category.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								category.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,150 @@ | ||||
| local S = minetest.get_translator("unified_inventory") | ||||
|  | ||||
| unified_inventory.registered_categories = {} | ||||
| unified_inventory.registered_category_items = {} | ||||
| unified_inventory.category_list = {} | ||||
|  | ||||
| local function char_to_sort_index(char_code) | ||||
| 	if char_code <= 32 then | ||||
| 		-- Command codes, no thanks | ||||
| 		return 0 | ||||
| 	end | ||||
| 	if char_code <= 64 then | ||||
| 		-- Sorts numbers, and some punctuation, after letters | ||||
| 		return char_code | ||||
| 	end | ||||
| 	if char_code >= 158 then | ||||
| 		-- Out of sortable range | ||||
| 		return 0 | ||||
| 	end | ||||
| 	if char_code > 122 then | ||||
| 		-- Avoids overlap with {, |, } and ~ | ||||
| 		return char_code - 58 | ||||
| 	end | ||||
| 	if char_code > 96 then | ||||
| 		-- Normalises lowercase with uppercase | ||||
| 		return char_code - 96 | ||||
| 	end | ||||
| 	return char_code - 64 | ||||
| end | ||||
|  | ||||
| local function string_to_sort_index(str) | ||||
| 	local max_chars = 5 | ||||
| 	local power = 100 | ||||
| 	local index = 0 | ||||
| 	for i=1,math.min(#str, max_chars) do | ||||
| 		index = index + (char_to_sort_index(string.byte(str, i))/(power^i)) | ||||
| 	end | ||||
| 	return index | ||||
| end | ||||
|  | ||||
| function update_category_list() | ||||
| 	local category_list = {} | ||||
| 	table.insert(category_list, { | ||||
| 		name = "all", | ||||
| 		label = S("All Items"), | ||||
| 		symbol = "ui_category_all.png", | ||||
| 		index = -2, | ||||
| 	}) | ||||
| 	table.insert(category_list, { | ||||
| 		name = "uncategorized", | ||||
| 		label = S("Misc. Items"), | ||||
| 		symbol = "ui_category_none.png", | ||||
| 		index = -1, | ||||
| 	}) | ||||
| 	for category, def in pairs(unified_inventory.registered_categories) do | ||||
| 		table.insert(category_list, { | ||||
| 			name = category, | ||||
| 			label = def.label or category, | ||||
| 			symbol = def.symbol, | ||||
| 			index = def.index or                    -- sortby defined order | ||||
| 					string_to_sort_index(category)  -- or do a rudimentary alphabetical sort | ||||
| 		}) | ||||
| 	end | ||||
| 	table.sort(category_list, function (a,b) | ||||
| 		return a.index < b.index | ||||
| 	end) | ||||
| 	unified_inventory.category_list = category_list | ||||
| end | ||||
|  | ||||
| local function ensure_category_exists(category_name) | ||||
| 	if not unified_inventory.registered_categories[category_name] then | ||||
| 		unified_inventory.registered_categories[category_name] = { | ||||
| 			symbol = "unknown_item.png", | ||||
| 			label = category_name | ||||
| 		} | ||||
| 	end | ||||
| 	if not unified_inventory.registered_category_items[category_name] then | ||||
| 		unified_inventory.registered_category_items[category_name] = {} | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function unified_inventory.register_category(category_name, config) | ||||
| 	ensure_category_exists(category_name) | ||||
| 	config = config or {} | ||||
| 	if config.symbol then | ||||
| 		unified_inventory.set_category_symbol(category_name, config.symbol) | ||||
| 	end | ||||
| 	if config.label then | ||||
| 		unified_inventory.set_category_label(category_name, config.label) | ||||
| 	end | ||||
| 	if config.index then | ||||
| 		unified_inventory.set_category_index(category_name, config.index) | ||||
| 	end | ||||
| 	if config.items then | ||||
| 		unified_inventory.add_category_items(category_name, config.items) | ||||
| 	end | ||||
| 	update_category_list() | ||||
| end | ||||
| function unified_inventory.set_category_symbol(category_name, symbol) | ||||
| 	ensure_category_exists(category_name) | ||||
| 	unified_inventory.registered_categories[category_name].symbol = symbol | ||||
| 	update_category_list() | ||||
| end | ||||
| function unified_inventory.set_category_label(category_name, label) | ||||
| 	ensure_category_exists(category_name) | ||||
| 	unified_inventory.registered_categories[category_name].label = label | ||||
| 	update_category_list() | ||||
| end | ||||
| function unified_inventory.set_category_index(category_name, index) | ||||
| 	ensure_category_exists(category_name) | ||||
| 	unified_inventory.registered_categories[category_name].index = index | ||||
| 	update_category_list() | ||||
| end | ||||
| function unified_inventory.add_category_item(category_name, item) | ||||
| 	ensure_category_exists(category_name) | ||||
| 	unified_inventory.registered_category_items[category_name][item] = true | ||||
| end | ||||
| function unified_inventory.add_category_items(category_name, items) | ||||
| 	for _,item in ipairs(items) do | ||||
| 		unified_inventory.add_category_item(category_name, item) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function unified_inventory.remove_category_item(category_name, item) | ||||
| 	unified_inventory.registered_category_items[category_name][item] = nil | ||||
| end | ||||
| function unified_inventory.remove_category(category_name) | ||||
| 	unified_inventory.registered_categories[category_name] = nil | ||||
| 	unified_inventory.registered_category_items[category_name] = nil | ||||
| 	update_category_list() | ||||
| end | ||||
|  | ||||
| function unified_inventory.find_category(item) | ||||
| 	-- Returns the first category the item exists in | ||||
| 	-- Best for checking if an item has any category at all | ||||
| 	for category, items in pairs(unified_inventory.registered_category_items) do | ||||
| 		if items[item] then return category end | ||||
| 	end | ||||
| end | ||||
| function unified_inventory.find_categories(item) | ||||
| 	-- Returns all the categories the item exists in | ||||
| 	-- Best for listing all categories | ||||
| 	local categories = {} | ||||
| 	for category, items in pairs(unified_inventory.registered_category_items) do | ||||
| 		if items[item] then | ||||
| 			table.insert(categories, category) | ||||
| 		end | ||||
| 	end | ||||
| 	return categories | ||||
| end | ||||
							
								
								
									
										704
									
								
								default-categories.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										704
									
								
								default-categories.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,704 @@ | ||||
| local S = minetest.get_translator("unified_inventory") | ||||
|  | ||||
| unified_inventory.register_category('plants', { | ||||
| 	symbol = "flowers:tulip", | ||||
| 	label = S("Plant Life") | ||||
| }) | ||||
| unified_inventory.register_category('building', { | ||||
| 	symbol = "default:brick", | ||||
| 	label = S("Building Materials") | ||||
| }) | ||||
| unified_inventory.register_category('tools', { | ||||
| 	symbol = "default:pick_diamond", | ||||
| 	label = S("Tools") | ||||
| }) | ||||
| unified_inventory.register_category('minerals', { | ||||
| 	symbol = "default:iron_lump", | ||||
| 	label = S("Minerals and Metals") | ||||
| }) | ||||
| unified_inventory.register_category('environment', { | ||||
| 	symbol = "default:dirt_with_grass", | ||||
| 	label = S("Environment and Worldgen") | ||||
| }) | ||||
| unified_inventory.register_category('lighting', { | ||||
| 	symbol = "default:torch", | ||||
| 	label = S("Lighting") | ||||
| }) | ||||
|  | ||||
|  | ||||
| if unified_inventory.automatic_categorization then | ||||
| 	minetest.register_on_mods_loaded(function() | ||||
|  | ||||
| 		-- Add biome nodes to environment category | ||||
| 		for _,def in pairs(minetest.registered_biomes) do | ||||
| 			local env_nodes = { | ||||
| 				def.node_riverbed, def.node_top, def.node_filler, def.node_dust, | ||||
| 			} | ||||
| 			for i,node in pairs(env_nodes) do | ||||
| 				if node then | ||||
| 					unified_inventory.add_category_item('environment', node) | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
|  | ||||
| 		-- Add minable ores to minerals and everything else (pockets of stone & sand variations) to environment | ||||
| 		for _,item in  pairs(minetest.registered_ores) do | ||||
| 			if item.ore_type == "scatter" then | ||||
| 				local drop = minetest.registered_nodes[item.ore].drop | ||||
| 				if drop and drop ~= "" then | ||||
| 					unified_inventory.add_category_item('minerals', item.ore) | ||||
| 					unified_inventory.add_category_item('minerals', drop) | ||||
| 				else | ||||
| 					unified_inventory.add_category_item('environment', item.ore) | ||||
| 				end | ||||
| 			else | ||||
| 				unified_inventory.add_category_item('environment', item.ore) | ||||
| 			end | ||||
| 		end | ||||
|  | ||||
| 		-- Add items by item definition | ||||
| 		for name, def in pairs(minetest.registered_items) do | ||||
| 			local group = def.groups or {} | ||||
| 			if not group.not_in_creative_inventory then | ||||
| 				if group.stair or | ||||
| 				   group.slab or | ||||
| 				   group.wall or | ||||
| 				   group.fence then | ||||
| 					unified_inventory.add_category_item('building', name) | ||||
| 				elseif group.flora or | ||||
| 					   group.flower or | ||||
| 					   group.seed or | ||||
| 					   group.leaves or | ||||
| 					   group.sapling or | ||||
| 					   group.tree then | ||||
| 					unified_inventory.add_category_item('plants', name) | ||||
| 				elseif def.type == 'tool' then | ||||
| 					unified_inventory.add_category_item('tools', name) | ||||
| 				elseif def.liquidtype == 'source' then | ||||
| 					unified_inventory.add_category_item('environment', name) | ||||
| 				elseif def.light_source and def.light_source > 0 then | ||||
| 					unified_inventory.add_category_item('lighting', name) | ||||
| 				elseif group.door or | ||||
| 					   minetest.global_exists("doors") and ( | ||||
| 					     doors.registered_doors and doors.registered_doors[name..'_a'] or | ||||
| 					     doors.registered_trapdoors and doors.registered_trapdoors[name] | ||||
| 					   ) then | ||||
| 					unified_inventory.add_category_item('building', name) | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 	end) | ||||
| end | ||||
|  | ||||
| -- [[ | ||||
| unified_inventory.add_category_items('plants', { | ||||
| 	"default:dry_grass_5", | ||||
| 	"default:acacia_sapling", | ||||
| 	"default:blueberry_bush_sapling", | ||||
| 	"default:grass_2", | ||||
| 	"default:pine_bush_stem", | ||||
| 	"default:leaves", | ||||
| 	"default:pine_needles", | ||||
| 	"default:cactus", | ||||
| 	"default:junglegrass", | ||||
| 	"default:pine_sapling", | ||||
| 	"default:sapling", | ||||
| 	"default:bush_stem", | ||||
| 	"default:dry_grass_2", | ||||
| 	"default:fern_1", | ||||
| 	"default:grass_3", | ||||
| 	"default:marram_grass_1", | ||||
| 	"default:pine_tree", | ||||
| 	"default:dry_grass_3", | ||||
| 	"default:dry_shrub", | ||||
| 	"default:grass_4", | ||||
| 	"default:marram_grass_2", | ||||
| 	"default:jungleleaves", | ||||
| 	"default:apple", | ||||
| 	"default:tree", | ||||
| 	"default:aspen_tree", | ||||
| 	"default:bush_sapling", | ||||
| 	"default:grass_5", | ||||
| 	"default:blueberry_bush_leaves_with_berries", | ||||
| 	"default:acacia_bush_sapling", | ||||
| 	"default:grass_1", | ||||
| 	"default:aspen_leaves", | ||||
| 	"default:marram_grass_3", | ||||
| 	"default:large_cactus_seedling", | ||||
| 	"default:junglesapling", | ||||
| 	"default:dry_grass_4", | ||||
| 	"default:acacia_bush_stem", | ||||
| 	"default:papyrus", | ||||
| 	"default:pine_bush_needles", | ||||
| 	"default:bush_leaves", | ||||
| 	"default:fern_3", | ||||
| 	"default:aspen_sapling", | ||||
| 	"default:acacia_tree", | ||||
| 	"default:apple_mark", | ||||
| 	"default:acacia_leaves", | ||||
| 	"default:jungletree", | ||||
| 	"default:dry_grass_1", | ||||
| 	"default:acacia_bush_leaves", | ||||
| 	"default:emergent_jungle_sapling", | ||||
| 	"default:fern_2", | ||||
| 	"default:blueberries", | ||||
| 	"default:sand_with_kelp", | ||||
| 	"default:blueberry_bush_leaves", | ||||
| 	"default:pine_bush_sapling", | ||||
|  | ||||
| 	"farming:cotton", | ||||
| 	"farming:cotton_1", | ||||
| 	"farming:cotton_2", | ||||
| 	"farming:cotton_3", | ||||
| 	"farming:cotton_4", | ||||
| 	"farming:cotton_5", | ||||
| 	"farming:cotton_6", | ||||
| 	"farming:cotton_7", | ||||
| 	"farming:cotton_8", | ||||
| 	"farming:cotton_wild", | ||||
| 	"farming:seed_cotton", | ||||
| 	"farming:seed_wheat", | ||||
| 	"farming:straw", | ||||
| 	"farming:wheat", | ||||
| 	"farming:wheat_1", | ||||
| 	"farming:wheat_2", | ||||
| 	"farming:wheat_3", | ||||
| 	"farming:wheat_4", | ||||
| 	"farming:wheat_5", | ||||
| 	"farming:wheat_6", | ||||
| 	"farming:wheat_7", | ||||
| 	"farming:wheat_8", | ||||
|  | ||||
| 	"flowers:chrysanthemum_green", | ||||
| 	"flowers:dandelion_white", | ||||
| 	"flowers:dandelion_yellow", | ||||
| 	"flowers:geranium", | ||||
| 	"flowers:mushroom_brown", | ||||
| 	"flowers:mushroom_red", | ||||
| 	"flowers:rose", | ||||
| 	"flowers:tulip", | ||||
| 	"flowers:tulip_black", | ||||
| 	"flowers:viola", | ||||
| 	"flowers:waterlily", | ||||
| 	"flowers:waterlily_waving", | ||||
| }) | ||||
|  | ||||
| unified_inventory.add_category_items('tools', { | ||||
| 	"default:sword_diamond", | ||||
| 	"default:axe_diamond", | ||||
| 	"default:shovel_diamond", | ||||
| 	"default:axe_steel", | ||||
| 	"default:shovel_mese", | ||||
| 	"default:sword_wood", | ||||
| 	"default:pick_bronze", | ||||
| 	"default:axe_stone", | ||||
| 	"default:sword_stone", | ||||
| 	"default:pick_stone", | ||||
| 	"default:shovel_stone", | ||||
| 	"default:sword_mese", | ||||
| 	"default:shovel_bronze", | ||||
| 	"default:sword_bronze", | ||||
| 	"default:axe_bronze", | ||||
| 	"default:shovel_steel", | ||||
| 	"default:sword_steel", | ||||
| 	"default:axe_mese", | ||||
| 	"default:shovel_wood", | ||||
| 	"default:pick_mese", | ||||
| 	"default:axe_wood", | ||||
| 	"default:pick_diamond", | ||||
| 	"default:pick_wood", | ||||
| 	"default:pick_steel", | ||||
|  | ||||
| 	"farming:hoe_bronze", | ||||
| 	"farming:hoe_diamond", | ||||
| 	"farming:hoe_mese", | ||||
| 	"farming:hoe_steel", | ||||
| 	"farming:hoe_stone", | ||||
| 	"farming:hoe_wood", | ||||
|  | ||||
| 	"fire:flint_and_steel", | ||||
| 	"map:mapping_kit", | ||||
| 	"screwdriver:screwdriver", | ||||
|  | ||||
| 	"fireflies:bug_net", | ||||
| 	"bucket:bucket_empty", | ||||
|  | ||||
| 	"binoculars:binoculars", | ||||
| 	"default:skeleton_key", | ||||
| }) | ||||
|  | ||||
| unified_inventory.add_category_items('minerals', { | ||||
| 	"default:stone_with_copper", | ||||
| 	"default:stone_with_gold", | ||||
| 	"default:stone_with_iron", | ||||
| 	"default:copper_ingot", | ||||
| 	"default:copper_lump", | ||||
| 	"default:gold_lump", | ||||
| 	"default:diamondblock", | ||||
| 	"default:stone_with_diamond", | ||||
| 	"default:stone_with_mese", | ||||
| 	"default:steel_ingot", | ||||
| 	"default:gold_ingot", | ||||
| 	"default:iron_lump", | ||||
| 	"default:tinblock", | ||||
| 	"default:tin_lump", | ||||
| 	"default:stone_with_tin", | ||||
| 	"default:mese_crystal", | ||||
| 	"default:diamond", | ||||
| 	"default:bronze_ingot", | ||||
| 	"default:mese", | ||||
| 	"default:mese_crystal_fragment", | ||||
| 	"default:copperblock", | ||||
| 	"default:stone_with_coal", | ||||
| 	"default:steelblock", | ||||
| 	"default:tin_ingot", | ||||
| 	"default:coalblock", | ||||
| 	"default:coal_lump", | ||||
| 	"default:bronzeblock", | ||||
| 	"default:goldblock", | ||||
|  | ||||
| 	"stairs:slab_bronzeblock", | ||||
| 	"stairs:slab_copperblock", | ||||
| 	"stairs:slab_steelblock", | ||||
| 	"stairs:slab_tinblock", | ||||
| 	"stairs:stair_bronzeblock", | ||||
| 	"stairs:stair_copperblock", | ||||
| 	"stairs:stair_inner_bronzeblock", | ||||
| 	"stairs:stair_inner_copperblock", | ||||
| 	"stairs:stair_inner_steelblock", | ||||
| 	"stairs:stair_inner_tinblock", | ||||
| 	"stairs:stair_outer_bronzeblock", | ||||
| 	"stairs:stair_outer_copperblock", | ||||
| 	"stairs:stair_outer_steelblock", | ||||
| 	"stairs:stair_outer_tinblock", | ||||
| 	"stairs:stair_steelblock", | ||||
| 	"stairs:stair_tinblock", | ||||
| }) | ||||
|  | ||||
| unified_inventory.add_category_items('building', { | ||||
| 	"default:fence_rail_aspen_wood", | ||||
| 	"default:fence_rail_acacia_wood", | ||||
| 	"default:fence_junglewood", | ||||
| 	"default:fence_rail_junglewood", | ||||
| 	"default:fence_aspen_wood", | ||||
| 	"default:fence_pine_wood", | ||||
| 	"default:fence_rail_wood", | ||||
| 	"default:fence_rail_pine_wood", | ||||
| 	"default:fence_acacia_wood", | ||||
| 	"default:junglewood", | ||||
| 	"default:acacia_wood", | ||||
| 	"default:aspen_wood", | ||||
| 	"default:fence_wood", | ||||
| 	"default:pine_wood", | ||||
| 	"default:silver_sandstone", | ||||
| 	"default:desert_sandstone", | ||||
| 	"default:sandstone_block", | ||||
| 	"default:desert_sandstone_brick", | ||||
| 	"default:stone_block", | ||||
| 	"default:stonebrick", | ||||
| 	"default:obsidian_glass", | ||||
| 	"default:desert_sandstone_block", | ||||
| 	"default:silver_sandstone_brick", | ||||
| 	"default:brick", | ||||
| 	"default:obsidianbrick", | ||||
| 	"default:sandstonebrick", | ||||
| 	"default:sandstone", | ||||
| 	"default:desert_stone_block", | ||||
| 	"default:silver_sandstone_block", | ||||
| 	"default:wood", | ||||
| 	"default:obsidian_block", | ||||
| 	"default:glass", | ||||
| 	"default:clay_brick", | ||||
| 	"default:desert_stonebrick", | ||||
| 	"default:desert_cobble", | ||||
| 	"default:cobble", | ||||
| 	"default:mossycobble", | ||||
|  | ||||
| 	"doors:door_glass", | ||||
| 	"doors:door_glass_a", | ||||
| 	"doors:door_glass_b", | ||||
| 	"doors:door_glass_c", | ||||
| 	"doors:door_glass_d", | ||||
| 	"doors:door_obsidian_glass", | ||||
| 	"doors:door_obsidian_glass_a", | ||||
| 	"doors:door_obsidian_glass_b", | ||||
| 	"doors:door_obsidian_glass_c", | ||||
| 	"doors:door_obsidian_glass_d", | ||||
| 	"doors:door_steel", | ||||
| 	"doors:door_steel_a", | ||||
| 	"doors:door_steel_b", | ||||
| 	"doors:door_steel_c", | ||||
| 	"doors:door_steel_d", | ||||
| 	"doors:door_wood", | ||||
| 	"doors:door_wood_a", | ||||
| 	"doors:door_wood_b", | ||||
| 	"doors:door_wood_c", | ||||
| 	"doors:door_wood_d", | ||||
| 	"doors:gate_acacia_wood_closed", | ||||
| 	"doors:gate_acacia_wood_open", | ||||
| 	"doors:gate_aspen_wood_closed", | ||||
| 	"doors:gate_aspen_wood_open", | ||||
| 	"doors:gate_junglewood_closed", | ||||
| 	"doors:gate_junglewood_open", | ||||
| 	"doors:gate_pine_wood_closed", | ||||
| 	"doors:gate_pine_wood_open", | ||||
| 	"doors:gate_wood_closed", | ||||
| 	"doors:gate_wood_open", | ||||
| 	"doors:hidden", | ||||
| 	"doors:trapdoor", | ||||
| 	"doors:trapdoor_open", | ||||
| 	"doors:trapdoor_steel", | ||||
| 	"doors:trapdoor_steel_open", | ||||
|  | ||||
| 	"stairs:slab_bronzeblock", | ||||
| 	"stairs:slab_copperblock", | ||||
| 	"stairs:slab_steelblock", | ||||
| 	"stairs:slab_tinblock", | ||||
| 	"stairs:stair_bronzeblock", | ||||
| 	"stairs:stair_copperblock", | ||||
| 	"stairs:stair_inner_bronzeblock", | ||||
| 	"stairs:stair_inner_copperblock", | ||||
| 	"stairs:stair_inner_steelblock", | ||||
| 	"stairs:stair_inner_tinblock", | ||||
| 	"stairs:stair_outer_bronzeblock", | ||||
| 	"stairs:stair_outer_copperblock", | ||||
| 	"stairs:stair_outer_steelblock", | ||||
| 	"stairs:stair_outer_tinblock", | ||||
| 	"stairs:stair_steelblock", | ||||
| 	"stairs:stair_tinblock", | ||||
|  | ||||
| 	"stairs:slab_acacia_wood", | ||||
| 	"stairs:slab_aspen_wood", | ||||
| 	"stairs:slab_brick", | ||||
| 	"stairs:slab_cobble", | ||||
| 	"stairs:slab_desert_cobble", | ||||
| 	"stairs:slab_desert_sandstone", | ||||
| 	"stairs:slab_desert_sandstone_block", | ||||
| 	"stairs:slab_desert_sandstone_brick", | ||||
| 	"stairs:slab_desert_stone", | ||||
| 	"stairs:slab_desert_stone_block", | ||||
| 	"stairs:slab_desert_stonebrick", | ||||
| 	"stairs:slab_glass", | ||||
| 	"stairs:slab_goldblock", | ||||
| 	"stairs:slab_ice", | ||||
| 	"stairs:slab_junglewood", | ||||
| 	"stairs:slab_mossycobble", | ||||
| 	"stairs:slab_obsidian", | ||||
| 	"stairs:slab_obsidian_block", | ||||
| 	"stairs:slab_obsidian_glass", | ||||
| 	"stairs:slab_obsidianbrick", | ||||
| 	"stairs:slab_pine_wood", | ||||
| 	"stairs:slab_sandstone", | ||||
| 	"stairs:slab_sandstone_block", | ||||
| 	"stairs:slab_sandstonebrick", | ||||
| 	"stairs:slab_silver_sandstone", | ||||
| 	"stairs:slab_silver_sandstone_block", | ||||
| 	"stairs:slab_silver_sandstone_brick", | ||||
| 	"stairs:slab_snowblock", | ||||
| 	"stairs:slab_stone", | ||||
| 	"stairs:slab_stone_block", | ||||
| 	"stairs:slab_stonebrick", | ||||
| 	"stairs:slab_straw", | ||||
| 	"stairs:slab_wood", | ||||
| 	"stairs:stair_acacia_wood", | ||||
| 	"stairs:stair_aspen_wood", | ||||
| 	"stairs:stair_brick", | ||||
| 	"stairs:stair_cobble", | ||||
| 	"stairs:stair_desert_cobble", | ||||
| 	"stairs:stair_desert_sandstone", | ||||
| 	"stairs:stair_desert_sandstone_block", | ||||
| 	"stairs:stair_desert_sandstone_brick", | ||||
| 	"stairs:stair_desert_stone", | ||||
| 	"stairs:stair_desert_stone_block", | ||||
| 	"stairs:stair_desert_stonebrick", | ||||
| 	"stairs:stair_glass", | ||||
| 	"stairs:stair_goldblock", | ||||
| 	"stairs:stair_ice", | ||||
| 	"stairs:stair_inner_acacia_wood", | ||||
| 	"stairs:stair_inner_aspen_wood", | ||||
| 	"stairs:stair_inner_brick", | ||||
| 	"stairs:stair_inner_cobble", | ||||
| 	"stairs:stair_inner_desert_cobble", | ||||
| 	"stairs:stair_inner_desert_sandstone", | ||||
| 	"stairs:stair_inner_desert_sandstone_block", | ||||
| 	"stairs:stair_inner_desert_sandstone_brick", | ||||
| 	"stairs:stair_inner_desert_stone", | ||||
| 	"stairs:stair_inner_desert_stone_block", | ||||
| 	"stairs:stair_inner_desert_stonebrick", | ||||
| 	"stairs:stair_inner_glass", | ||||
| 	"stairs:stair_inner_goldblock", | ||||
| 	"stairs:stair_inner_ice", | ||||
| 	"stairs:stair_inner_junglewood", | ||||
| 	"stairs:stair_inner_mossycobble", | ||||
| 	"stairs:stair_inner_obsidian", | ||||
| 	"stairs:stair_inner_obsidian_block", | ||||
| 	"stairs:stair_inner_obsidian_glass", | ||||
| 	"stairs:stair_inner_obsidianbrick", | ||||
| 	"stairs:stair_inner_pine_wood", | ||||
| 	"stairs:stair_inner_sandstone", | ||||
| 	"stairs:stair_inner_sandstone_block", | ||||
| 	"stairs:stair_inner_sandstonebrick", | ||||
| 	"stairs:stair_inner_silver_sandstone", | ||||
| 	"stairs:stair_inner_silver_sandstone_block", | ||||
| 	"stairs:stair_inner_silver_sandstone_brick", | ||||
| 	"stairs:stair_inner_snowblock", | ||||
| 	"stairs:stair_inner_stone", | ||||
| 	"stairs:stair_inner_stone_block", | ||||
| 	"stairs:stair_inner_stonebrick", | ||||
| 	"stairs:stair_inner_straw", | ||||
| 	"stairs:stair_inner_wood", | ||||
| 	"stairs:stair_junglewood", | ||||
| 	"stairs:stair_mossycobble", | ||||
| 	"stairs:stair_obsidian", | ||||
| 	"stairs:stair_obsidian_block", | ||||
| 	"stairs:stair_obsidian_glass", | ||||
| 	"stairs:stair_obsidianbrick", | ||||
| 	"stairs:stair_outer_acacia_wood", | ||||
| 	"stairs:stair_outer_aspen_wood", | ||||
| 	"stairs:stair_outer_brick", | ||||
| 	"stairs:stair_outer_cobble", | ||||
| 	"stairs:stair_outer_desert_cobble", | ||||
| 	"stairs:stair_outer_desert_sandstone", | ||||
| 	"stairs:stair_outer_desert_sandstone_block", | ||||
| 	"stairs:stair_outer_desert_sandstone_brick", | ||||
| 	"stairs:stair_outer_desert_stone", | ||||
| 	"stairs:stair_outer_desert_stone_block", | ||||
| 	"stairs:stair_outer_desert_stonebrick", | ||||
| 	"stairs:stair_outer_glass", | ||||
| 	"stairs:stair_outer_goldblock", | ||||
| 	"stairs:stair_outer_ice", | ||||
| 	"stairs:stair_outer_junglewood", | ||||
| 	"stairs:stair_outer_mossycobble", | ||||
| 	"stairs:stair_outer_obsidian", | ||||
| 	"stairs:stair_outer_obsidian_block", | ||||
| 	"stairs:stair_outer_obsidian_glass", | ||||
| 	"stairs:stair_outer_obsidianbrick", | ||||
| 	"stairs:stair_outer_pine_wood", | ||||
| 	"stairs:stair_outer_sandstone", | ||||
| 	"stairs:stair_outer_sandstone_block", | ||||
| 	"stairs:stair_outer_sandstonebrick", | ||||
| 	"stairs:stair_outer_silver_sandstone", | ||||
| 	"stairs:stair_outer_silver_sandstone_block", | ||||
| 	"stairs:stair_outer_silver_sandstone_brick", | ||||
| 	"stairs:stair_outer_snowblock", | ||||
| 	"stairs:stair_outer_stone", | ||||
| 	"stairs:stair_outer_stone_block", | ||||
| 	"stairs:stair_outer_stonebrick", | ||||
| 	"stairs:stair_outer_straw", | ||||
| 	"stairs:stair_outer_wood", | ||||
| 	"stairs:stair_pine_wood", | ||||
| 	"stairs:stair_sandstone", | ||||
| 	"stairs:stair_sandstone_block", | ||||
| 	"stairs:stair_sandstonebrick", | ||||
| 	"stairs:stair_silver_sandstone", | ||||
| 	"stairs:stair_silver_sandstone_block", | ||||
| 	"stairs:stair_silver_sandstone_brick", | ||||
| 	"stairs:stair_snowblock", | ||||
| 	"stairs:stair_stone", | ||||
| 	"stairs:stair_stone_block", | ||||
| 	"stairs:stair_stonebrick", | ||||
| 	"stairs:stair_straw", | ||||
| 	"stairs:stair_wood", | ||||
|  | ||||
| 	"xpanes:bar", | ||||
| 	"xpanes:bar_flat", | ||||
| 	"xpanes:door_steel_bar", | ||||
| 	"xpanes:door_steel_bar_a", | ||||
| 	"xpanes:door_steel_bar_b", | ||||
| 	"xpanes:door_steel_bar_c", | ||||
| 	"xpanes:door_steel_bar_d", | ||||
| 	"xpanes:obsidian_pane", | ||||
| 	"xpanes:obsidian_pane_flat", | ||||
| 	"xpanes:pane", | ||||
| 	"xpanes:pane_flat", | ||||
| 	"xpanes:trapdoor_steel_bar", | ||||
| 	"xpanes:trapdoor_steel_bar_open", | ||||
|  | ||||
| 	"walls:cobble", | ||||
| 	"walls:desertcobble", | ||||
| 	"walls:mossycobble", | ||||
| }) | ||||
|  | ||||
| unified_inventory.add_category_items('environment', { | ||||
| 	"air", | ||||
| 	"default:cave_ice", | ||||
| 	"default:dirt_with_rainforest_litter", | ||||
| 	"default:gravel", | ||||
| 	"default:dry_dirt_with_dry_grass", | ||||
| 	"default:permafrost", | ||||
| 	"default:desert_stone", | ||||
| 	"default:ice", | ||||
| 	"default:dry_dirt", | ||||
| 	"default:obsidian", | ||||
| 	"default:sand", | ||||
| 	"default:river_water_source", | ||||
| 	"default:dirt_with_snow", | ||||
| 	"default:dirt_with_grass", | ||||
| 	"default:water_flowing", | ||||
| 	"default:dirt", | ||||
| 	"default:desert_sand", | ||||
| 	"default:permafrost_with_moss", | ||||
| 	"default:dirt_with_coniferous_litter", | ||||
| 	"default:water_source", | ||||
| 	"default:dirt_with_dry_grass", | ||||
| 	"default:river_water_flowing", | ||||
| 	"default:stone", | ||||
| 	"default:snow", | ||||
| 	"default:lava_flowing", | ||||
| 	"default:lava_source", | ||||
| 	"default:permafrost_with_stones", | ||||
| 	"default:dirt_with_grass_footsteps", | ||||
| 	"default:silver_sand", | ||||
| 	"default:snowblock", | ||||
| 	"default:clay", | ||||
|  | ||||
| 	"farming:desert_sand_soil", | ||||
| 	"farming:desert_sand_soil_wet", | ||||
| 	"farming:dry_soil", | ||||
| 	"farming:dry_soil_wet", | ||||
| 	"farming:soil", | ||||
| 	"farming:soil_wet", | ||||
| }) | ||||
|  | ||||
| unified_inventory.add_category_items('lighting', { | ||||
| 	"default:mese_post_light_junglewood", | ||||
| 	"default:torch_ceiling", | ||||
| 	"default:meselamp", | ||||
| 	"default:torch", | ||||
| 	"default:mese_post_light_acacia_wood", | ||||
| 	"default:mese_post_light", | ||||
| 	"default:torch_wall", | ||||
| 	"default:mese_post_light_pine_wood", | ||||
| 	"default:mese_post_light_aspen_wood" | ||||
| }) | ||||
| --]] | ||||
|  | ||||
|  | ||||
| --[[ UNCATEGORISED | ||||
|  | ||||
| 	"farming:string", | ||||
|  | ||||
| 	"beds:bed_bottom", | ||||
| 	"beds:bed_top", | ||||
| 	"beds:fancy_bed_bottom", | ||||
| 	"beds:fancy_bed_top", | ||||
| 	"boats:boat", | ||||
| 	"bones:bones", | ||||
|  | ||||
| 	"bucket:bucket_lava", | ||||
| 	"bucket:bucket_river_water", | ||||
| 	"bucket:bucket_water", | ||||
|  | ||||
| 	"butterflies:butterfly_red", | ||||
| 	"butterflies:butterfly_violet", | ||||
| 	"butterflies:butterfly_white", | ||||
| 	"butterflies:hidden_butterfly_red", | ||||
| 	"butterflies:hidden_butterfly_violet", | ||||
| 	"butterflies:hidden_butterfly_white", | ||||
|  | ||||
| 	"carts:brakerail", | ||||
| 	"carts:cart", | ||||
| 	"carts:powerrail", | ||||
| 	"carts:rail", | ||||
|  | ||||
| 	"default:book", | ||||
| 	"default:book_written", | ||||
| 	"default:bookshelf", | ||||
| 	"default:chest", | ||||
| 	"default:chest_locked", | ||||
| 	"default:chest_locked_open", | ||||
| 	"default:chest_open", | ||||
| 	"default:clay_lump", | ||||
| 	"default:cloud", | ||||
| 	"default:coral_brown", | ||||
| 	"default:coral_cyan", | ||||
| 	"default:coral_green", | ||||
| 	"default:coral_orange", | ||||
| 	"default:coral_pink", | ||||
| 	"default:coral_skeleton", | ||||
| 	"default:flint", | ||||
| 	"default:furnace", | ||||
| 	"default:furnace_active", | ||||
| 	"default:key", | ||||
| 	"default:ladder_steel", | ||||
| 	"default:ladder_wood", | ||||
| 	"default:obsidian_shard", | ||||
| 	"default:paper", | ||||
| 	"default:sign_wall_steel", | ||||
| 	"default:sign_wall_wood", | ||||
| 	"default:stick", | ||||
|  | ||||
| 	"fire:basic_flame", | ||||
| 	"fire:permanent_flame", | ||||
| 	"fireflies:firefly", | ||||
| 	"fireflies:firefly_bottle", | ||||
| 	"fireflies:hidden_firefly", | ||||
|  | ||||
| 	"ignore", | ||||
| 	"unknown", | ||||
|  | ||||
| 	"tnt:boom", | ||||
| 	"tnt:gunpowder", | ||||
| 	"tnt:gunpowder_burning", | ||||
| 	"tnt:tnt", | ||||
| 	"tnt:tnt_burning", | ||||
| 	"tnt:tnt_stick", | ||||
|  | ||||
| 	"vessels:drinking_glass", | ||||
| 	"vessels:glass_bottle", | ||||
| 	"vessels:glass_fragments", | ||||
| 	"vessels:shelf", | ||||
| 	"vessels:steel_bottle", | ||||
|  | ||||
| 	"dye:black", | ||||
| 	"dye:blue", | ||||
| 	"dye:brown", | ||||
| 	"dye:cyan", | ||||
| 	"dye:dark_green", | ||||
| 	"dye:dark_grey", | ||||
| 	"dye:green", | ||||
| 	"dye:grey", | ||||
| 	"dye:magenta", | ||||
| 	"dye:orange", | ||||
| 	"dye:pink", | ||||
| 	"dye:red", | ||||
| 	"dye:violet", | ||||
| 	"dye:white", | ||||
| 	"dye:yellow", | ||||
|  | ||||
| 	"wool:black", | ||||
| 	"wool:blue", | ||||
| 	"wool:brown", | ||||
| 	"wool:cyan", | ||||
| 	"wool:dark_green", | ||||
| 	"wool:dark_grey", | ||||
| 	"wool:green", | ||||
| 	"wool:grey", | ||||
| 	"wool:magenta", | ||||
| 	"wool:orange", | ||||
| 	"wool:pink", | ||||
| 	"wool:red", | ||||
| 	"wool:violet", | ||||
| 	"wool:white", | ||||
| 	"wool:yellow", | ||||
|  | ||||
| 	"unified_inventory:bag_large", | ||||
| 	"unified_inventory:bag_medium", | ||||
| 	"unified_inventory:bag_small", | ||||
| --]] | ||||
|  | ||||
| --[[ LIST UNCATEGORIZED AFTER LOAD | ||||
| minetest.register_on_mods_loaded(function() | ||||
| 	minetest.after(1, function ( ) | ||||
| 		local l = {} | ||||
| 		for name,_ in pairs(minetest.registered_items) do | ||||
| 			if not unified_inventory.find_category(name) then | ||||
| 				-- minetest.log("error", minetest.serialize(minetest.registered_items[name])) | ||||
| 				table.insert(l, name) | ||||
| 			end | ||||
| 		end | ||||
| 		table.sort(l) | ||||
| 		minetest.log(table.concat(l, '",'.."\n"..'"')) | ||||
| 	end) | ||||
| end) | ||||
| --]] | ||||
| @@ -101,3 +101,72 @@ Register a non-standard craft recipe: | ||||
| 		-- ^ Same as `minetest.register_recipe` | ||||
| 	}) | ||||
|  | ||||
|  | ||||
| Categories | ||||
| ---------- | ||||
|  | ||||
| Register a new category: | ||||
| 	The config table (second argument) is optional, and all its members are optional | ||||
| 	See the unified_inventory.set_category_* functions for more details on the members of the config table | ||||
|  | ||||
| 	unified_inventory.register_category("category_name", { | ||||
| 		symbol = "mod_name:item_name" or "texture.png", | ||||
| 		label = "Human Readable Label", | ||||
| 		index = 5, | ||||
| 		items = { | ||||
| 			"mod_name:item_name", | ||||
| 			"another_mod:different_item" | ||||
| 		} | ||||
| 	}) | ||||
|  | ||||
| Add / override the symbol for a category: | ||||
| 	The category does not need to exist first | ||||
| 	The symbol can be an item name or a texture image | ||||
| 	If unset this will default to "default:stick" | ||||
|  | ||||
| 	unified_inventory.set_category_symbol("category_name", "mod_name:item_name" or "texture.png") | ||||
|  | ||||
| Add / override the human readable label for a category: | ||||
| 	If unset this will default to the category name | ||||
|  | ||||
| 	unified_inventory.set_category_label("category_name", "Human Readable Label") | ||||
|  | ||||
| Add / override the sorting index of the category: | ||||
| 	Must be a number, can also be negative (-5) or fractional (2.345) | ||||
| 	This determines the position the category appears in the list of categories | ||||
| 	The "all" meta-category has index -2, the "misc"/"uncategorized" meta-category has index -1, use a negative number smaller than these to make a category appear before these in the list | ||||
| 	By default categories are sorted alphabetically with an index between 0.0101(AA) and 0.2626(ZZ) | ||||
|  | ||||
| 	unified_inventory.set_category_index("category_name", 5) | ||||
|  | ||||
| Add a single item to a category: | ||||
|  | ||||
| 	unified_inventory.add_category_item("category_name", "mod_name:item_name") | ||||
|  | ||||
| Add multiple items to a category: | ||||
|  | ||||
| 	unified_inventory.add_category_items("category_name", { | ||||
| 		"mod_name:item_name", | ||||
| 		"another_mod:different_item" | ||||
| 	}) | ||||
|  | ||||
| Remove an item from a category: | ||||
|  | ||||
| 	unified_inventory.remove_category_item("category_name", "mod_name:item_name") | ||||
|  | ||||
| Remove a category entirely: | ||||
|  | ||||
| 	unified_inventory.remove_category("category_name") | ||||
|  | ||||
| Finding existing items in categories: | ||||
| 	This will find the first category an item exists in | ||||
| 	It should be used for checking if an item is catgorised | ||||
| 	Returns "category_name" or nil | ||||
|  | ||||
| 	unified_inventory.find_category("mod_name:item_name") | ||||
|  | ||||
|  | ||||
| 	This will find all the categories an item exists in | ||||
| 	Returns a number indexed table (list) of category names | ||||
|  | ||||
| 	unified_inventory.find_categories("mod_name:item_name") | ||||
|   | ||||
							
								
								
									
										36
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								init.lua
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| -- Unified Inventory for Minetest >= 0.4.16 | ||||
| -- Unified Inventory | ||||
|  | ||||
| local modpath = minetest.get_modpath(minetest.get_current_modname()) | ||||
| local worldpath = minetest.get_worldpath() | ||||
| @@ -10,6 +10,8 @@ unified_inventory = { | ||||
| 	alternate = {}, | ||||
| 	current_page = {}, | ||||
| 	current_searchbox = {}, | ||||
| 	current_category = {}, | ||||
| 	current_category_scroll = {}, | ||||
| 	current_index = {}, | ||||
| 	current_item = {}, | ||||
| 	current_craft_direction = {}, | ||||
| @@ -33,12 +35,16 @@ unified_inventory = { | ||||
| 	-- "Lite" mode | ||||
| 	lite_mode = minetest.settings:get_bool("unified_inventory_lite"), | ||||
|  | ||||
| 	-- Items automatically added to categories based on item definitions | ||||
| 	automatic_categorization = (minetest.settings:get_bool("unified_inventory_automatic_categorization") ~= false), | ||||
|  | ||||
| 	-- Trash enabled | ||||
| 	trash_enabled = (minetest.settings:get_bool("unified_inventory_trash") ~= false), | ||||
| 	imgscale = 1.25, | ||||
| 	list_img_offset = 0.13, | ||||
| 	standard_background = "background9[0,0;1,1;ui_formbg_9_sliced.png;true;16]", | ||||
| 	version = 2 | ||||
|  | ||||
| 	version = 3 | ||||
| } | ||||
|  | ||||
| local ui = unified_inventory | ||||
| @@ -49,10 +55,12 @@ local ui = unified_inventory | ||||
| ui.style_full = { | ||||
| 	formspec_x = 1, | ||||
| 	formspec_y = 1, | ||||
| 	formw = 17.75, | ||||
| 	formh = 12.25, | ||||
| 	pagecols = 8, | ||||
| 	pagerows = 10, | ||||
| 	pagerows = 9, | ||||
| 	page_x = 10.75, | ||||
| 	page_y = 1.45, | ||||
| 	page_y = 2.30, | ||||
| 	craft_x = 2.8, | ||||
| 	craft_y = 1.15, | ||||
| 	craftresult_x = 7.8, | ||||
| @@ -80,10 +88,12 @@ ui.style_full = { | ||||
| ui.style_lite = { | ||||
| 	formspec_x =  0.6, | ||||
| 	formspec_y =  0.6, | ||||
| 	formw = 14, | ||||
| 	formh = 9.75, | ||||
| 	pagecols = 4, | ||||
| 	pagerows = 6, | ||||
| 	pagerows = 5, | ||||
| 	page_x = 10.5, | ||||
| 	page_y = 1.25, | ||||
| 	page_y = 2.15, | ||||
| 	craft_x = 2.6, | ||||
| 	craft_y = 0.75, | ||||
| 	craftresult_x = 5.75, | ||||
| @@ -96,9 +106,9 @@ ui.style_lite = { | ||||
| 	craft_guide_resultstr_y = 0.35, | ||||
| 	give_btn_x = 0.15, | ||||
| 	main_button_x = 10.5, | ||||
| 	main_button_y = 7.9, | ||||
| 	main_button_y = 8.15, | ||||
| 	page_buttons_x = 10.5, | ||||
| 	page_buttons_y = 6.3, | ||||
| 	page_buttons_y = 6.15, | ||||
| 	searchwidth = 1.6, | ||||
| 	form_header_x =  0.2, | ||||
| 	form_header_y =  0.2, | ||||
| @@ -113,7 +123,7 @@ dofile(modpath.."/api.lua") | ||||
| for _, style in ipairs({ui.style_full, ui.style_lite}) do | ||||
| 	style.items_per_page =  style.pagecols * style.pagerows | ||||
| 	style.standard_inv = string.format("list[current_player;main;%f,%f;8,4;]", | ||||
| 							style.std_inv_x+0.13, style.std_inv_y+0.13) | ||||
| 							style.std_inv_x + ui.list_img_offset, style.std_inv_y + ui.list_img_offset) | ||||
|  | ||||
| 	style.standard_inv_bg = ui.make_inv_img_grid(style.std_inv_x, style.std_inv_y, 8, 1, true).. | ||||
| 							ui.make_inv_img_grid(style.std_inv_x, style.std_inv_y + ui.imgscale, 8, 3) | ||||
| @@ -145,6 +155,8 @@ if sfinv then | ||||
| end | ||||
|  | ||||
| dofile(modpath.."/group.lua") | ||||
| dofile(modpath.."/category.lua") | ||||
| dofile(modpath.."/default-categories.lua") | ||||
| dofile(modpath.."/internal.lua") | ||||
| dofile(modpath.."/callbacks.lua") | ||||
| dofile(modpath.."/match_craft.lua") | ||||
| @@ -155,7 +167,5 @@ if minetest.settings:get_bool("unified_inventory_bags") ~= false then | ||||
| end | ||||
|  | ||||
| dofile(modpath.."/item_names.lua") | ||||
|  | ||||
| if minetest.get_modpath("datastorage") then | ||||
| 	dofile(modpath.."/waypoints.lua") | ||||
| end | ||||
| dofile(modpath.."/waypoints.lua") | ||||
| minetest.log("action", "[unified_inventory] loaded.") | ||||
|   | ||||
							
								
								
									
										394
									
								
								internal.lua
									
									
									
									
									
								
							
							
						
						
									
										394
									
								
								internal.lua
									
									
									
									
									
								
							| @@ -22,95 +22,129 @@ end | ||||
| function ui.get_per_player_formspec(player_name) | ||||
| 	local draw_lite_mode = ui.lite_mode and not minetest.check_player_privs(player_name, {ui_full=true}) | ||||
|  | ||||
| 	return table.copy(draw_lite_mode and ui.style_lite or ui.style_full), draw_lite_mode | ||||
| 	local style = table.copy(draw_lite_mode and ui.style_lite or ui.style_full) | ||||
| 	style.is_lite_mode = draw_lite_mode | ||||
| 	return style | ||||
| end | ||||
|  | ||||
| function ui.get_formspec(player, page) | ||||
|  | ||||
| 	if not player then | ||||
| 		return "" | ||||
| local function formspec_button(ui_peruser, name, image, offset, pos, scale, label) | ||||
| 	local element = 'image_button' | ||||
| 	if minetest.registered_items[image] then | ||||
| 		element = 'item_image_button' | ||||
| 	elseif image:find(":", 1, true) then | ||||
| 		image = "unknown_item.png" | ||||
| 	end | ||||
| 	local spc = (1-scale)*ui_peruser.btn_size/2 | ||||
| 	local size = ui_peruser.btn_size*scale | ||||
| 	return string.format("%s[%f,%f;%f,%f;%s;%s;]", element, | ||||
| 		(offset.x or offset[1]) + ( ui_peruser.btn_spc * (pos.x or pos[1]) ) + spc, | ||||
| 		(offset.y or offset[2]) + ( ui_peruser.btn_spc * (pos.y or pos[2]) ) + spc, | ||||
| 		size, size, image, name) .. | ||||
| 		string.format("tooltip[%s;%s]", name, F(label or name)) | ||||
| end | ||||
|  | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local ui_peruser,draw_lite_mode = ui.get_per_player_formspec(player_name) | ||||
|  | ||||
| 	ui.current_page[player_name] = page | ||||
| 	local pagedef = ui.pages[page] | ||||
|  | ||||
| 	if not pagedef then | ||||
| 		return "" -- Invalid page name | ||||
| 	end | ||||
|  | ||||
| 	local formspec = { | ||||
| 		"formspec_version[4]size[17.75,12.25]", | ||||
| 		pagedef.formspec_prepend and "" or "no_prepend[]", | ||||
| 		ui.standard_background -- Background | ||||
| 	} | ||||
| 	local n = 4 | ||||
|  | ||||
| 	if draw_lite_mode then | ||||
| 		formspec[1] = "formspec_version[4]size[14,9.75]" | ||||
| 		formspec[3] = ui.standard_background | ||||
| 	end | ||||
|  | ||||
| 	local perplayer_formspec = ui.get_per_player_formspec(player_name) | ||||
| 	local fsdata = pagedef.get_formspec(player, perplayer_formspec) | ||||
|  | ||||
| 	formspec[n] = fsdata.formspec | ||||
| 	n = n+1 | ||||
|  | ||||
| local function formspec_add_filters(player, formspec, style) | ||||
| 	local button_row = 0 | ||||
| 	local button_col = 0 | ||||
| 	local n = #formspec + 1 | ||||
|  | ||||
| 	-- Main buttons | ||||
|  | ||||
| 	local filtered_inv_buttons = {} | ||||
|  | ||||
| 	for i, def in pairs(ui.buttons) do | ||||
| 		if not (draw_lite_mode and def.hide_lite) then | ||||
| 		if not (style.is_lite_mode and def.hide_lite) then | ||||
| 			table.insert(filtered_inv_buttons, def) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	local j = 1 --Modif NALC (sys4 20/11/2018) 12 buttons max by row | ||||
| 	for i, def in pairs(filtered_inv_buttons) do | ||||
|  | ||||
| 		if draw_lite_mode and i > 4 then | ||||
| 		if style.is_lite_mode and i > 4 then | ||||
| 			button_row = 1 | ||||
| 			button_col = 1 | ||||
| 		elseif not draw_lite_mode and j > 12 then | ||||
| 			button_row = 1 | ||||
| 			j = 1 | ||||
| 		end | ||||
|  | ||||
| 		if def.type == "image" then | ||||
| 			local pos_x = style.main_button_x + style.btn_spc * (j - 1) - button_col * style.btn_spc * 4 | ||||
| 			local pos_y = style.main_button_y + button_row * style.btn_spc | ||||
| 			if (def.condition == nil or def.condition(player) == true) then | ||||
| 				formspec[n] = string.format("image_button[%f,%f;%f,%f;%s;%s;]", | ||||
| 					ui_peruser.main_button_x + ui_peruser.btn_spc * (i - 1) - button_col * ui_peruser.btn_spc * 4, | ||||
| 					ui_peruser.main_button_y + button_row * ui_peruser.btn_spc, | ||||
| 					ui_peruser.btn_size,ui_peruser.btn_size, | ||||
| 					pos_x, pos_y, style.btn_size, style.btn_size, | ||||
| 					F(def.image), | ||||
| 					F(def.name)) | ||||
| 				formspec[n+1] = "tooltip["..F(def.name)..";"..(def.tooltip or "").."]" | ||||
| 				n = n+2 | ||||
| 			else | ||||
| 				formspec[n] = string.format("image[%f,%f;%f,%f;%s^[colorize:#808080:alpha]", | ||||
| 				ui_peruser.main_button_x + ui_peruser.btn_spc * (i - 1) - button_col * ui_peruser.btn_spc * 4, | ||||
| 				ui_peruser.main_button_y + button_row * ui_peruser.btn_spc, | ||||
| 				ui_peruser.btn_size,ui_peruser.btn_size,def.image) | ||||
| 					pos_x, pos_y, style.btn_size, style.btn_size, | ||||
| 					def.image) | ||||
| 				n = n+1 | ||||
| 			end | ||||
| 		end | ||||
| 		j = j + 1 -- Modif NALC | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local function formspec_add_categories(player, formspec, ui_peruser) | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local n = #formspec + 1 | ||||
|  | ||||
| 	local categories_pos = { | ||||
| 		ui_peruser.page_x, | ||||
| 		ui_peruser.page_y-ui_peruser.btn_spc-0.5 | ||||
| 	} | ||||
| 	local categories_scroll_pos = { | ||||
| 		ui_peruser.page_x, | ||||
| 		ui_peruser.form_header_y - (ui_peruser.is_lite_mode and 0 or 0.2) | ||||
| 	} | ||||
|  | ||||
| 	formspec[n] = string.format("background9[%f,%f;%f,%f;%s;false;3]", | ||||
| 		ui_peruser.page_x-0.1, categories_scroll_pos[2], | ||||
| 		(ui_peruser.btn_spc * ui_peruser.pagecols) + 0.13, 1.4 + (ui_peruser.is_lite_mode and 0 or 0.2), | ||||
| 		"ui_smallbg_9_sliced.png") | ||||
| 	n = n + 1 | ||||
|  | ||||
| 	formspec[n] = string.format("label[%f,%f;%s]", | ||||
| 		ui_peruser.page_x, | ||||
| 		ui_peruser.form_header_y + (ui_peruser.is_lite_mode and 0.3 or 0.2), F(S("Category:"))) | ||||
| 	n = n + 1 | ||||
|  | ||||
| 	local scroll_offset = 0 | ||||
| 	local category_count = #ui.category_list | ||||
| 	if category_count > ui_peruser.pagecols then | ||||
| 		scroll_offset = ui.current_category_scroll[player_name] | ||||
| 	end | ||||
|  | ||||
| 	if fsdata.draw_inventory ~= false then | ||||
| 		-- Player inventory | ||||
| 		formspec[n] = "listcolors[#00000000;#00000000]" | ||||
| 		formspec[n+1] = ui_peruser.standard_inv | ||||
| 		n = n+2 | ||||
| 	for index, category in ipairs(ui.category_list) do | ||||
| 		local column = index - scroll_offset | ||||
| 		if column > 0 and column <= ui_peruser.pagecols then | ||||
| 			local scale = 0.8 | ||||
| 			if ui.current_category[player_name] == category.name then | ||||
| 				scale = 1 | ||||
| 			end | ||||
| 			formspec[n] = formspec_button(ui_peruser, "category_"..category.name, category.symbol, categories_pos, {column-1, 0}, scale, category.label) | ||||
| 			n = n + 1 | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	if fsdata.draw_item_list == false then | ||||
| 		return table.concat(formspec, "") | ||||
| 	if category_count > ui_peruser.pagecols and scroll_offset > 0 then | ||||
| 		-- prev | ||||
| 		formspec[n] = formspec_button(ui_peruser, "prev_category", "ui_left_icon.png", categories_scroll_pos, {ui_peruser.pagecols - 2, 0}, 0.8, S("Scroll categories left")) | ||||
| 		n = n + 1 | ||||
| 	end | ||||
| 	if category_count > ui_peruser.pagecols and category_count - scroll_offset > ui_peruser.pagecols then | ||||
| 		-- next | ||||
| 		formspec[n] = formspec_button(ui_peruser, "next_category", "ui_right_icon.png", categories_scroll_pos, {ui_peruser.pagecols - 1, 0}, 0.8, S("Scroll categories right")) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local function formspec_add_search_box(player, formspec, ui_peruser) | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local n = #formspec + 1 | ||||
|  | ||||
| 	-- Search box | ||||
| 	formspec[n] = "field_close_on_enter[searchbox;false]" | ||||
|  | ||||
| 	formspec[n+1] = string.format("field[%f,%f;%f,%f;searchbox;;%s]", | ||||
| @@ -127,7 +161,16 @@ function ui.get_formspec(player, page) | ||||
| 		ui_peruser.btn_size, ui_peruser.btn_size) | ||||
| 	formspec[n+5] = "tooltip[searchresetbutton;"..F(S("Reset search and display everything")).."]" | ||||
|  | ||||
| 	n = n + 6 | ||||
| 	if ui.activefilter[player_name] ~= "" then | ||||
| 		formspec[n+6] = string.format("label[%f,%f;%s: %s]", | ||||
| 			ui_peruser.page_x, ui_peruser.page_y - 0.25, | ||||
| 			F(S("Filter")), F(ui.activefilter[player_name])) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local function formspec_add_item_browser(player, formspec, ui_peruser) | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local n = #formspec + 1 | ||||
|  | ||||
| 	-- Controls to flip items pages | ||||
|  | ||||
| @@ -140,9 +183,9 @@ function ui.get_formspec(player, page) | ||||
| 		{ "ui_skip_forward_icon.png",  "end_list",   S("Last page") }, | ||||
| 	} | ||||
|  | ||||
| 	if draw_lite_mode then | ||||
| 		btnlist[5] = nil | ||||
| 	if ui_peruser.is_lite_mode then | ||||
| 		btnlist[2] = nil | ||||
| 		btnlist[5] = nil | ||||
| 	end | ||||
|  | ||||
| 	local bn = 0 | ||||
| @@ -157,69 +200,109 @@ function ui.get_formspec(player, page) | ||||
| 		n = n + 2 | ||||
| 	end | ||||
|  | ||||
| 	local no_matches = S("No matching items") | ||||
| 	if draw_lite_mode then | ||||
| 		no_matches = S("No matches.") | ||||
| 	end | ||||
|  | ||||
| 	-- Items list | ||||
| 	if #ui.filtered_items_list[player_name] == 0 then | ||||
| 		formspec[n] = "label["..ui_peruser.page_x..","..(ui_peruser.page_y+0.15)..";" .. F(no_matches) .. "]" | ||||
| 	else | ||||
| 		local dir = ui.active_search_direction[player_name] | ||||
| 		local list_index = ui.current_index[player_name] | ||||
| 		local page2 = math.floor(list_index / (ui_peruser.items_per_page) + 1) | ||||
| 		local pagemax = math.floor( | ||||
| 			(#ui.filtered_items_list[player_name] - 1) | ||||
| 				/ (ui_peruser.items_per_page) + 1) | ||||
| 		for y = 0, ui_peruser.pagerows - 1 do | ||||
| 			for x = 0, ui_peruser.pagecols - 1 do | ||||
| 				local name = ui.filtered_items_list[player_name][list_index] | ||||
| 				local item = minetest.registered_items[name] | ||||
| 				if item then | ||||
| 					-- Clicked on current item: Flip crafting direction | ||||
| 					if name == ui.current_item[player_name] then | ||||
| 						local cdir = ui.current_craft_direction[player_name] | ||||
| 						if cdir == "recipe" then | ||||
| 							dir = "usage" | ||||
| 						elseif cdir == "usage" then | ||||
| 							dir = "recipe" | ||||
| 						end | ||||
| 					else | ||||
| 					-- Default: use active search direction by default | ||||
| 						dir = ui.active_search_direction[player_name] | ||||
| 					end | ||||
| 		local no_matches = S("No matching items") | ||||
| 		if ui_peruser.is_lite_mode then | ||||
| 			no_matches = S("No matches.") | ||||
| 		end | ||||
|  | ||||
| 					local button_name = "item_button_" .. dir .. "_" | ||||
| 						.. ui.mangle_for_formspec(name) | ||||
| 					formspec[n] = ("item_image_button[%f,%f;%f,%f;%s;%s;]"):format( | ||||
| 						ui_peruser.page_x + x * ui_peruser.btn_spc, | ||||
| 						ui_peruser.page_y + y * ui_peruser.btn_spc, | ||||
| 						ui_peruser.btn_size, ui_peruser.btn_size, | ||||
| 						name, button_name | ||||
| 					) | ||||
| 					formspec[n + 1] = ("tooltip[%s;%s \\[%s\\]]"):format( | ||||
| 						button_name, minetest.formspec_escape(item.description), | ||||
| 						item.mod_origin or "??" | ||||
| 					) | ||||
| 					n = n + 2 | ||||
| 					list_index = list_index + 1 | ||||
| 		formspec[n] = "label["..ui_peruser.page_x..","..(ui_peruser.page_y+0.15)..";" .. F(no_matches) .. "]" | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	local dir = ui.active_search_direction[player_name] | ||||
| 	local list_index = ui.current_index[player_name] | ||||
| 	local page2 = math.floor(list_index / (ui_peruser.items_per_page) + 1) | ||||
| 	local pagemax = math.floor( | ||||
| 		(#ui.filtered_items_list[player_name] - 1) | ||||
| 			/ (ui_peruser.items_per_page) + 1) | ||||
| 	for y = 0, ui_peruser.pagerows - 1 do | ||||
| 		for x = 0, ui_peruser.pagecols - 1 do | ||||
| 			local name = ui.filtered_items_list[player_name][list_index] | ||||
| 			local item = minetest.registered_items[name] | ||||
| 			if item then | ||||
| 				-- Clicked on current item: Flip crafting direction | ||||
| 				if name == ui.current_item[player_name] then | ||||
| 					local cdir = ui.current_craft_direction[player_name] | ||||
| 					if cdir == "recipe" then | ||||
| 						dir = "usage" | ||||
| 					elseif cdir == "usage" then | ||||
| 						dir = "recipe" | ||||
| 					end | ||||
| 				else | ||||
| 				-- Default: use active search direction by default | ||||
| 					dir = ui.active_search_direction[player_name] | ||||
| 				end | ||||
|  | ||||
| 				local button_name = "item_button_" .. dir .. "_" | ||||
| 					.. ui.mangle_for_formspec(name) | ||||
| 				formspec[n] = ("item_image_button[%f,%f;%f,%f;%s;%s;]"):format( | ||||
| 					ui_peruser.page_x + x * ui_peruser.btn_spc, | ||||
| 					ui_peruser.page_y + y * ui_peruser.btn_spc, | ||||
| 					ui_peruser.btn_size, ui_peruser.btn_size, | ||||
| 					name, button_name | ||||
| 				) | ||||
| 				formspec[n + 1] = ("tooltip[%s;%s \\[%s\\]]"):format( | ||||
| 					button_name, minetest.formspec_escape(item.description), | ||||
| 					item.mod_origin or "??" | ||||
| 				) | ||||
| 				n = n + 2 | ||||
| 				list_index = list_index + 1 | ||||
| 			end | ||||
| 		end | ||||
| 		formspec[n] = string.format("label[%f,%f;%s: %s]", | ||||
| 			ui_peruser.page_x, ui_peruser.form_header_y, | ||||
| 			F(S("Page")), S("@1 of @2",page2,pagemax)) | ||||
| 	end | ||||
| 	n= n+1 | ||||
| 	formspec[n] = string.format("label[%f,%f;%s: %s]", | ||||
| 		ui_peruser.page_buttons_x + ui_peruser.btn_spc * (ui_peruser.is_lite_mode and 1 or 2), | ||||
| 		ui_peruser.page_buttons_y + 0.1 + ui_peruser.btn_spc * 2, | ||||
| 		F(S("Page")), S("@1 of @2",page2,pagemax)) | ||||
| end | ||||
|  | ||||
| 	if ui.activefilter[player_name] ~= "" then | ||||
| 		formspec[n] = string.format("label[%f,%f;%s:]", | ||||
| 			ui_peruser.page_x, ui_peruser.page_y - 0.65, F(S("Filter"))) | ||||
| 		formspec[n+1] = string.format("label[%f,%f;%s]", | ||||
| 			ui_peruser.page_x, ui_peruser.page_y - 0.25, F(ui.activefilter[player_name])) | ||||
| function ui.get_formspec(player, page) | ||||
|  | ||||
| 	if not player then | ||||
| 		return "" | ||||
| 	end | ||||
| 	return table.concat(formspec, "") | ||||
|  | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local ui_peruser = ui.get_per_player_formspec(player_name) | ||||
|  | ||||
| 	ui.current_page[player_name] = page | ||||
| 	local pagedef = ui.pages[page] | ||||
|  | ||||
| 	if not pagedef then | ||||
| 		return "" -- Invalid page name | ||||
| 	end | ||||
|  | ||||
| 	local fs = { | ||||
| 		"formspec_version[4]", | ||||
| 		"size["..ui_peruser.formw..","..ui_peruser.formh.."]", | ||||
| 		pagedef.formspec_prepend and "" or "no_prepend[]", | ||||
| 		ui.standard_background | ||||
| 	} | ||||
|  | ||||
| 	local perplayer_formspec = ui.get_per_player_formspec(player_name) | ||||
| 	local fsdata = pagedef.get_formspec(player, perplayer_formspec) | ||||
|  | ||||
| 	fs[#fs + 1] = fsdata.formspec | ||||
|  | ||||
| 	formspec_add_filters(player, fs, ui_peruser) | ||||
|  | ||||
| 	if fsdata.draw_inventory ~= false then | ||||
| 		-- Player inventory | ||||
| 		fs[#fs + 1] = "listcolors[#00000000;#00000000]" | ||||
| 		fs[#fs + 1] = ui_peruser.standard_inv | ||||
| 	end | ||||
|  | ||||
| 	if fsdata.draw_item_list == false then | ||||
| 		return table.concat(fs, "") | ||||
| 	end | ||||
|  | ||||
| 	formspec_add_categories(player, fs, ui_peruser) | ||||
| 	formspec_add_search_box(player, fs, ui_peruser) | ||||
| 	formspec_add_item_browser(player, fs, ui_peruser) | ||||
|  | ||||
| 	return table.concat(fs) | ||||
| end | ||||
|  | ||||
| function ui.set_inventory_formspec(player, page) | ||||
| @@ -228,6 +311,13 @@ function ui.set_inventory_formspec(player, page) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local function valid_def(def) | ||||
| 	return (not def.groups.not_in_creative_inventory | ||||
| 			or def.groups.not_in_creative_inventory == 0) | ||||
| 		and def.description | ||||
| 		and def.description ~= "" | ||||
| end | ||||
|  | ||||
| --apply filter to the inventory list (create filtered copy of full one) | ||||
| function ui.apply_filter(player, filter, search_dir) | ||||
| 	if not player then | ||||
| @@ -259,13 +349,30 @@ function ui.apply_filter(player, filter, search_dir) | ||||
| 		end | ||||
| 	end | ||||
| 	ui.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 ~= "" | ||||
| 		and ffilter(name, def) then | ||||
| 			table.insert(ui.filtered_items_list[player_name], name) | ||||
| 	local category = ui.current_category[player_name] or 'all' | ||||
| 	if category == 'all' then | ||||
| 		for name, def in pairs(minetest.registered_items) do | ||||
| 			if valid_def(def) | ||||
| 			and ffilter(name, def) then | ||||
| 				table.insert(ui.filtered_items_list[player_name], name) | ||||
| 			end | ||||
| 		end | ||||
| 	elseif category == 'uncategorized' then | ||||
| 		for name, def in pairs(minetest.registered_items) do | ||||
| 			if (not ui.find_category(name)) | ||||
| 			and valid_def(def) | ||||
| 			and ffilter(name, def) then | ||||
| 				table.insert(ui.filtered_items_list[player_name], name) | ||||
| 			end | ||||
| 		end | ||||
| 	else | ||||
| 		for name,exists in pairs(ui.registered_category_items[category]) do | ||||
| 			local def = minetest.registered_items[name] | ||||
| 			if exists and def | ||||
| 			and valid_def(def) | ||||
| 			and ffilter(name, def) then | ||||
| 				table.insert(ui.filtered_items_list[player_name], name) | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	table.sort(ui.filtered_items_list[player_name]) | ||||
| @@ -276,60 +383,3 @@ function ui.apply_filter(player, filter, search_dir) | ||||
| 	ui.set_inventory_formspec(player, | ||||
| 	ui.current_page[player_name]) | ||||
| end | ||||
|  | ||||
| function ui.items_in_group(groups) | ||||
| 	local items = {} | ||||
| 	for name, item in pairs(minetest.registered_items) do | ||||
| 		for _, group in pairs(groups:split(',')) do | ||||
| 			if item.groups[group] then | ||||
| 				table.insert(items, name) | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	return items | ||||
| end | ||||
|  | ||||
| function ui.sort_inventory(inv) | ||||
| 	local inlist = inv:get_list("main") | ||||
| 	local typecnt = {} | ||||
| 	local typekeys = {} | ||||
| 	for _, st in ipairs(inlist) do | ||||
| 		if not st:is_empty() then | ||||
| 			local n = st:get_name() | ||||
| 			local w = st:get_wear() | ||||
| 			local m = st:get_metadata() | ||||
| 			local k = string.format("%s %05d %s", n, w, m) | ||||
| 			if not typecnt[k] then | ||||
| 				typecnt[k] = { | ||||
| 					name = n, | ||||
| 					wear = w, | ||||
| 					metadata = m, | ||||
| 					stack_max = st:get_stack_max(), | ||||
| 					count = 0, | ||||
| 				} | ||||
| 				table.insert(typekeys, k) | ||||
| 			end | ||||
| 			typecnt[k].count = typecnt[k].count + st:get_count() | ||||
| 		end | ||||
| 	end | ||||
| 	table.sort(typekeys) | ||||
| 	local outlist = {} | ||||
| 	for _, k in ipairs(typekeys) do | ||||
| 		local tc = typecnt[k] | ||||
| 		while tc.count > 0 do | ||||
| 			local c = math.min(tc.count, tc.stack_max) | ||||
| 			table.insert(outlist, ItemStack({ | ||||
| 				name = tc.name, | ||||
| 				wear = tc.wear, | ||||
| 				metadata = tc.metadata, | ||||
| 				count = c, | ||||
| 			})) | ||||
| 			tc.count = tc.count - c | ||||
| 		end | ||||
| 	end | ||||
| 	if #outlist > #inlist then return end | ||||
| 	while #outlist < #inlist do | ||||
| 		table.insert(outlist, ItemStack(nil)) | ||||
| 	end | ||||
| 	inv:set_list("main", outlist) | ||||
| end | ||||
|   | ||||
| @@ -1,54 +1,52 @@ | ||||
| # textdomain: unified_inventory | ||||
| 
 | ||||
| # waypoints.lua | ||||
| 
 | ||||
| White= | ||||
| Yellow= | ||||
| Red= | ||||
| Green= | ||||
| Blue= | ||||
| Waypoints= | ||||
| Select Waypoint #@1= | ||||
| Waypoint @1= | ||||
| Set waypoint to current location= | ||||
| Make waypoint @1= | ||||
| invisible= | ||||
| visible= | ||||
| @1 display of waypoint coordinates= | ||||
| Disable= | ||||
| Enable= | ||||
| Change color of waypoint display= | ||||
| Edit waypoint name= | ||||
| Waypoint active= | ||||
| Waypoint inactive= | ||||
| Finish editing= | ||||
| World position= | ||||
| Name= | ||||
| HUD text color= | ||||
| 
 | ||||
| # group.lua | ||||
| 
 | ||||
| Mixing= | ||||
| Cooking= | ||||
| Digging= | ||||
| Bags= | ||||
| Bag @1= | ||||
| Small Bag= | ||||
| Medium Bag= | ||||
| Large Bag= | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = | ||||
| 
 | ||||
| # register.lua | ||||
| 
 | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search= | ||||
| Reset search and display everything= | ||||
| First page= | ||||
| Back three pages= | ||||
| Back one page= | ||||
| Forward one page= | ||||
| Forward three pages= | ||||
| Last page= | ||||
| No matching items= | ||||
| No matches.= | ||||
| Page= | ||||
| @1 of @2= | ||||
| Filter= | ||||
| Can use the creative inventory= | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= | ||||
| Crafting Grid= | ||||
| Crafting Guide= | ||||
| Set home position= | ||||
| Home position set to: @1= | ||||
| You don't have the \"home\" privilege!= | ||||
| You don't have the "home" privilege!= | ||||
| Go home= | ||||
| Set time to day= | ||||
| Set time to night= | ||||
| Time of day set to 6am= | ||||
| Time of day set to 9pm= | ||||
| You don't have the settime privilege!= | ||||
| Set time to night= | ||||
| Time of day set to 9pm= | ||||
| Clear inventory= | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!= | ||||
| This button has been disabled outside= | ||||
| Crafting= | ||||
| Trash:= | ||||
| Refill:= | ||||
| Any item belonging to the @1 group= | ||||
| @@ -65,36 +63,28 @@ Show previous recipe= | ||||
| Show previous usage= | ||||
| @1 (@2)= | ||||
| Give me:= | ||||
| This recipe is too@nlarge to be displayed.= | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:= | ||||
| All= | ||||
| 
 | ||||
| # api.lua | ||||
| 
 | ||||
| Mixing= | ||||
| Cooking= | ||||
| Digging= | ||||
| 
 | ||||
| # internal.lua | ||||
| 
 | ||||
| First page= | ||||
| Back three pages= | ||||
| Back one page= | ||||
| Forward one page= | ||||
| Forward three pages= | ||||
| Last page= | ||||
| Search= | ||||
| Reset search and display everything= | ||||
| No matching items= | ||||
| No matches.= | ||||
| Page= | ||||
| @1 of @2= | ||||
| Filter= | ||||
| 
 | ||||
| # bags.lua | ||||
| 
 | ||||
| Bags= | ||||
| Bag @1= | ||||
| Small Bag= | ||||
| Medium Bag= | ||||
| Large Bag= | ||||
| Crafting= | ||||
| White= | ||||
| Yellow= | ||||
| Red= | ||||
| Green= | ||||
| Blue= | ||||
| Waypoints= | ||||
| Select Waypoint #@1= | ||||
| Waypoint @1= | ||||
| Set waypoint to current location= | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display= | ||||
| Edit waypoint name= | ||||
| Waypoint active= | ||||
| Waypoint inactive= | ||||
| Finish editing= | ||||
| World position= | ||||
| Name= | ||||
| HUD text color= | ||||
| @@ -1,5 +1,4 @@ | ||||
| # textdomain: unified_inventory | ||||
| Crafting=Fertigung | ||||
| Mixing=Mischen | ||||
| Cooking=Kochen | ||||
| Digging=Graben | ||||
| @@ -8,21 +7,32 @@ Bag @1=Tasche @1 | ||||
| Small Bag=Kleine Tasche | ||||
| Medium Bag=Mittelgroße Tasche | ||||
| Large Bag=Große Tasche | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = und  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=Suchen | ||||
| Reset search and display everything=Suche zurücksetzen und alles anzeigen | ||||
| First page=Erste Seite | ||||
| Back three pages=3 Seiten zurückblättern | ||||
| Back one page=1 Seite zurückblättern | ||||
| Forward one page=1 Seite vorblättern | ||||
| Forward three pages=3 Seiten vorblättern | ||||
| Last page=Letzte Seite | ||||
| Search=Suchen | ||||
| Reset search and display everything=Suche zurücksetzen und alles anzeigen | ||||
| No matching items=Keine passenden Gegenstände | ||||
| No matches.=Keine Treffer | ||||
| Page=Seite | ||||
| @1 of @2=@1 von @2 | ||||
| Filter=Filter | ||||
| Can use the creative inventory=Kann das Kreativinventar nutzen | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally=Zwingt Unified Inventory, im Vollmodus angezeigt zu werden, wenn der Minimalmodus global eingestellt ist | ||||
| Crafting Grid=Fertigungsraster | ||||
| Crafting Guide=Fertigungsführer | ||||
| Set home position=Heimatposition setzen | ||||
| @@ -35,6 +45,7 @@ You don't have the settime privilege!=Du hast das „settime“-Privileg nicht! | ||||
| Set time to night=Zur Nachtzeit wechseln | ||||
| Time of day set to 9pm=Tageszeit auf 21 Uhr gesetzt | ||||
| Clear inventory=Inventar leeren | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=Inventar geleert! | ||||
| Trash:=Müll: | ||||
| Refill:=Nachfüllen: | ||||
| @@ -50,9 +61,12 @@ Show next recipe=Nächstes Rezept zeigen | ||||
| Show next usage=Nächste Verwendung zeigen | ||||
| Show previous recipe=Vorheriges Rezept zeigen | ||||
| Show previous usage=Vorherige Verwendung zeigen | ||||
| @1 (@2)= | ||||
| Give me:=Gib mir: | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:=Ins Fertigungsraster: | ||||
| All=Alles | ||||
| Crafting=Fertigung | ||||
| White=Weiß | ||||
| Yellow=Gelb | ||||
| Red=Rot | ||||
| @@ -62,12 +76,10 @@ Waypoints=Wegpunkte | ||||
| Select Waypoint #@1=Wegpunkt Nr. @1 auswählen | ||||
| Waypoint @1=Wegpunkt Nr. @1 | ||||
| Set waypoint to current location=Setze Wegpunkt zur derzeitigen Position | ||||
| invisible=unsichtbar | ||||
| visible=sichtbar | ||||
| Make waypoint @1=Wegpunkt @1 machen | ||||
| Disable=ausschalten | ||||
| Enable=einschalten | ||||
| @1 display of waypoint coordinates=Anzeige der Wegpunktkoordinaten @1 | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=Farbe der Darstellung der Wegpunkte ändern | ||||
| Edit waypoint name=Name des Wegpunkts ändern | ||||
| Waypoint active=Wegpunkt aktiv | ||||
| @@ -76,4 +88,13 @@ Finish editing=Bearbeitung abschließen | ||||
| World position=Weltposition | ||||
| Name=Name | ||||
| HUD text color=HUD-Textfarbe | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally=Zwingt Unified Inventory, im Vollmodus angezeigt zu werden, wenn der Minimalmodus global eingestellt ist | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| invisible=unsichtbar | ||||
| visible=sichtbar | ||||
| Make waypoint @1=Wegpunkt @1 machen | ||||
| Disable=ausschalten | ||||
| Enable=einschalten | ||||
| @1 display of waypoint coordinates=Anzeige der Wegpunktkoordinaten @1 | ||||
|   | ||||
| @@ -1,54 +1,57 @@ | ||||
| # textdomain: unified_inventory | ||||
|  | ||||
| # waypoints.lua | ||||
|  | ||||
| White=Blanco | ||||
| Yellow=Amarillo | ||||
| Red=Rojo | ||||
| Green=Verde | ||||
| Blue=Azul | ||||
| Waypoints=Puntos | ||||
| Select Waypoint #@1=Seleccionar Punto #@1 | ||||
| Waypoint @1=Punto @1 | ||||
| Set waypoint to current location=Establecer el punto a la ubicación actual | ||||
| Make waypoint @1=Hacer punto @1 | ||||
| invisible=invisible | ||||
| visible=visible | ||||
| @1 display of waypoint coordinates=Visualizar coordenadas del punto @1 | ||||
| Disable=Deshabilitado | ||||
| Enable=Habilitado | ||||
| Change color of waypoint display=Cambiar el color del punto | ||||
| Edit waypoint name=Editar nombre del punto | ||||
| Waypoint active=Punto activo | ||||
| Waypoint inactive=Punto inactivo | ||||
| Finish editing=Terminar edición | ||||
| World position=Posición en el mundo | ||||
| Name=Nombre | ||||
| HUD text color=Color del texto de la Interfaz | ||||
|  | ||||
| # api.lua | ||||
| Mixing=Mezclar | ||||
| Cooking=Hornear | ||||
| Digging=Recoger | ||||
| # bags.lua | ||||
| Bags=Bolsos | ||||
| Bag @1=Bolso @1 | ||||
| Small Bag=Bolso Pequeño | ||||
| Medium Bag=Bolso Mediano | ||||
| Large Bag=Bolso Grande | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
| # group.lua | ||||
|  | ||||
|  and = y | ||||
|  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=Buscar | ||||
| Reset search and display everything=Limpiar la busqueda y mostrar todo | ||||
| # internal.lua | ||||
| First page=Primera página | ||||
| Back three pages=Volver tres páginas | ||||
| Back one page=Volver una página | ||||
| Forward one page=Avanzar una página | ||||
| Forward three pages=Avanzar tres páginas | ||||
| Last page=Ultima Pagina | ||||
| No matching items=No se encontraron elementos | ||||
| No matches.=No hay resultados. | ||||
| Page=Página | ||||
| @1 of @2=@1 de @2 | ||||
| Filter=Filtro | ||||
| # register.lua | ||||
|  | ||||
| Can use the creative inventory=Puede usar el inventario creativo | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally=Obliga al Inventario Unificado a mostrarse en modo Completo si el modo Simple está configurado globalmente | ||||
| Crafting Grid=Cuadricula de Elaboración | ||||
| Crafting Guide=Guía de Elaboración | ||||
| Set home position=Establecer posición de la casa | ||||
| Home position set to: @1=Posición de la casa cambiada a: @1 | ||||
| You don't have the \"home\" privilege!=¡No tienes el privilegio \"home\"! | ||||
| You don't have the "home" privilege!= | ||||
| Go home=Ir a casa | ||||
| Set time to day=Cambiar a dia | ||||
| Set time to night=Cambiar a noche | ||||
| Time of day set to 6am=Hora del día cambiada a 6 AM | ||||
| Time of day set to 9pm=Hora del día cambiada a 9 PM | ||||
| You don't have the settime privilege!=¡No tienes el privilegio "settime"! | ||||
| Set time to night=Cambiar a noche | ||||
| Time of day set to 9pm=Hora del día cambiada a 9 PM | ||||
| Clear inventory=Limpiar inventario | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=¡Inventario limpio! | ||||
| This button has been disabled outside=Este botón ha sido deshabilitado | ||||
| Crafting=Elaboración | ||||
| Trash:=Basura: | ||||
| Refill:=Rellenar: | ||||
| Any item belonging to the @1 group=Cualquier elemento que pertenezca al grupo @1 | ||||
| @@ -65,36 +68,41 @@ Show previous recipe=Mostrar la receta anterior | ||||
| Show previous usage=Mostrar el uso anterior | ||||
| @1 (@2)=@1 (@2) | ||||
| Give me:=Dame: | ||||
| This recipe is too@nlarge to be displayed.=Esta receta es demasiado@ngrande para ser mostrada. | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:=Construir: | ||||
| All=Todos | ||||
| Crafting=Elaboración | ||||
| White=Blanco | ||||
| Yellow=Amarillo | ||||
| Red=Rojo | ||||
| Green=Verde | ||||
| Blue=Azul | ||||
| Waypoints=Puntos | ||||
| Select Waypoint #@1=Seleccionar Punto #@1 | ||||
| Waypoint @1=Punto @1 | ||||
| Set waypoint to current location=Establecer el punto a la ubicación actual | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=Cambiar el color del punto | ||||
| Edit waypoint name=Editar nombre del punto | ||||
| Waypoint active=Punto activo | ||||
| Waypoint inactive=Punto inactivo | ||||
| Finish editing=Terminar edición | ||||
| World position=Posición en el mundo | ||||
| Name=Nombre | ||||
| HUD text color=Color del texto de la Interfaz | ||||
|  | ||||
| # api.lua | ||||
|  | ||||
| Mixing=Mezclar | ||||
| Cooking=Hornear | ||||
| Digging=Recoger | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| # internal.lua | ||||
|  | ||||
| First page=Primera página | ||||
| Back three pages=Volver tres páginas | ||||
| Back one page=Volver una página | ||||
| Forward one page=Avanzar una página | ||||
| Forward three pages=Avanzar tres páginas | ||||
| Last page=Ultima Pagina | ||||
| Search=Buscar | ||||
| Reset search and display everything=Limpiar la busqueda y mostrar todo | ||||
| No matching items=No se encontraron elementos | ||||
| No matches.=No hay resultados. | ||||
| Page=Página | ||||
| @1 of @2=@1 de @2 | ||||
| Filter=Filtro | ||||
|  | ||||
| # bags.lua | ||||
|  | ||||
| Bags=Bolsos | ||||
| Bag @1=Bolso @1 | ||||
| Small Bag=Bolso Pequeño | ||||
| Medium Bag=Bolso Mediano | ||||
| Large Bag=Bolso Grande | ||||
| Make waypoint @1=Hacer punto @1 | ||||
| invisible=invisible | ||||
| visible=visible | ||||
| @1 display of waypoint coordinates=Visualizar coordenadas del punto @1 | ||||
| Disable=Deshabilitado | ||||
| Enable=Habilitado | ||||
| You don't have the \"home\" privilege!=¡No tienes el privilegio \"home\"! | ||||
| This button has been disabled outside=Este botón ha sido deshabilitado | ||||
| This recipe is too@nlarge to be displayed.=Esta receta es demasiado@ngrande para ser mostrada. | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| # textdomain: unified_inventory | ||||
| Crafting=Création | ||||
| Mixing= | ||||
| Cooking=Cuisson | ||||
| Digging=Creuser | ||||
| Bags=Sacs | ||||
| @@ -7,35 +7,66 @@ Bag @1=Sac @1 | ||||
| Small Bag=Petit sac | ||||
| Medium Bag=Sac moyen | ||||
| Large Bag=Grand sac | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = et  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=Rechercher | ||||
| Reset search and display everything= | ||||
| First page=1ère page | ||||
| Back three pages=3 pages en arrière | ||||
| Back one page=Page précédente | ||||
| Forward one page=Page suivante | ||||
| Forward three pages=3 pages en avant | ||||
| Last page=Dernière page | ||||
| Search=Rechercher | ||||
| No matching items=Aucun élément correspondant | ||||
| No matches.=Aucun match | ||||
| Page=Page | ||||
| @1 of @2=@1 de @2 | ||||
| Filter=Filtre | ||||
| Can use the creative inventory=Vous pouvez utiliser l'inventaire créatif | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= | ||||
| Crafting Grid=Grille de création | ||||
| Crafting Guide=Guide de création | ||||
| Set home position=Position dans le monde | ||||
| Home position set to: @1=Position de votre base fixée à: @1 | ||||
| You don't have the "home" privilege!=Vous n'avez pas le privilège "home"! | ||||
| Go home= | ||||
| Set time to day= | ||||
| Time of day set to 6am=Heure fixée à 6h | ||||
| You don't have the settime privilege!=Vous n'avez pas le privilège "settime"! | ||||
| Set time to night= | ||||
| Time of day set to 9pm=Heure fixée à 21h | ||||
| Clear inventory= | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=Inventaire vidé ! | ||||
| Trash:=Poubelle : | ||||
| Refill:=Remplir : | ||||
| Any item belonging to the @1 group= | ||||
| Any item belonging to the groups @1= | ||||
| Recipe @1 of @2=Recette @1 de @2 | ||||
| Usage @1 of @2= | ||||
| No recipes= | ||||
| No usages= | ||||
| Result=Résultat | ||||
| Ingredient= | ||||
| Show next recipe= | ||||
| Show next usage= | ||||
| Show previous recipe= | ||||
| Show previous usage= | ||||
| @1 (@2)= | ||||
| Give me:= | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:=Sur de création: | ||||
| All=Tout | ||||
| Crafting=Création | ||||
| White=Blanc | ||||
| Yellow=Jaune | ||||
| Red=Rouge | ||||
| @@ -45,8 +76,10 @@ Waypoints=Point de passage | ||||
| Select Waypoint #@1=Choisir un point de passage #@1 | ||||
| Waypoint @1=Point de passage @1 | ||||
| Set waypoint to current location=Marquer un point de passage à la position actuelle | ||||
| Make waypoint @1=Rendre @1 le point de passage | ||||
| @1 display of waypoint coordinates=@1 montrer les coordonnées des points de passages | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=Changer la couleur du point de passage | ||||
| Edit waypoint name=Editer le nom du point de passage | ||||
| Waypoint active=Point de passage actif | ||||
| @@ -55,3 +88,9 @@ Finish editing=Terminer l'édition | ||||
| World position=Position dans le monde | ||||
| Name=Nom | ||||
| HUD text color=Couleur de texte du HUD | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| Make waypoint @1=Rendre @1 le point de passage | ||||
| @1 display of waypoint coordinates=@1 montrer les coordonnées des points de passages | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| # textdomain: unified_inventory | ||||
| Crafting=Assemblaggio | ||||
| Mixing=Unione | ||||
| Cooking=Cottura | ||||
| Digging=Scavo | ||||
| @@ -8,21 +7,32 @@ Bag @1=Borsa @1 | ||||
| Small Bag=Borsa piccola | ||||
| Medium Bag=Borsa media | ||||
| Large Bag=Borsa grande | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = e  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=Cerca | ||||
| Reset search and display everything=Azzera la ricerca e mostra tutto | ||||
| First page=Prima pagina | ||||
| Back three pages=Indietro di tre pagine | ||||
| Back one page=Indietro di una pagina | ||||
| Forward one page=Avanti di una pagina | ||||
| Forward three pages=Avanti di tre pagine | ||||
| Last page=Ultima pagina | ||||
| Search=Cerca | ||||
| Reset search and display everything=Azzera la ricerca e mostra tutto | ||||
| No matching items=Nessun oggetto corrispondente | ||||
| No matches.=Nessuna corrispondenza. | ||||
| Page=Pagina | ||||
| @1 of @2=@1 di @2 | ||||
| Filter=Filtro | ||||
| Can use the creative inventory=Può usare l'inventario creativo | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally=Forza la visualizzazione di Unified Inventory in modalità completa se è configurata globalmente la visualizzazione semplice | ||||
| Crafting Grid=Griglia di assemblaggio | ||||
| Crafting Guide=Guida di assemblaggio | ||||
| Set home position=Imposta la residenza | ||||
| @@ -35,6 +45,7 @@ You don't have the settime privilege!=Non hai il privilegio "time"! | ||||
| Set time to night=Imposta l'orario sulla notte | ||||
| Time of day set to 9pm=Orario impostato sulle 9am | ||||
| Clear inventory=Ripulisci l'inventario | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=Inventario ripulito! | ||||
| Trash:=Butta: | ||||
| Refill:=Riempi: | ||||
| @@ -50,9 +61,12 @@ Show next recipe=Mostra la prossima ricetta | ||||
| Show next usage=Mostra il prossimo utilizzo | ||||
| Show previous recipe=Mostra la ricetta precedente | ||||
| Show previous usage=Mostra l'utilizzo precedente | ||||
| @1 (@2)= | ||||
| Give me:=Dammi: | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:=Alla griglia di assemblaggio: | ||||
| All=Tutto | ||||
| Crafting=Assemblaggio | ||||
| White=Bianco | ||||
| Yellow=Giallo | ||||
| Red=Rosso | ||||
| @@ -62,12 +76,10 @@ Waypoints=Tappe | ||||
| Select Waypoint #@1=Seleziona tappa n°@1 | ||||
| Waypoint @1=Tappa @1 | ||||
| Set waypoint to current location=Imposta tappa alla posizione attuale | ||||
| invisible=invisibile | ||||
| visible=visibile | ||||
| Make waypoint @1=Crea tappa @1 | ||||
| Disable=Disabilita | ||||
| Enable=Abilita | ||||
| @1 display of waypoint coordinates=@1 la visualizzazione delle coordinate della tappa | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=Modifica il colore della visualizzazione della tappa | ||||
| Edit waypoint name=Modifica il nome della tappa | ||||
| Waypoint active=Tappa attiva | ||||
| @@ -76,4 +88,13 @@ Finish editing=Termina la modifica | ||||
| World position=Posizione del mondo | ||||
| Name=Nome | ||||
| HUD text color=Colore del testo del visore | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally=Forza la visualizzazione di Unified Inventory in modalità completa se è configurata globalmente la visualizzazione semplice | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| invisible=invisibile | ||||
| visible=visibile | ||||
| Make waypoint @1=Crea tappa @1 | ||||
| Disable=Disabilita | ||||
| Enable=Abilita | ||||
| @1 display of waypoint coordinates=@1 la visualizzazione delle coordinate della tappa | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| # textdomain: unified_inventory | ||||
| Crafting=Pertukangan | ||||
| Mixing=Pencampuran | ||||
| Cooking=Pemasakan | ||||
| Digging=Penggalian | ||||
| @@ -8,21 +7,32 @@ Bag @1=Beg @1 | ||||
| Small Bag=Beg Kecil | ||||
| Medium Bag=Beg Sederhana | ||||
| Large Bag=Beg Besar | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = dan  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=Cari | ||||
| Reset search and display everything=Set semula carian dan tunjukkan semua benda | ||||
| First page=Halaman pertama | ||||
| Back three pages=Tiga halaman sebelumnya | ||||
| Back one page=Halaman sebelumnya | ||||
| Forward one page=Halaman seterusnya | ||||
| Forward three pages=Tiga halaman seterusnya | ||||
| Last page=Halaman terakhir | ||||
| Search=Cari | ||||
| Reset search and display everything=Set semula carian dan tunjukkan semua benda | ||||
| No matching items=Tiada item sepadan | ||||
| No matches.=Tiada padanan. | ||||
| Page=Halaman | ||||
| @1 of @2=@1 drpd @2 | ||||
| Filter=Tapis | ||||
| Can use the creative inventory=Boleh guna inventori kreatif | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= | ||||
| Crafting Grid=Grid Pertukangan | ||||
| Crafting Guide=Panduan Pertukangan | ||||
| Set home position=Tetapkan kedudukan rumah | ||||
| @@ -35,6 +45,7 @@ You don't have the settime privilege!=Anda tidak ada keistimewaan settime! | ||||
| Set time to night=Tetapkan masa jadi malam | ||||
| Time of day set to 9pm=Masa ditetapkan ke 9 malam | ||||
| Clear inventory=Kosongkan inventori | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=Inventori dikosongkan! | ||||
| Trash:=Buang: | ||||
| Refill:=Isi balik: | ||||
| @@ -52,7 +63,10 @@ Show previous recipe=Tunjuk resipi sebelumnya | ||||
| Show previous usage=Tunjuk kegunaan sebelumnya | ||||
| @1 (@2)=@1 (@2) | ||||
| Give me:=Beri saya: | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:=Ke grid pertukangan: | ||||
| All= | ||||
| Crafting=Pertukangan | ||||
| White=Putih | ||||
| Yellow=Kuning | ||||
| Red=Merah | ||||
| @@ -62,12 +76,10 @@ Waypoints=Titik Arah | ||||
| Select Waypoint #@1=Pilih Titik Arah #@1 | ||||
| Waypoint @1=Titik Arah @1 | ||||
| Set waypoint to current location=Tetapkan titik arah ke lokasi semasa | ||||
| invisible=Sembunyikan | ||||
| visible=Paparkan | ||||
| Make waypoint @1=@1 titik arah | ||||
| Disable=Sembunyikan | ||||
| Enable=Paparkan | ||||
| @1 display of waypoint coordinates=@1 koordinat untuk titik arah | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=Tukar warna paparan titik arah | ||||
| Edit waypoint name=Edit nama titik arah | ||||
| Waypoint active=Titik arah aktif | ||||
| @@ -76,3 +88,13 @@ Finish editing=Selesai edit | ||||
| World position=Kedudukan dunia | ||||
| Name=Nama | ||||
| HUD text color=Warna tulisan HUD | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| invisible=Sembunyikan | ||||
| visible=Paparkan | ||||
| Make waypoint @1=@1 titik arah | ||||
| Disable=Sembunyikan | ||||
| Enable=Paparkan | ||||
| @1 display of waypoint coordinates=@1 koordinat untuk titik arah | ||||
|   | ||||
| @@ -1,22 +1,40 @@ | ||||
| # textdomain: unified_inventory | ||||
| Mixing= | ||||
| Cooking= | ||||
| Digging= | ||||
| Bags=Plecaki | ||||
| Bag @1=Plecak @1 | ||||
| Small Bag=Maly plecak | ||||
| Medium Bag=Sredni plecak | ||||
| Large Bag=Duzy plecak | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = i  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=Szukaj | ||||
| Reset search and display everything= | ||||
| First page=Pierwsza strona | ||||
| Back three pages=3 strony w tyl | ||||
| Back one page=1 strona w tyl | ||||
| Forward one page=1 strona do przodu | ||||
| Forward three pages=3 strony do przodu | ||||
| Last page=Ostatnia strona | ||||
| Search=Szukaj | ||||
| No matching items=Brak pasujacych przedmiotow | ||||
| No matches.=Brak wyników | ||||
| Page=Strona | ||||
| @1 of @2=@1 z @2 | ||||
| Filter=Filtr | ||||
| Can use the creative inventory= | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= | ||||
| Crafting Grid= | ||||
| Crafting Guide= | ||||
| Set home position=Ustaw pozycję wyjściową | ||||
| Home position set to: @1=Pozycja domowa ustawiona na: @1 | ||||
| You don't have the "home" privilege!=Nie masz uprawnien do zmiany czasu "home"! | ||||
| @@ -27,17 +45,28 @@ You don't have the settime privilege!=Nie masz uprawnien do zmiany czasu "settim | ||||
| Set time to night=Ustaw czas na noc | ||||
| Time of day set to 9pm=Czas ustawiony na 21:00 | ||||
| Clear inventory=Wyczyść zapasy | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=Zapasy zostały wyczyszczone! | ||||
| Trash:=Smietnik: | ||||
| Refill:=Uzupelnianie: | ||||
| Any item belonging to the @1 group= | ||||
| Any item belonging to the groups @1= | ||||
| Recipe @1 of @2=Recepta @1 z @2 | ||||
| Usage @1 of @2=Użycie @1 z @2 | ||||
| No recipes=Brak recepty | ||||
| No usages=Bez użycia | ||||
| Result=Wynik | ||||
| Ingredient=Składnik | ||||
| Show next recipe= | ||||
| Show next usage= | ||||
| Show previous recipe= | ||||
| Show previous usage= | ||||
| @1 (@2)= | ||||
| Give me:=Daj mi: | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:= | ||||
| All=Wszystko | ||||
| Crafting= | ||||
| White=Bialy | ||||
| Yellow=Zolty | ||||
| Red=Czerwony | ||||
| @@ -47,10 +76,10 @@ Waypoints=Punkty orientacyjne | ||||
| Select Waypoint #@1=Wybierz punkt #@1 | ||||
| Waypoint @1=Punkty orientacyjne @1 | ||||
| Set waypoint to current location=Ustaw punkt orientacyjny na biezacej pozycji | ||||
| invisible=niewidzialny | ||||
| visible=widomy | ||||
| Make waypoint @1=Robić punkt @1 | ||||
| @1 display of waypoint coordinates=@1 koordynatow punktu | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=Zmien kolor punktu | ||||
| Edit waypoint name=Edytuj nazwe punktu | ||||
| Waypoint active=Punkt wlaczony | ||||
| @@ -59,3 +88,11 @@ Finish editing=Zakoncz edycje | ||||
| World position=Pozycja | ||||
| Name=Nazwa | ||||
| HUD text color=Kolor tekstu HUD | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| invisible=niewidzialny | ||||
| visible=widomy | ||||
| Make waypoint @1=Robić punkt @1 | ||||
| @1 display of waypoint coordinates=@1 koordynatow punktu | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| # textdomain: unified_inventory | ||||
| Crafting=Artesanato | ||||
| Mixing=Muistura | ||||
| Cooking=Cozimento | ||||
| Digging=Escavação | ||||
| @@ -8,21 +7,32 @@ Bag @1=Bolsa @1 | ||||
| Small Bag=Bolsa Pequena | ||||
| Medium Bag=Bolsa Média | ||||
| Large Bag=Bolsa Grande | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = e  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=Pesquisar | ||||
| Reset search and display everything=Redefinir pesquisa e exibir tudo | ||||
| First page=Primeira Página | ||||
| Back three pages=Voltar 3 Páginas | ||||
| Back one page=Voltar 1 Página | ||||
| Forward one page=Avançar 1 Página | ||||
| Forward three pages=Avançar 3 Páginas | ||||
| Last page=Ultima Página | ||||
| Search=Pesquisar | ||||
| Reset search and display everything=Redefinir pesquisa e exibir tudo | ||||
| No matching items=Nenhum item correspondente | ||||
| No matches.=Sem correspondências | ||||
| Page=Página | ||||
| @1 of @2=@1 de @2 | ||||
| Filter=Filtro | ||||
| Can use the creative inventory=Pode usar o inventário do criativo | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= | ||||
| Crafting Grid=Grade de Artesanato | ||||
| Crafting Guide=Guia de Artesanato | ||||
| Set home position=Definir posição de casa | ||||
| @@ -35,6 +45,7 @@ You don't have the settime privilege!=Você não tem o privilégio de "settime"! | ||||
| Set time to night=Definir turno para noite | ||||
| Time of day set to 9pm=Hora do dia ajustada para 21h | ||||
| Clear inventory=Limpar Inventário | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=Inventário Apagado! | ||||
| Trash:=Lixo: | ||||
| Refill:=Recarga: | ||||
| @@ -50,9 +61,12 @@ Show next recipe=Exibir Próxima Receita | ||||
| Show next usage=Mostrar Próxima Utilização | ||||
| Show previous recipe=Exibir Receita Anterior | ||||
| Show previous usage=Exibir Utilização Anterior | ||||
| @1 (@2)= | ||||
| Give me:=Gerado: | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:=Para Grade de Artesanato | ||||
| All=MAX | ||||
| Crafting=Artesanato | ||||
| White=Branco | ||||
| Yellow=Amarelo | ||||
| Red=Vermelho | ||||
| @@ -62,10 +76,10 @@ Waypoints=Apontador de Direção | ||||
| Select Waypoint #@1=Seleção de Apontador de Direção #@1 | ||||
| Waypoint @1=Apontador de Direção @1 | ||||
| Set waypoint to current location=Configurar localização atual do Apontador de Direção | ||||
| invisible=invisível | ||||
| visible=visível | ||||
| Make waypoint @1=Fazer Apontador de Direção @1 | ||||
| @1 display of waypoint coordinates=@1 exibição de coordenadas de Fazer Apontador de Direção | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=Mudar cor exibida do Apontador de Direção | ||||
| Edit waypoint name=Editar Nome de Apontador de Direção | ||||
| Waypoint active=Apontador de Direção Ativo | ||||
| @@ -74,3 +88,11 @@ Finish editing=Edição Finalizada | ||||
| World position=Posição Mundial | ||||
| Name=Nome | ||||
| HUD text color=Cor de HUD | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| invisible=invisível | ||||
| visible=visível | ||||
| Make waypoint @1=Fazer Apontador de Direção @1 | ||||
| @1 display of waypoint coordinates=@1 exibição de coordenadas de Fazer Apontador de Direção | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| # textdomain: unified_inventory | ||||
| Crafting=Крафт | ||||
| Mixing=Мешать | ||||
| Cooking=Варить | ||||
| Digging=Копать | ||||
| @@ -8,21 +7,32 @@ Bag @1=Сумка @1 | ||||
| Small Bag=Малая сумка | ||||
| Medium Bag=Средняя сумка | ||||
| Large Bag=Большая сумка | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = и  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=Поиск | ||||
| Reset search and display everything=Сброс поиска, показать всё | ||||
| First page=Первая страница | ||||
| Back three pages=3 страницы назад | ||||
| Back one page=1 страницу назад | ||||
| Forward one page=1 страницу вперёд | ||||
| Forward three pages=3 страницы вперёд | ||||
| Last page=Последняя страница | ||||
| Search=Поиск | ||||
| Reset search and display everything=Сброс поиска, показать всё | ||||
| No matching items=Нет подходящих элементов | ||||
| No matches.=Ничего не найдено | ||||
| Page=Страница | ||||
| @1 of @2=@1 из @2 | ||||
| Filter=Фильтр | ||||
| Can use the creative inventory=Можно использовать инвентарь творческого режима | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= | ||||
| Crafting Grid=Решетка крафта | ||||
| Crafting Guide=Книга рецептов | ||||
| Set home position=Установить позицию дома | ||||
| @@ -35,6 +45,7 @@ You don't have the settime privilege!=Вам не разрешено устан | ||||
| Set time to night=Ночь | ||||
| Time of day set to 9pm=Установлено время 9 вечера | ||||
| Clear inventory=Очистить инвентарь | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=Инвентарь очищен! | ||||
| Trash:=Мусор: | ||||
| Refill:=Наполнить: | ||||
| @@ -50,9 +61,12 @@ Show next recipe=Следующий рецепт | ||||
| Show next usage=Следующее использование | ||||
| Show previous recipe=Прошлый рецепт | ||||
| Show previous usage=Прошлая страница | ||||
| @1 (@2)= | ||||
| Give me:=Дай мне: | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:=На решeтку крафта: | ||||
| All=Все | ||||
| Crafting=Крафт | ||||
| White=Белый | ||||
| Yellow=Желтый | ||||
| Red=Красный | ||||
| @@ -62,12 +76,10 @@ Waypoints=Путевые точки | ||||
| Select Waypoint #@1=Выбрать путевую точку №@1 | ||||
| Waypoint @1=Путевая точка @1 | ||||
| Set waypoint to current location=Установить путевую точку по текущей позиции | ||||
| invisible=невидимой | ||||
| visible=видимой | ||||
| Make waypoint @1=Сделать путевую точку @1 | ||||
| Disable=Выключить | ||||
| Enable=Включить | ||||
| @1 display of waypoint coordinates=@1 показ координат путевых точек | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=Поменять цвет путевой точки | ||||
| Edit waypoint name=Переименовать путевую точку | ||||
| Waypoint active=Путевая точка включена | ||||
| @@ -76,3 +88,13 @@ Finish editing=Закончить редакцию | ||||
| World position=Позиция мира | ||||
| Name=Имя | ||||
| HUD text color=Цвет текста HUDа | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| invisible=невидимой | ||||
| visible=видимой | ||||
| Make waypoint @1=Сделать путевую точку @1 | ||||
| Disable=Выключить | ||||
| Enable=Включить | ||||
| @1 display of waypoint coordinates=@1 показ координат путевых точек | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| # textdomain: unified_inventory | ||||
| Crafting=Üretim | ||||
| Mixing=Karıştırma | ||||
| Cooking=Pişirme | ||||
| Digging=Kazma | ||||
| @@ -8,20 +7,32 @@ Bag @1=@1. Çanta | ||||
| Small Bag=Küçük Çanta | ||||
| Medium Bag=Çanta | ||||
| Large Bag=Büyük Çanta | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = ve  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=Ara | ||||
| Reset search and display everything= | ||||
| First page=İlk Sayfa | ||||
| Back three pages=3 Sayfa Gerile | ||||
| Back one page=Geri | ||||
| Forward one page=İleri | ||||
| Forward three pages=3 Sayfa İlerile | ||||
| Last page=Son Sayfa | ||||
| Search=Ara | ||||
| No matching items=Eşleşme yok | ||||
| No matches.=Eşleşme yok | ||||
| Page=Sayfa | ||||
| @1 of @2=@1 dan @2 | ||||
| Filter=Süzgeç | ||||
| Can use the creative inventory=Yaratıcı envanteri kullanabilir | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= | ||||
| Crafting Grid=Üretim tablosu | ||||
| Crafting Guide=Kılavuz | ||||
| Set home position=Set ev pozisyon | ||||
| @@ -33,19 +44,29 @@ Time of day set to 6am=Saat 06:00 olarak ayarlandı | ||||
| You don't have the settime privilege!="settime" yetkiniz yok! | ||||
| Set time to night=Geceye zaman ayarla | ||||
| Time of day set to 9pm=Saat 19:00 olarak ayarlandı | ||||
| msgid ""=Yaratıcı modu dışında iken bu tuş kullanılamaz. | ||||
| Clear inventory= | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=Envanter temizlendi! | ||||
| Trash:=Çöp | ||||
| Refill:=Doldur | ||||
| Any item belonging to the @1 group= | ||||
| Any item belonging to the groups @1= | ||||
| Recipe @1 of @2=@1 dan @2 tarifi | ||||
| Usage @1 of @2=Kullanım @1/@2 | ||||
| No recipes=Tarifi yok | ||||
| No usages=Kullanım yok | ||||
| Result=Çıktı | ||||
| Ingredient=Bileşen | ||||
| Show next recipe= | ||||
| Show next usage= | ||||
| Show previous recipe= | ||||
| Show previous usage= | ||||
| @1 (@2)= | ||||
| Give me:=Ver bana: | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:=Üretim tablosuna kopyala | ||||
| All=Tümü | ||||
| Crafting=Üretim | ||||
| White=Beyaz | ||||
| Yellow=Sarı | ||||
| Red=Kırmızı | ||||
| @@ -55,10 +76,10 @@ Waypoints=Konum Noktaları | ||||
| Select Waypoint #@1=#@1 konum noktası seç | ||||
| Waypoint @1=@1 Konum Noktaları | ||||
| Set waypoint to current location=Bulunduğun noktayı işaretle | ||||
| invisible=görünmez | ||||
| visible=görünür | ||||
| Make waypoint @1=Yol noktası @1 | ||||
| @1 display of waypoint coordinates=Yol noktası koordinatlarının görüntülenmesini @1 | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=Konum Gösterge Rengi | ||||
| Edit waypoint name=Konum Noktasını Düzenle | ||||
| Waypoint active=Konum Etkin | ||||
| @@ -67,3 +88,12 @@ Finish editing=Düzenleme bitti | ||||
| World position=Dünya konumu | ||||
| Name=İsim | ||||
| HUD text color=Metin rengi | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| msgid ""=Yaratıcı modu dışında iken bu tuş kullanılamaz. | ||||
| invisible=görünmez | ||||
| visible=görünür | ||||
| Make waypoint @1=Yol noktası @1 | ||||
| @1 display of waypoint coordinates=Yol noktası koordinatlarının görüntülenmesini @1 | ||||
|   | ||||
| @@ -1,8 +1,4 @@ | ||||
| # textdomain: unified_inventory | ||||
| # traslation by: IFRFSX(BingFengFSX) | ||||
| #Email: IFRFSX@Protonmail.com | ||||
|  | ||||
| Crafting=合成 | ||||
| Mixing=混合 | ||||
| Cooking=烹饪 | ||||
| Digging=挖出 | ||||
| @@ -11,20 +7,32 @@ Bag @1=背包@1 | ||||
| Small Bag=小背包 | ||||
| Medium Bag=中背包 | ||||
| Large Bag=大背包 | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = 和  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=搜索 | ||||
| Reset search and display everything=重置搜索并显示所有物品 | ||||
| First page=第一页 | ||||
| Back three pages=后退三页 | ||||
| Back one page=后退一页 | ||||
| Forward one page=前进一页 | ||||
| Forward three pages=前进三页 | ||||
| Last page=最后一页 | ||||
| Search=搜索 | ||||
| No matching items=没有匹配物品 | ||||
| No matches.=没有匹配 | ||||
| Page=页面 | ||||
| @1 of @2=第@1页,共@2页 | ||||
| Filter=过滤器 | ||||
| Can use the creative inventory=可以使用创造背包 | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= | ||||
| Crafting Grid=合成表 | ||||
| Crafting Guide=合成指南 | ||||
| Set home position=设置家的位置 | ||||
| @@ -36,21 +44,29 @@ Time of day set to 6am=时间设置到早晨6点 | ||||
| You don't have the settime privilege!=你没有“settime”权限! | ||||
| Set time to night=设置时间到晚上 | ||||
| Time of day set to 9pm=时间设置到晚上9点 | ||||
|  | ||||
| Inventory cleared!=清空背包 | ||||
| Clear inventory=清空背包 | ||||
|  | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=清空背包 | ||||
| Trash:=丢弃: | ||||
| Refill:=填满: | ||||
| Any item belonging to the @1 group=属于@1组的任何项目 | ||||
| Any item belonging to the groups @1=属于组@1的任何项目 | ||||
| Recipe @1 of @2=第@1配方,共@2个 | ||||
| Usage @1 of @2=第@1用法,共@2个 | ||||
| No recipes=没有配方 | ||||
| No usages=没有用法 | ||||
| Result=结果 | ||||
| Ingredient=原料 | ||||
| Show next recipe= | ||||
| Show next usage= | ||||
| Show previous recipe= | ||||
| Show previous usage= | ||||
| @1 (@2)= | ||||
| Give me:=给予: | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:=填充物品到合成表 | ||||
| All=全部 | ||||
| Crafting=合成 | ||||
| White=白 | ||||
| Yellow=黄 | ||||
| Red=红 | ||||
| @@ -60,10 +76,10 @@ Waypoints=航路点 | ||||
| Select Waypoint #@1=查询航路点 #@1 | ||||
| Waypoint @1=航路点 @1 | ||||
| Set waypoint to current location=将航路点设置到当前位置 | ||||
| invisible=不可见的 | ||||
| visible=可见的 | ||||
| Make waypoint @1=设置航路点 @1 | ||||
| @1 display of waypoint coordinates=显示航路点@1坐标 | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=改变航路点显示的颜色 | ||||
| Edit waypoint name=编辑航路点名称 | ||||
| Waypoint active=航路点已激活 | ||||
| @@ -73,7 +89,10 @@ World position=世界位置 | ||||
| Name=名称 | ||||
| HUD text color=HUD文本颜色 | ||||
|  | ||||
| Reset search and display everything=重置搜索并显示所有物品 | ||||
|  | ||||
| Any item belonging to the @1 group=属于@1组的任何项目 | ||||
| Any item belonging to the groups @1=属于组@1的任何项目 | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| invisible=不可见的 | ||||
| visible=可见的 | ||||
| Make waypoint @1=设置航路点 @1 | ||||
| @1 display of waypoint coordinates=显示航路点@1坐标 | ||||
|   | ||||
| @@ -1,8 +1,4 @@ | ||||
| # textdomain: unified_inventory | ||||
| # traslation by: IFRFSX(BingFengFSX) | ||||
| #Email: IFRFSX@Protonmail.com | ||||
|  | ||||
| Crafting=合成 | ||||
| Mixing=混合 | ||||
| Cooking=烹飪 | ||||
| Digging=挖出 | ||||
| @@ -11,20 +7,32 @@ Bag @1=揹包@1 | ||||
| Small Bag=小揹包 | ||||
| Medium Bag=中揹包 | ||||
| Large Bag=大揹包 | ||||
| All Items= | ||||
| Misc. Items= | ||||
| Plant Life= | ||||
| Building Materials= | ||||
| Tools= | ||||
| Minerals and Metals= | ||||
| Environment and Worldgen= | ||||
| Lighting= | ||||
|  and = 和  | ||||
| Scroll categories left= | ||||
| Scroll categories right= | ||||
| Search=搜索 | ||||
| Reset search and display everything=重置搜索並顯示所有物品 | ||||
| First page=第一頁 | ||||
| Back three pages=後退三頁 | ||||
| Back one page=後退一頁 | ||||
| Forward one page=前進一頁 | ||||
| Forward three pages=前進三頁 | ||||
| Last page=最後一頁 | ||||
| Search=搜索 | ||||
| No matching items=沒有匹配物品 | ||||
| No matches.=沒有匹配 | ||||
| Page=頁面 | ||||
| @1 of @2=第@1頁,共@2頁 | ||||
| Filter=過濾器 | ||||
| Can use the creative inventory=可以使用創造揹包 | ||||
| Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= | ||||
| Crafting Grid=合成表 | ||||
| Crafting Guide=合成指南 | ||||
| Set home position=設置家的位置 | ||||
| @@ -36,21 +44,29 @@ Time of day set to 6am=時間設置到早晨6點 | ||||
| You don't have the settime privilege!=你沒有“settime”權限! | ||||
| Set time to night=設置時間到晚上 | ||||
| Time of day set to 9pm=時間設置到晚上9點 | ||||
|  | ||||
| Inventory cleared!=清空揹包 | ||||
| Clear inventory=清空揹包 | ||||
|  | ||||
| This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= | ||||
| Inventory cleared!=清空揹包 | ||||
| Trash:=丟棄: | ||||
| Refill:=填滿: | ||||
| Any item belonging to the @1 group=屬於@1組的任何項目 | ||||
| Any item belonging to the groups @1=屬於組@1的任何項目 | ||||
| Recipe @1 of @2=第@1配方,共@2個 | ||||
| Usage @1 of @2=第@1用法,共@2個 | ||||
| No recipes=沒有配方 | ||||
| No usages=沒有用法 | ||||
| Result=結果 | ||||
| Ingredient=原料 | ||||
| Show next recipe= | ||||
| Show next usage= | ||||
| Show previous recipe= | ||||
| Show previous usage= | ||||
| @1 (@2)= | ||||
| Give me:=給予: | ||||
| This recipe is too@@large to be displayed.= | ||||
| To craft grid:=填充物品到合成表 | ||||
| All=全部 | ||||
| Crafting=合成 | ||||
| White=白 | ||||
| Yellow=黃 | ||||
| Red=紅 | ||||
| @@ -60,10 +76,10 @@ Waypoints=航路點 | ||||
| Select Waypoint #@1=查詢航路點 #@1 | ||||
| Waypoint @1=航路點 @1 | ||||
| Set waypoint to current location=將航路點設置到當前位置 | ||||
| invisible=不可見的 | ||||
| visible=可見的 | ||||
| Make waypoint @1=設置航路點 @1 | ||||
| @1 display of waypoint coordinates=顯示航路點@1座標 | ||||
| Hide waypoint= | ||||
| Show waypoint= | ||||
| Hide coordinates= | ||||
| Show coordinates= | ||||
| Change color of waypoint display=改變航路點顯示的顏色 | ||||
| Edit waypoint name=編輯航路點名稱 | ||||
| Waypoint active=航路點已激活 | ||||
| @@ -73,7 +89,10 @@ World position=世界位置 | ||||
| Name=名稱 | ||||
| HUD text color=HUD文本顏色 | ||||
|  | ||||
| Reset search and display everything=重置搜索並顯示所有物品 | ||||
|  | ||||
| Any item belonging to the @1 group=屬於@1組的任何項目 | ||||
| Any item belonging to the groups @1=屬於組@1的任何項目 | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| invisible=不可見的 | ||||
| visible=可見的 | ||||
| Make waypoint @1=設置航路點 @1 | ||||
| @1 display of waypoint coordinates=顯示航路點@1座標 | ||||
|   | ||||
							
								
								
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| name = unified_inventory | ||||
| depends = default | ||||
| optional_depends = creative, sfinv, datastorage, farming | ||||
|  | ||||
| optional_depends = default, creative, sfinv, datastorage, farming | ||||
| description = """ | ||||
| Unified Inventory replaces the default survival and creative inventory. | ||||
| It adds a nicer interface and a number of features, such as a crafting guide. | ||||
|   | ||||
							
								
								
									
										51
									
								
								register.lua
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								register.lua
									
									
									
									
									
								
							| @@ -41,55 +41,6 @@ ui.register_button("craftguide", { | ||||
| 	tooltip = S("Crafting Guide") | ||||
| }) | ||||
|  | ||||
| ui.register_button("home_gui_set", { | ||||
| 	type = "image", | ||||
| 	image = "ui_sethome_icon.png", | ||||
| 	tooltip = S("Set home position"), | ||||
| 	hide_lite=true, | ||||
| 	action = function(player) | ||||
| 		local player_name = player:get_player_name() | ||||
| 		if minetest.check_player_privs(player_name, {home=true}) then | ||||
| 			ui.set_home(player, player:get_pos()) | ||||
| 			local home = ui.home_pos[player_name] | ||||
| 			if home ~= nil then | ||||
| 				minetest.sound_play("dingdong", | ||||
| 						{to_player=player_name, gain = 1.0}) | ||||
| 				minetest.chat_send_player(player_name, | ||||
| 					S("Home position set to: @1", minetest.pos_to_string(home))) | ||||
| 			end | ||||
| 		else | ||||
| 			minetest.chat_send_player(player_name, | ||||
| 				S("You don't have the \"home\" privilege!")) | ||||
| 			ui.set_inventory_formspec(player, ui.current_page[player_name]) | ||||
| 		end | ||||
| 	end, | ||||
| 	condition = function(player) | ||||
| 		return minetest.check_player_privs(player:get_player_name(), {home=true}) | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| ui.register_button("home_gui_go", { | ||||
| 	type = "image", | ||||
| 	image = "ui_gohome_icon.png", | ||||
| 	tooltip = S("Go home"), | ||||
| 	hide_lite=true, | ||||
| 	action = function(player) | ||||
| 		local player_name = player:get_player_name() | ||||
| 		if minetest.check_player_privs(player_name, {home=true}) then | ||||
| 			if ui.go_home(player) then | ||||
| 				minetest.sound_play("teleport", {to_player = player_name}) | ||||
| 			end | ||||
| 		else | ||||
| 			minetest.chat_send_player(player_name, | ||||
| 				S("You don't have the \"home\" privilege!")) | ||||
| 			ui.set_inventory_formspec(player, ui.current_page[player_name]) | ||||
| 		end | ||||
| 	end, | ||||
| 	condition = function(player) | ||||
| 		return minetest.check_player_privs(player:get_player_name(), {home=true}) | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| ui.register_button("misc_set_day", { | ||||
| 	type = "image", | ||||
| 	image = "ui_sun_icon.png", | ||||
| @@ -192,7 +143,7 @@ ui.register_page("craft", { | ||||
| 			formspec[n] = ui.single_slot(craftx - 2.5, crafty + 2.5) | ||||
| 			formspec[n+1] = string.format("label[%f,%f;%s]", craftx - 2.3, crafty + 2.4,F(S("Refill:"))) | ||||
| 			formspec[n+2] = string.format("list[detached:%srefill;main;%f,%f;1,1;]", | ||||
| 				F(player_name), craftx - 2.2 - ui.list_img_offset, crafty + 2.5 + ui.list_img_offset) | ||||
| 				F(player_name), craftx - 2.5 + ui.list_img_offset, crafty + 2.5 + ui.list_img_offset) | ||||
| 		end | ||||
| 		return {formspec=table.concat(formspec)} | ||||
| 	end, | ||||
|   | ||||
| @@ -9,3 +9,6 @@ unified_inventory_bags (Enable bags) bool true | ||||
| #If enabled, the trash slot can be used by those without both creative | ||||
| #and the give privilege. | ||||
| unified_inventory_trash (Enable trash) bool true | ||||
|  | ||||
|  | ||||
| unified_inventory_automatic_categorization (Items automatically added to categories) bool true | ||||
							
								
								
									
										
											BIN
										
									
								
								textures/ui_category_all.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/ui_category_all.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Leveys: | Korkeus: | Koko: 1.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								textures/ui_category_none.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/ui_category_none.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Leveys: | Korkeus: | Koko: 7.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								textures/ui_smallbg_9_sliced.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/ui_smallbg_9_sliced.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Leveys: | Korkeus: | Koko: 139 B | 
										
											Binary file not shown.
										
									
								
							| Before Leveys: | Korkeus: | Koko: 1.0 KiB After Leveys: | Korkeus: | Koko: 697 B | 
							
								
								
									
										223
									
								
								waypoints.lua
									
									
									
									
									
								
							
							
						
						
									
										223
									
								
								waypoints.lua
									
									
									
									
									
								
							| @@ -1,6 +1,7 @@ | ||||
| local S = minetest.get_translator("unified_inventory") | ||||
| local F = minetest.formspec_escape | ||||
| local ui = unified_inventory | ||||
| local COUNT = 5 | ||||
|  | ||||
| local hud_colors = { | ||||
| 	{"#FFFFFF", 0xFFFFFF, S("White")}, | ||||
| @@ -10,11 +11,97 @@ local hud_colors = { | ||||
| 	{"#2c4df1", 0x2c4df1, S("Blue")}, | ||||
| } | ||||
|  | ||||
| local hud_colors_max = #hud_colors | ||||
| -- Storage compatibility code | ||||
|  | ||||
| -- Stores temporary player data (persists until player leaves) | ||||
| --[[ | ||||
| Stores temporary player data (persists until player leaves) | ||||
| 	[player_name] = { | ||||
| 		[<waypoint index>] = { | ||||
| 			edit = <edit current waypoint?>, | ||||
| 			hud = <hud ID>, | ||||
| 		}, | ||||
| 		[<waypoint index>] = { ... }, | ||||
| 		... | ||||
| 	} | ||||
| ]] | ||||
| local waypoints_temp = {} | ||||
|  | ||||
| --[[ | ||||
| Datastorage format (per-player): | ||||
| 	{ | ||||
| 		selected = <waypoint index>, | ||||
| 		[<waypoint index>] = { | ||||
| 			name = <name or nil> | ||||
| 			world_pos = <coordinates vector>, | ||||
| 			color = <"hud_colors" index>, | ||||
| 			active = <hud show waypoint?>, | ||||
| 			display_pos = <hud display coorinates?>, | ||||
| 		}, | ||||
| 		[<waypoint index>] = { ... }, | ||||
| 		... | ||||
| 	} | ||||
| Player metadata format: | ||||
| 	{ | ||||
| 		selected = <selected number>, | ||||
| 		-- Cannot mix integer/string keys in JSON | ||||
| 		data = { | ||||
| 			[<waypoint index>] = { same as above }, | ||||
| 			... | ||||
| 		} | ||||
| 	} | ||||
| ]] | ||||
|  | ||||
| local function set_waypoint_data(player, waypoints) | ||||
| 	local meta = player:get_meta() | ||||
| 	if not next(waypoints.data or {}) then | ||||
| 		-- Empty data. Do not save anything, or delete | ||||
| 		meta:set_string("ui_waypoints", "") | ||||
| 	else | ||||
| 		meta:set_string("ui_waypoints", minetest.write_json(waypoints)) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local function migrate_datastorage(player, waypoints) | ||||
| 	-- Copy values from old table | ||||
| 	local new_data = { | ||||
| 		selected = waypoints.selected, | ||||
| 		data = {} | ||||
| 	} | ||||
| 	for i = 1, COUNT do | ||||
| 		new_data.data[i] = waypoints[i] | ||||
| 	end | ||||
|  | ||||
| 	set_waypoint_data(player, new_data) | ||||
|  | ||||
| 	-- Delete values, but keep one entry so that it's saved by datastorage | ||||
| 	for k, _ in pairs(waypoints) do | ||||
| 		waypoints[k] = nil | ||||
| 	end | ||||
| 	waypoints[1] = 1 | ||||
| end | ||||
|  | ||||
| local have_datastorage = minetest.get_modpath("datastorage") ~= nil | ||||
| local function get_waypoint_data(player) | ||||
| 	local player_name = player:get_player_name() | ||||
|  | ||||
| 	-- Migration step | ||||
| 	if have_datastorage then | ||||
| 		local waypoints = datastorage.get(player_name, "waypoints") | ||||
| 		if waypoints.selected then | ||||
| 			migrate_datastorage(player, waypoints) | ||||
| 			minetest.log("action", "[unified_inventory] " .. | ||||
| 				"Migrated waypoints of player: " .. player_name) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	-- Get directly from metadata | ||||
| 	local waypoints = player:get_meta():get("ui_waypoints") | ||||
| 	waypoints = waypoints and minetest.parse_json(waypoints) or {} | ||||
| 	waypoints.data = waypoints.data or {} | ||||
|  | ||||
| 	return waypoints | ||||
| end | ||||
|  | ||||
| ui.register_page("waypoints", { | ||||
| 	get_formspec = function(player) | ||||
| 		local player_name = player:get_player_name() | ||||
| @@ -24,73 +111,83 @@ ui.register_page("waypoints", { | ||||
| 		local wp_buttons_rj = ui.style_full.std_inv_x + 10.1 - ui.style_full.btn_spc | ||||
| 		local wp_edit_w = ui.style_full.btn_spc * 4 - 0.1 | ||||
|  | ||||
| 		-- build a "fake" temp entry if the server took too long | ||||
| 		-- during sign-on and returned an empty entry | ||||
| 		if not waypoints_temp[player_name] then waypoints_temp[player_name] = {hud = 1} end | ||||
| 		local waypoints = get_waypoint_data(player) | ||||
| 		local sel = waypoints.selected or 1 | ||||
|  | ||||
| 		local waypoints = datastorage.get(player_name, "waypoints") | ||||
| 		local formspec = { ui.style_full.standard_inv_bg, | ||||
| 		local formspec = { | ||||
| 			ui.style_full.standard_inv_bg, | ||||
| 			string.format("label[%f,%f;%s]", | ||||
| 				ui.style_full.form_header_x, ui.style_full.form_header_y, | ||||
| 				F(S("Waypoints"))), | ||||
| 				ui.style_full.form_header_x, ui.style_full.form_header_y, F(S("Waypoints"))), | ||||
| 			"image["..wp_info_x..","..wp_info_y..";1,1;ui_waypoints_icon.png]" | ||||
| 		} | ||||
| 		local n=4 | ||||
|  | ||||
| 		-- Tabs buttons: | ||||
| 		for i = 1, 5 do | ||||
| 		for i = 1, COUNT do | ||||
| 			local sw="select_waypoint"..i | ||||
| 			formspec[n] = string.format("image_button[%f,%f;%f,%f;%sui_%i_icon.png;%s;]", | ||||
| 				ui.style_full.main_button_x, wp_bottom_row - (5-i) * ui.style_full.btn_spc, | ||||
| 				ui.style_full.btn_size, ui.style_full.btn_size, | ||||
| 				(i == waypoints.selected) and "ui_blue_icon_background.png^" or "", | ||||
| 				(i == sel) and "ui_blue_icon_background.png^" or "", | ||||
| 				i, sw) | ||||
| 			formspec[n+1] = "tooltip["..sw..";"..S("Select Waypoint #@1", i).."]" | ||||
| 			n = n + 2 | ||||
| 		end | ||||
|  | ||||
| 		local i = waypoints.selected or 1 | ||||
| 		local waypoint = waypoints[i] or {} | ||||
| 		local temp = waypoints_temp[player_name][i] or {} | ||||
| 		local default_name = S("Waypoint @1", i) | ||||
| 		local waypoint = waypoints.data[sel] or {} | ||||
| 		local temp = waypoints_temp[player_name][sel] or {} | ||||
| 		local default_name = S("Waypoint @1", sel) | ||||
|  | ||||
| 		-- Main buttons: | ||||
| 		local btnlist = { | ||||
| 			{ "ui_waypoint_set_icon.png", "set_waypoint", S("Set waypoint to current location") }, | ||||
| 			{ waypoint.active and "ui_on_icon.png" or "ui_off_icon.png", "toggle_waypoint", S("Make waypoint @1", waypoint.active and "invisible" or "visible") }, | ||||
| 			{ waypoint.display_pos and "ui_green_icon_background.png^ui_xyz_icon.png" or "ui_red_icon_background.png^ui_xyz_icon.png^(ui_no.png^[transformR90)", "toggle_display_pos", S("@1 display of waypoint coordinates", waypoint.display_pos and "Disable" or "Enable") }, | ||||
| 			{ "ui_circular_arrows_icon.png", "toggle_color", S("Change color of waypoint display") }, | ||||
| 			{ "ui_pencil_icon.png", "rename_waypoint", S("Edit waypoint name") } | ||||
| 			set_waypoint = { | ||||
| 				"ui_waypoint_set_icon.png", | ||||
| 				S("Set waypoint to current location") | ||||
| 			}, | ||||
| 			toggle_waypoint = { | ||||
| 				waypoint.active and "ui_on_icon.png" or "ui_off_icon.png", | ||||
| 				waypoint.active and S("Hide waypoint") or S("Show waypoint") | ||||
| 			}, | ||||
| 			toggle_display_pos = { | ||||
| 				waypoint.display_pos and "ui_green_icon_background.png^ui_xyz_icon.png" or "ui_red_icon_background.png^ui_xyz_icon.png^(ui_no.png^[transformR90)", | ||||
| 				waypoint.display_pos and S("Hide coordinates") or S("Show coordinates") | ||||
| 			}, | ||||
| 			toggle_color = { | ||||
| 				"ui_circular_arrows_icon.png", | ||||
| 				S("Change color of waypoint display") | ||||
| 			}, | ||||
| 			rename_waypoint = { | ||||
| 				"ui_pencil_icon.png", | ||||
| 				S("Edit waypoint name") | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		local x = 4 | ||||
| 		for _, b in pairs(btnlist) do | ||||
| 		for name, def in pairs(btnlist) do | ||||
| 			formspec[n] = string.format("image_button[%f,%f;%f,%f;%s;%s%i;]", | ||||
| 				wp_buttons_rj - ui.style_full.btn_spc * x, wp_bottom_row, | ||||
| 				ui.style_full.btn_size, ui.style_full.btn_size, | ||||
| 				b[1], b[2], i) | ||||
| 			formspec[n+1] = "tooltip["..b[2]..i..";"..F(b[3]).."]" | ||||
| 				def[1], name, sel) | ||||
| 			formspec[n+1] = "tooltip["..name..sel..";"..F(def[2]).."]" | ||||
| 			x = x - 1 | ||||
| 			n = n + 2 | ||||
| 		end | ||||
|  | ||||
| 		-- Waypoint's info: | ||||
| 		formspec[n] = "label["..wp_info_x..","..(wp_info_y+1.1)..";" | ||||
| 		if waypoint.active then | ||||
| 			formspec[n+1] = F(S("Waypoint active")).."]" | ||||
| 		else | ||||
| 			formspec[n+1] = F(S("Waypoint inactive")).."]" | ||||
| 		end | ||||
| 		n = n + 2 | ||||
| 		formspec[n] = ("label[%f,%f;%s]"):format( | ||||
| 			wp_info_x, wp_info_y + 1.1, | ||||
| 			F(waypoint.active and S("Waypoint active") or S("Waypoint inactive")) | ||||
| 		) | ||||
| 		n = n + 1 | ||||
|  | ||||
| 		if temp.edit then | ||||
| 			formspec[n] = string.format("field[%f,%f;%f,%f;rename_box%i;;%s]", | ||||
| 				wp_buttons_rj - wp_edit_w - 0.1, wp_bottom_row - ui.style_full.btn_spc, | ||||
| 				wp_edit_w, ui.style_full.btn_size, i, (waypoint.name or default_name)) | ||||
| 				wp_edit_w, ui.style_full.btn_size, sel, (waypoint.name or default_name)) | ||||
| 			formspec[n+1] = string.format("image_button[%f,%f;%f,%f;ui_ok_icon.png;confirm_rename%i;]", | ||||
| 				wp_buttons_rj, wp_bottom_row - ui.style_full.btn_spc, | ||||
| 				ui.style_full.btn_size, ui.style_full.btn_size, i) | ||||
| 			formspec[n+2] = "tooltip[confirm_rename"..i..";"..F(S("Finish editing")).."]" | ||||
| 				ui.style_full.btn_size, ui.style_full.btn_size, sel) | ||||
| 			formspec[n+2] = "tooltip[confirm_rename"..sel..";"..F(S("Finish editing")).."]" | ||||
| 			n = n + 3 | ||||
| 		end | ||||
|  | ||||
| @@ -114,10 +211,12 @@ ui.register_button("waypoints", { | ||||
| }) | ||||
|  | ||||
| local function update_hud(player, waypoints, temp, i) | ||||
| 	local waypoint = waypoints[i] | ||||
| 	local waypoint = waypoints.data[i] | ||||
| 	if not waypoint then return end | ||||
|  | ||||
| 	temp[i] = temp[i] or {} | ||||
| 	temp = temp[i] | ||||
|  | ||||
| 	local pos = waypoint.world_pos or vector.new() | ||||
| 	local name | ||||
| 	if waypoint.display_pos then | ||||
| @@ -126,10 +225,13 @@ local function update_hud(player, waypoints, temp, i) | ||||
| 			name = name..", "..waypoint.name | ||||
| 		end | ||||
| 	else | ||||
| 		name = waypoint.name or "Waypoint "..i | ||||
| 		name = waypoint.name or S("Waypoint @1", i) | ||||
| 	end | ||||
|  | ||||
| 	-- Perform HUD updates | ||||
| 	if temp.hud then | ||||
| 		player:hud_remove(temp.hud) | ||||
| 		temp.hud = nil | ||||
| 	end | ||||
| 	if waypoint.active then | ||||
| 		temp.hud = player:hud_add({ | ||||
| @@ -139,8 +241,6 @@ local function update_hud(player, waypoints, temp, i) | ||||
| 			text = "m", | ||||
| 			world_pos = pos | ||||
| 		}) | ||||
| 	else | ||||
| 		temp.hud = nil | ||||
| 	end | ||||
| end | ||||
|  | ||||
| @@ -152,9 +252,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
| 	local need_update_hud = false | ||||
| 	local hit = false | ||||
|  | ||||
| 	local waypoints = datastorage.get(player_name, "waypoints") | ||||
| 	local waypoints = get_waypoint_data(player) | ||||
| 	local temp = waypoints_temp[player_name] | ||||
| 	for i = 1, 5, 1 do | ||||
| 	for i = 1, COUNT do | ||||
| 		local waypoint = waypoints.data[i] or {} | ||||
|  | ||||
| 		if fields["select_waypoint"..i] then | ||||
| 			hit = true | ||||
| 			waypoints.selected = i | ||||
| @@ -163,20 +265,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
|  | ||||
| 		if fields["toggle_waypoint"..i] then | ||||
| 			hit = true | ||||
| 			waypoints[i] = waypoints[i] or {} | ||||
| 			waypoints[i].active = not (waypoints[i].active) | ||||
| 			waypoint.active = not (waypoint.active) | ||||
| 			need_update_hud = true | ||||
| 			update_formspec = true | ||||
| 		end | ||||
|  | ||||
| 		if fields["set_waypoint"..i] then | ||||
| 			hit = true | ||||
| 			local pos = player:get_pos() | ||||
| 			pos.x = math.floor(pos.x) | ||||
| 			pos.y = math.floor(pos.y) | ||||
| 			pos.z = math.floor(pos.z) | ||||
| 			waypoints[i] = waypoints[i] or {} | ||||
| 			waypoints[i].world_pos = pos | ||||
| 			local pos = vector.round(player:get_pos()) | ||||
| 			waypoint.world_pos = pos | ||||
| 			need_update_hud = true | ||||
| 			update_formspec = true | ||||
| 		end | ||||
| @@ -190,39 +287,45 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
|  | ||||
| 		if fields["toggle_display_pos"..i] then | ||||
| 			hit = true | ||||
| 			waypoints[i] = waypoints[i] or {} | ||||
| 			waypoints[i].display_pos = not waypoints[i].display_pos | ||||
| 			waypoint.display_pos = not waypoint.display_pos | ||||
| 			need_update_hud = true | ||||
| 			update_formspec = true | ||||
| 		end | ||||
|  | ||||
| 		if fields["toggle_color"..i] then | ||||
| 			hit = true | ||||
| 			waypoints[i] = waypoints[i] or {} | ||||
| 			local color = waypoints[i].color or 1 | ||||
| 			local color = waypoint.color or 0 | ||||
| 			color = color + 1 | ||||
| 			if color > hud_colors_max then | ||||
| 			if color > #hud_colors then | ||||
| 				color = 1 | ||||
| 			end | ||||
| 			waypoints[i].color = color | ||||
| 			waypoint.color = color | ||||
| 			need_update_hud = true | ||||
| 			update_formspec = true | ||||
| 		end | ||||
|  | ||||
| 		if fields["confirm_rename"..i] then | ||||
| 			hit = true | ||||
| 			waypoints[i] = waypoints[i] or {} | ||||
| 			temp[i] = temp[i] or {} | ||||
| 			temp[i].edit = false | ||||
| 			waypoints[i].name = fields["rename_box"..i] | ||||
| 			waypoint.name = fields["rename_box"..i] | ||||
| 			need_update_hud = true | ||||
| 			update_formspec = true | ||||
| 		end | ||||
|  | ||||
| 		if hit then | ||||
| 			-- Save first | ||||
| 			waypoints.data[i] = waypoint | ||||
| 			set_waypoint_data(player, waypoints) | ||||
| 		end | ||||
| 		-- Update after | ||||
| 		if need_update_hud then | ||||
| 			update_hud(player, waypoints, temp, i) | ||||
| 		end | ||||
| 		if update_formspec then | ||||
| 			ui.set_inventory_formspec(player, "waypoints") | ||||
| 		end | ||||
|  | ||||
| 		if hit then return end | ||||
| 	end | ||||
| end) | ||||
| @@ -230,11 +333,11 @@ end) | ||||
|  | ||||
| minetest.register_on_joinplayer(function(player) | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local waypoints = datastorage.get(player_name, "waypoints") | ||||
| 	local temp = {} | ||||
| 	waypoints_temp[player_name] = temp | ||||
| 	for i = 1, 5 do | ||||
| 		update_hud(player, waypoints, temp, i) | ||||
| 	local waypoints = get_waypoint_data(player) | ||||
|  | ||||
| 	waypoints_temp[player_name] = {} | ||||
| 	for i = 1, COUNT do | ||||
| 		update_hud(player, waypoints, waypoints_temp[player_name], i) | ||||
| 	end | ||||
| end) | ||||
|  | ||||
|   | ||||
		Viittaa uudesa ongelmassa
	
	Block a user