mirror of
				https://github.com/minetest-mods/skinsdb.git
				synced 2025-10-31 11:35:21 +01:00 
			
		
		
		
	Update to work with Unified Inventory v2
i.e. the formspec v4 rewrite Requires UI "version-2" tag or commit a7556c50 or later and and Minetest v5.4.0 or later This also makes it work properly in UI's "lite" mode.
This commit is contained in:
		
				
					committed by
					
						 sfan5
						sfan5
					
				
			
			
				
	
			
			
			
						parent
						
							da6905fd02
						
					
				
				
					commit
					c53158d159
				
			| @@ -1,4 +1,5 @@ | |||||||
| local S = minetest.get_translator("skinsdb") | local S = minetest.get_translator("skinsdb") | ||||||
|  | local ui = unified_inventory | ||||||
|  |  | ||||||
| function skins.get_formspec_context(player) | function skins.get_formspec_context(player) | ||||||
| 	if player then | 	if player then | ||||||
| @@ -11,7 +12,7 @@ function skins.get_formspec_context(player) | |||||||
| end | end | ||||||
|  |  | ||||||
| -- Show skin info | -- Show skin info | ||||||
| function skins.get_skin_info_formspec(skin) | function skins.get_skin_info_formspec(skin, perplayer_formspec) | ||||||
| 	local texture = skin:get_texture() | 	local texture = skin:get_texture() | ||||||
| 	local m_name = skin:get_meta_string("name") | 	local m_name = skin:get_meta_string("name") | ||||||
| 	local m_author = skin:get_meta_string("author") | 	local m_author = skin:get_meta_string("author") | ||||||
| @@ -20,30 +21,82 @@ function skins.get_skin_info_formspec(skin) | |||||||
| 	-- overview page | 	-- overview page | ||||||
| 	local raw_size = m_format == "1.8" and "2,2" or "2,1" | 	local raw_size = m_format == "1.8" and "2,2" or "2,1" | ||||||
|  |  | ||||||
| 	local formspec = "image[0.8,.6;1,2;"..minetest.formspec_escape(skin:get_preview()).."]" | 	local lxoffs = 0.8 | ||||||
|  | 	local cxoffs = 2 | ||||||
|  | 	local rxoffs = 5.5 | ||||||
|  |  | ||||||
|  | 	if type(perplayer_formspec) == "table" then -- we're using Unified Inventory | ||||||
|  | 		lxoffs = 1.5 | ||||||
|  | 		cxoffs = 3.75 | ||||||
|  | 		rxoffs = 7.5 | ||||||
|  | 	end | ||||||
|  |  | ||||||
|  | 	local formspec = "image["..lxoffs..",.6;1,2;"..minetest.formspec_escape(skin:get_preview()).."]" | ||||||
| 	if texture then | 	if texture then | ||||||
| 		formspec = formspec.."label[6,.5;"..S("Raw texture")..":]" | 		formspec = formspec.."label["..rxoffs..",.5;"..S("Raw texture")..":]" | ||||||
| 		.."image[6,1;"..raw_size..";"..texture.."]" | 		.."image["..rxoffs..",1;"..raw_size..";"..texture.."]" | ||||||
| 	end | 	end | ||||||
| 	if m_name ~= "" then | 	if m_name ~= "" then | ||||||
| 		formspec = formspec.."label[2,.5;"..S("Name")..": "..minetest.formspec_escape(m_name).."]" | 		formspec = formspec.."label["..cxoffs..",.5;"..S("Name")..": "..minetest.formspec_escape(m_name).."]" | ||||||
| 	end | 	end | ||||||
| 	if m_author ~= "" then | 	if m_author ~= "" then | ||||||
| 		formspec = formspec.."label[2,1;"..S("Author")..": "..minetest.formspec_escape(m_author).."]" | 		formspec = formspec.."label["..cxoffs..",1;"..S("Author")..": "..minetest.formspec_escape(m_author).."]" | ||||||
| 	end | 	end | ||||||
| 	if m_license ~= "" then | 	if m_license ~= "" then | ||||||
| 		formspec = formspec.."label[2,1.5;"..S("License")..": "..minetest.formspec_escape(m_license).."]" | 		formspec = formspec.."label["..cxoffs..",1.5;"..S("License")..": "..minetest.formspec_escape(m_license).."]" | ||||||
| 	end | 	end | ||||||
| 	return formspec | 	return formspec | ||||||
| end | end | ||||||
|  |  | ||||||
| function skins.get_skin_selection_formspec(player, context, y_delta) | function skins.get_skin_selection_formspec(player, context, perplayer_formspec) | ||||||
| 	context.skins_list = skins.get_skinlist_for_player(player:get_player_name()) | 	context.skins_list = skins.get_skinlist_for_player(player:get_player_name()) | ||||||
| 	context.total_pages = 1 | 	context.total_pages = 1 | ||||||
|  | 	local xoffs = 0 | ||||||
|  | 	local yoffs = 4 | ||||||
|  | 	local xspc = 1 | ||||||
|  | 	local yspc = 2 | ||||||
|  | 	local skinwidth = 1 | ||||||
|  | 	local skinheight = 2 | ||||||
|  | 	local xscale = 1 | ||||||
|  | 	local btn_y = 8.15 | ||||||
|  | 	local drop_y = 8 | ||||||
|  | 	local btn_width = 1 | ||||||
|  | 	local droppos = 1 | ||||||
|  | 	local droplen = 6.25 | ||||||
|  | 	local btn_right = 7 | ||||||
|  | 	local maxdisp = 16 | ||||||
|  |  | ||||||
|  | 	local ctrls_height = 0.5 | ||||||
|  |  | ||||||
|  | 	if type(perplayer_formspec) == "table" then -- it's being used under Unified Inventory | ||||||
|  | 		xoffs =  perplayer_formspec.std_inv_x | ||||||
|  | 		xspc =   ui.imgscale | ||||||
|  | 		yspc =   ui.imgscale*2 | ||||||
|  | 		skinwidth =  ui.imgscale*0.9 | ||||||
|  | 		skinheight = ui.imgscale*1.9 | ||||||
|  | 		xscale = ui.imgscale | ||||||
|  | 		btn_width = ui.imgscale | ||||||
|  | 		droppos = xoffs + btn_width + 0.1 | ||||||
|  | 		droplen = ui.imgscale * 6 - 0.2 | ||||||
|  | 		btn_right = droppos + droplen + 0.1 | ||||||
|  |  | ||||||
|  | 		if perplayer_formspec.pagecols == 4 then -- and we're in lite mode | ||||||
|  | 			yoffs =  1 | ||||||
|  | 			maxdisp = 8 | ||||||
|  | 			drop_y = yoffs + skinheight + 0.1 | ||||||
|  | 		else | ||||||
|  | 			yoffs =  0.2 | ||||||
|  | 			drop_y = yoffs + skinheight*2 + 0.2 | ||||||
|  | 		end | ||||||
|  |  | ||||||
|  | 		btn_y = drop_y | ||||||
|  |  | ||||||
|  | 	end | ||||||
|  |  | ||||||
| 	for i, skin in ipairs(context.skins_list ) do | 	for i, skin in ipairs(context.skins_list ) do | ||||||
| 		local page = math.floor((i-1) / 16)+1 | 		local page = math.floor((i-1) / maxdisp)+1 | ||||||
| 		skin:set_meta("inv_page", page) | 		skin:set_meta("inv_page", page) | ||||||
| 		skin:set_meta("inv_page_index", (i-1)%16+1) | 		skin:set_meta("inv_page_index", (i-1)%maxdisp+1) | ||||||
| 		context.total_pages = page | 		context.total_pages = page | ||||||
| 	end | 	end | ||||||
| 	context.skins_page = context.skins_page or skins.get_player_skin(player):get_meta("inv_page") or 1 | 	context.skins_page = context.skins_page or skins.get_player_skin(player):get_meta("inv_page") or 1 | ||||||
| @@ -51,22 +104,25 @@ function skins.get_skin_selection_formspec(player, context, y_delta) | |||||||
|  |  | ||||||
| 	local page = context.skins_page | 	local page = context.skins_page | ||||||
| 	local formspec = "" | 	local formspec = "" | ||||||
| 	for i = (page-1)*16+1, page*16 do | 	 | ||||||
|  | 	for i = (page-1)*maxdisp+1, page*maxdisp do | ||||||
| 		local skin = context.skins_list[i] | 		local skin = context.skins_list[i] | ||||||
| 		if not skin then | 		if not skin then | ||||||
| 			break | 			break | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
| 		local index_p = skin:get_meta("inv_page_index") | 		local index_p = skin:get_meta("inv_page_index") | ||||||
| 		local x = (index_p-1) % 8 | 		local x = ((index_p-1) % 8) * xspc + xoffs | ||||||
| 		local y | 		local y | ||||||
| 		if index_p > 8 then | 		if index_p > 8 then | ||||||
| 			y = y_delta + 1.9 | 			y = yoffs + yspc | ||||||
| 		else | 		else | ||||||
| 			y = y_delta | 			y = yoffs | ||||||
| 		end | 		end | ||||||
| 		formspec = formspec.."image_button["..x..","..y..";1,2;".. | 		formspec = formspec.. | ||||||
| 			minetest.formspec_escape(skin:get_preview())..";skins_set$"..i..";]".. | 			string.format("image_button[%f,%f;%f,%f;%s;skins_set$%i;]", | ||||||
|  | 				x, y, skinwidth, skinheight, | ||||||
|  | 				minetest.formspec_escape(skin:get_preview()), i).. | ||||||
| 			"tooltip[skins_set$"..i..";"..minetest.formspec_escape(skin:get_meta_string("name")).."]" | 			"tooltip[skins_set$"..i..";"..minetest.formspec_escape(skin:get_meta_string("name")).."]" | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| @@ -87,10 +143,13 @@ function skins.get_skin_selection_formspec(player, context, y_delta) | |||||||
| 			if pg > 1 then page_list = page_list.."," end | 			if pg > 1 then page_list = page_list.."," end | ||||||
| 			page_list = page_list..pagename | 			page_list = page_list..pagename | ||||||
| 		end | 		end | ||||||
| 		formspec = formspec | 		formspec = formspec.. | ||||||
| 			.."button[0,"..(y_delta+4.0)..";1,.5;skins_page$"..page_prev..";<<]" | 			string.format("button[%f,%f;%f,%f;skins_page$%i;<<]", | ||||||
| 			.."dropdown[0.9,"..(y_delta+3.88)..";6.5,.5;skins_selpg;"..page_list..";"..page.."]" | 				xoffs, btn_y, btn_width, ctrls_height, page_prev).. | ||||||
| 			.."button[7,"..(y_delta+4.0)..";1,.5;skins_page$"..page_next..";>>]" | 			string.format("button[%f,%f;%f,%f;skins_page$%i;>>]", | ||||||
|  | 				btn_right, btn_y, btn_width, ctrls_height, page_next).. | ||||||
|  | 			string.format("dropdown[%f,%f;%f,%f;skins_selpg;%s;%i]", | ||||||
|  | 				droppos, drop_y, droplen, ctrls_height, page_list, page) | ||||||
| 	end | 	end | ||||||
| 	return formspec | 	return formspec | ||||||
| end | end | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								mod.conf
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								mod.conf
									
									
									
									
									
								
							| @@ -2,3 +2,4 @@ name = skinsdb | |||||||
| description = Player skin mod, supporting unified_inventory, sfinv and smart_inventory | description = Player skin mod, supporting unified_inventory, sfinv and smart_inventory | ||||||
| depends = player_api | depends = player_api | ||||||
| optional_depends = unified_inventory,3d_armor,clothing,sfinv | optional_depends = unified_inventory,3d_armor,clothing,sfinv | ||||||
|  | min_minetest_version = 5.4.0 | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 6.0 KiB | 
| @@ -1,10 +1,13 @@ | |||||||
| local S = minetest.get_translator("skinsdb") | local S = minetest.get_translator("skinsdb") | ||||||
|  |  | ||||||
| unified_inventory.register_page("skins", { | unified_inventory.register_page("skins", { | ||||||
| 	get_formspec = function(player) | 	get_formspec = function(player, perplayer_formspec) | ||||||
| 		local skin = skins.get_player_skin(player) | 		local skin = skins.get_player_skin(player) | ||||||
| 		local formspec = "background[0.06,0.99;7.92,7.52;ui_misc_form.png]"..skins.get_skin_info_formspec(skin).. | 		local boffs = (type(perplayer_formspec) == "table") and 2 or 0.75 | ||||||
| 				"button[.75,3;6.5,.5;skins_page;"..S("Change").."]" |  | ||||||
|  | 		local formspec = perplayer_formspec.standard_inv_bg.. | ||||||
|  | 			skins.get_skin_info_formspec(skin, perplayer_formspec).. | ||||||
|  | 			"button["..boffs..",3;6.5,.5;skins_page;"..S("Change").."]" | ||||||
| 		return {formspec=formspec} | 		return {formspec=formspec} | ||||||
| 	end, | 	end, | ||||||
| }) | }) | ||||||
| @@ -15,16 +18,16 @@ unified_inventory.register_button("skins", { | |||||||
| 	tooltip = S("Skins"), | 	tooltip = S("Skins"), | ||||||
| }) | }) | ||||||
|  |  | ||||||
| local function get_formspec(player) | local function get_formspec(player, perplayer_formspec) | ||||||
| 	local context = skins.get_formspec_context(player) | 	local context = skins.get_formspec_context(player) | ||||||
| 	local formspec = "background[0.06,0.99;7.92,7.52;ui_misc_form.png]".. | 	local formspec = perplayer_formspec.standard_inv_bg.. | ||||||
| 			skins.get_skin_selection_formspec(player, context, -0.2) | 			skins.get_skin_selection_formspec(player, context, perplayer_formspec) | ||||||
| 	return formspec | 	return formspec | ||||||
| end | end | ||||||
|  |  | ||||||
| unified_inventory.register_page("skins_page", { | unified_inventory.register_page("skins_page", { | ||||||
| 	get_formspec = function(player) | 	get_formspec = function(player, perplayer_formspec) | ||||||
| 		return {formspec=get_formspec(player)} | 		return {formspec=get_formspec(player, perplayer_formspec)} | ||||||
| 	end | 	end | ||||||
| }) | }) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user