From d5df0d5e86633c21cafe0282cb81399acf4b186c Mon Sep 17 00:00:00 2001 From: Alexander Weber Date: Thu, 9 Feb 2017 23:06:25 +0100 Subject: [PATCH] renamed back to "skins" for beter compatibility make unified_inventory opitonal, move the UI code to an own file --- README | 7 +- depends.txt | 3 +- init.lua | 196 +++--------------- mod.conf | 2 +- players.lua | 24 +-- skinlist.lua | 20 +- .../{u_skins_button.png => skins_button.png} | Bin unified_inventory_page.lua | 137 ++++++++++++ updater/MT_skins_updater.cs | 4 +- 9 files changed, 193 insertions(+), 200 deletions(-) rename textures/{u_skins_button.png => skins_button.png} (100%) create mode 100644 unified_inventory_page.lua diff --git a/README b/README index 6dd0f8d..74f6cac 100644 --- a/README +++ b/README @@ -1,11 +1,8 @@ -minetest-u_skins +minetest-skins ================ -An skin extention for the Minetest mod unified_inventory by Dean Montgomery +An skin extention for the Minetest (bell07's version) It downloads the skins from the Minetest skin database. (http://minetest.fensta.bplaced.net) -Requires latest unified_inventory from: -https://github.com/minetest-technic/unified_inventory - To download the latest there are 3 tools available in "updater" folder: "./update_skins_db.sh" bash and jq required "./update_from_db.py" python3 required diff --git a/depends.txt b/depends.txt index d6abd12..ae2f803 100644 --- a/depends.txt +++ b/depends.txt @@ -1,4 +1,3 @@ -unified_inventory default -simple_skins? intllib? +unified_inventory? diff --git a/init.lua b/init.lua index 4f66874..53e4c43 100644 --- a/init.lua +++ b/init.lua @@ -3,200 +3,60 @@ -- Copyright (c) 2012 cornernote, Dean Montgomery -- License: GPLv3 -- Boilerplate to support localized strings if intllib mod is installed. -local S -if intllib then - S = intllib.Getter() -else - S = function(s) return s end -end -u_skins = {} -u_skins.modpath = minetest.get_modpath("u_skins") -u_skins.file = minetest.get_worldpath().."/u_skins.mt" -u_skins.default = "character_1" -u_skins.pages = {} -u_skins.u_skins = {} -u_skins.file_save = false -u_skins.simple_skins = false +skins = {} +skins.modpath = minetest.get_modpath("skins") +skins.file = minetest.get_worldpath().."skins.mt" +skins.default = "character_1" +skins.pages = {} +skins.skins = {} +skins.file_save = false --- ( Deprecated -u_skins.type = { SPRITE=0, MODEL=1, ERROR=99 } -u_skins.get_type = function(texture) - if not u_skins.is_skin(texture) then - return u_skins.type.ERROR +skins.type = { SPRITE=0, MODEL=1, ERROR=99 } +skins.get_type = function(texture) + if not skins.is_skin(texture) then + return skins.type.ERROR end - return u_skins.type.MODEL + return skins.type.MODEL end --- ) -u_skins.is_skin = function(texture) +skins.is_skin = function(texture) if not texture then return false end - if not u_skins.meta[texture] then + if not skins.meta[texture] then return false end return true end -dofile(u_skins.modpath.."/skinlist.lua") -dofile(u_skins.modpath.."/players.lua") +dofile(skins.modpath.."/skinlist.lua") +dofile(skins.modpath.."/players.lua") -if rawget(_G, "skins") then - u_skins.simple_skins = true -end -u_skins.update_player_skin = function(player) +skins.update_player_skin = function(player) local name = player:get_player_name() - if u_skins.simple_skins and u_skins.u_skins[name] == u_skins.default then - return - end - - if not u_skins.is_skin(u_skins.u_skins[name]) then - u_skins.u_skins[name] = u_skins.default + + if not skins.is_skin(skins.skins[name]) then + skins.skins[name] = skins.default end player:set_properties({ - textures = {u_skins.u_skins[name]..".png"}, + textures = {skins.skins[name]..".png"}, }) end --- Display Current Skin -unified_inventory.register_page("u_skins", { - get_formspec = function(player) - local name = player:get_player_name() - if not u_skins.is_skin(u_skins.u_skins[name]) then - u_skins.u_skins[name] = u_skins.default - end - - local formspec = ("background[0.06,0.99;7.92,7.52;ui_misc_form.png]" - .."image[0,.75;1,2;"..u_skins.u_skins[name].."_preview.png]" - .."label[6,.5;"..S("Raw texture")..":]" - .."image[6,1;2,1;"..u_skins.u_skins[name]..".png]") - - local meta = u_skins.meta[u_skins.u_skins[name]] - if meta then - if meta.name ~= "" then - formspec = formspec.."label[2,.5;"..S("Name")..": "..minetest.formspec_escape(meta.name).."]" - end - if meta.author ~= "" then - formspec = formspec.."label[2,1;"..S("Author")..": "..minetest.formspec_escape(meta.author).."]" - end - if meta.license ~= "" then - formspec = formspec.."label[2,1.5;"..S("License")..": "..minetest.formspec_escape(meta.license).."]" - end - if meta.description ~= "" then --what's that?? - formspec = formspec.."label[2,2;"..S("Description")..": "..minetest.formspec_escape(meta.description).."]" - end - end - local page = 0 - if u_skins.pages[name] then - page = u_skins.pages[name] - end - formspec = formspec .. "button[.75,3;6.5,.5;u_skins_page$"..page..";"..S("Change").."]" - return {formspec=formspec} - end, -}) - -unified_inventory.register_button("u_skins", { - type = "image", - image = "u_skins_button.png", -}) - --- Create all of the skin-picker pages. - - -local dropdown_values = {} - -u_skins.generate_pages = function(texture) - local page = 0 - local pages = {} - for i, skin in ipairs(u_skins.list) do - local p_index = (i - 1) % 16 - if p_index == 0 then - page = page + 1 - pages[page] = {} - end - pages[page][p_index + 1] = {i, skin} - end - local total_pages = page - page = 1 - for page, arr in ipairs(pages) do - local formspec = "background[0.06,0.99;7.92,7.52;ui_misc_form.png]" - local y = -0.1 - for i, skin in ipairs(arr) do - local x = (i - 1) % 8 - if i > 1 and x == 0 then - y = 1.8 - end - formspec = (formspec.."image_button["..x..","..y..";1,2;".. - skin[2].."_preview.png;u_skins_set$"..skin[1]..";]".. - "tooltip[u_skins_set$"..skin[1]..";"..u_skins.meta[skin[2]].name.."]") - end - local page_prev = page - 2 - local page_next = page - if page_prev < 0 then - page_prev = total_pages - 1 - end - if page_next >= total_pages then - page_next = 0 - end - local page_list = "" - dropdown_values = {} - for pg=1, total_pages do - local pagename = S("Page").." "..pg.."/"..total_pages - dropdown_values[pagename] = pg - if pg > 1 then page_list = page_list.."," end - page_list = page_list..pagename - end - formspec = (formspec - .."button[0,3.8;1,.5;u_skins_page$"..page_prev..";<<]" - .."dropdown[1,3.65;6.5,.5;u_skins_selpg;"..page_list..";"..page.."]" - .."button[7,3.8;1,.5;u_skins_page$"..page_next..";>>]") - - unified_inventory.register_page("u_skins_page$"..(page - 1), { - get_formspec = function(player) - return {formspec=formspec} - end - }) - end +-- Unified inventory page/integration +if minetest.get_modpath("unified_inventory") then + dofile(skins.modpath.."/unified_inventory_page.lua") end --- click button handlers -minetest.register_on_player_receive_fields(function(player, formname, fields) - if fields.u_skins then - unified_inventory.set_inventory_formspec(player, "craft") - return - end - for field, _ in pairs(fields) do - local current = string.split(field, "$", 2) - if current[1] == "u_skins_set" then - u_skins.u_skins[player:get_player_name()] = u_skins.list[tonumber(current[2])] - u_skins.update_player_skin(player) - u_skins.file_save = true - unified_inventory.set_inventory_formspec(player, "u_skins") - return - elseif current[1] == "u_skins_page" then - u_skins.pages[player:get_player_name()] = current[2] - unified_inventory.set_inventory_formspec(player, "u_skins_page$"..current[2]) - return - end - end - if fields.u_skins_selpg then - page = dropdown_values[fields.u_skins_selpg] - u_skins.pages[player:get_player_name()] = page - unified_inventory.set_inventory_formspec(player, "u_skins_page$"..(page-1)) - return - end -end) - -- Change skin on join - reset if invalid minetest.register_on_joinplayer(function(player) local player_name = player:get_player_name() - if not u_skins.is_skin(u_skins.u_skins[player_name]) then - u_skins.u_skins[player_name] = u_skins.default + if not skins.is_skin(skins.skins[player_name]) then + skins.skins[player_name] = skins.default end - u_skins.update_player_skin(player) + skins.update_player_skin(player) end) -u_skins.generate_pages() -u_skins.load_players() + diff --git a/mod.conf b/mod.conf index 54a1516..e3607aa 100644 --- a/mod.conf +++ b/mod.conf @@ -1 +1 @@ -name = u_skins +name = skins diff --git a/players.lua b/players.lua index 3053530..e4f8842 100644 --- a/players.lua +++ b/players.lua @@ -1,14 +1,14 @@ -u_skins.load_players = function() - local file = io.open(u_skins.file, "r") +skins.load_players = function() + local file = io.open(skins.file, "r") if file then for line in file:lines() do local data = string.split(line, " ", 2) - u_skins.u_skins[data[1]] = data[2] + skins.skins[data[1]] = data[2] end io.close(file) end end -u_skins.load_players() +skins.load_players() local ttime = 0 minetest.register_globalstep(function(t) @@ -17,20 +17,20 @@ minetest.register_globalstep(function(t) return end ttime = 0 - u_skins.save() + skins.save() end) -minetest.register_on_shutdown(function() u_skins.save() end) +minetest.register_on_shutdown(function() skins.save() end) -u_skins.save = function() - if not u_skins.file_save then +skins.save = function() + if not skins.file_save then return end - u_skins.file_save = false - local output = io.open(u_skins.file, "w") - for name, skin in pairs(u_skins.u_skins) do + skins.file_save = false + local output = io.open(skins.file, "w") + for name, skin in pairs(skins.skins) do if name and skin then - if skin ~= u_skins.default then + if skin ~= skins.default then output:write(name.." "..skin.."\n") end end diff --git a/skinlist.lua b/skinlist.lua index 718646c..91fa2e6 100644 --- a/skinlist.lua +++ b/skinlist.lua @@ -1,26 +1,26 @@ -u_skins.list = {} -u_skins.meta = {} +skins.list = {} +skins.meta = {} local id = 1 local internal_id = 1 local fetched_skip = 0 while fetched_skip < 40 do local name = "character_"..id - local file = io.open(u_skins.modpath.."/meta/"..name..".txt", "r") + local file = io.open(skins.modpath.."/meta/"..name..".txt", "r") if file then local data = string.split(file:read("*all"), "\n", 3) file:close() - u_skins.list[internal_id] = name - u_skins.meta[name] = {} - u_skins.meta[name].name = data[1] - u_skins.meta[name].author = data[2] - u_skins.meta[name].license = data[3] - u_skins.meta[name].description = "" --what's that?? + skins.list[internal_id] = name + skins.meta[name] = {} + skins.meta[name].name = data[1] + skins.meta[name].author = data[2] + skins.meta[name].license = data[3] + skins.meta[name].description = "" --what's that?? fetched_skip = 0 internal_id = internal_id + 1 end fetched_skip = fetched_skip + 1 id = id + 1 -end \ No newline at end of file +end diff --git a/textures/u_skins_button.png b/textures/skins_button.png similarity index 100% rename from textures/u_skins_button.png rename to textures/skins_button.png diff --git a/unified_inventory_page.lua b/unified_inventory_page.lua new file mode 100644 index 0000000..823c548 --- /dev/null +++ b/unified_inventory_page.lua @@ -0,0 +1,137 @@ +local S +if minetest.get_modpath("intllib") then + S = intllib.Getter() +else + S = function(s) return s end +end + +unified_inventory.register_page("skins", { + get_formspec = function(player) + local name = player:get_player_name() + if not skins.is_skin(skins.skins[name]) then + skins.skins[name] = skins.default + end + + local formspec = ("background[0.06,0.99;7.92,7.52;ui_misc_form.png]" + .."image[0,.75;1,2;"..skins.skins[name].."_preview.png]" + .."label[6,.5;"..S("Raw texture")..":]" + .."image[6,1;2,1;"..skins.skins[name]..".png]") + + local meta = skins.meta[skins.skins[name]] + if meta then + if meta.name ~= "" then + formspec = formspec.."label[2,.5;"..S("Name")..": "..minetest.formspec_escape(meta.name).."]" + end + if meta.author ~= "" then + formspec = formspec.."label[2,1;"..S("Author")..": "..minetest.formspec_escape(meta.author).."]" + end + if meta.license ~= "" then + formspec = formspec.."label[2,1.5;"..S("License")..": "..minetest.formspec_escape(meta.license).."]" + end + if meta.description ~= "" then --what's that?? + formspec = formspec.."label[2,2;"..S("Description")..": "..minetest.formspec_escape(meta.description).."]" + end + end + local page = 0 + if skins.pages[name] then + page = skins.pages[name] + end + formspec = formspec .. "button[.75,3;6.5,.5;skins_page$"..page..";"..S("Change").."]" + return {formspec=formspec} + end, +}) + +unified_inventory.register_button("skins", { + type = "image", + image = "skins_button.png", +}) + +-- Create all of the skin-picker pages. + + +local dropdown_values = {} + +skins.generate_pages = function(texture) + local page = 0 + local pages = {} + for i, skin in ipairs(skins.list) do + local p_index = (i - 1) % 16 + if p_index == 0 then + page = page + 1 + pages[page] = {} + end + pages[page][p_index + 1] = {i, skin} + end + local total_pages = page + page = 1 + for page, arr in ipairs(pages) do + local formspec = "background[0.06,0.99;7.92,7.52;ui_misc_form.png]" + local y = -0.1 + for i, skin in ipairs(arr) do + local x = (i - 1) % 8 + if i > 1 and x == 0 then + y = 1.8 + end + formspec = (formspec.."image_button["..x..","..y..";1,2;".. + skin[2].."_preview.png;skins_set$"..skin[1]..";]".. + "tooltip[skins_set$"..skin[1]..";"..skins.meta[skin[2]].name.."]") + end + local page_prev = page - 2 + local page_next = page + if page_prev < 0 then + page_prev = total_pages - 1 + end + if page_next >= total_pages then + page_next = 0 + end + local page_list = "" + dropdown_values = {} + for pg=1, total_pages do + local pagename = S("Page").." "..pg.."/"..total_pages + dropdown_values[pagename] = pg + if pg > 1 then page_list = page_list.."," end + page_list = page_list..pagename + end + formspec = (formspec + .."button[0,3.8;1,.5;skins_page$"..page_prev..";<<]" + .."dropdown[1,3.65;6.5,.5;skins_selpg;"..page_list..";"..page.."]" + .."button[7,3.8;1,.5;skins_page$"..page_next..";>>]") + + unified_inventory.register_page("skins_page$"..(page - 1), { + get_formspec = function(player) + return {formspec=formspec} + end + }) + end +end + +-- click button handlers +minetest.register_on_player_receive_fields(function(player, formname, fields) + if fields.skins then + unified_inventory.set_inventory_formspec(player, "craft") + return + end + for field, _ in pairs(fields) do + local current = string.split(field, "$", 2) + if current[1] == "skins_set" then + skins.skins[player:get_player_name()] = skins.list[tonumber(current[2])] + skins.update_player_skin(player) + skins.file_save = true + unified_inventory.set_inventory_formspec(player, "skins") + return + elseif current[1] == "skins_page" then + skins.pages[player:get_player_name()] = current[2] + unified_inventory.set_inventory_formspec(player, "skins_page$"..current[2]) + return + end + end + if fields.skins_selpg then + page = dropdown_values[fields.skins_selpg] + skins.pages[player:get_player_name()] = page + unified_inventory.set_inventory_formspec(player, "skins_page$"..(page-1)) + return + end +end) + +skins.generate_pages() +skins.load_players() diff --git a/updater/MT_skins_updater.cs b/updater/MT_skins_updater.cs index 6d27da0..021a999 100644 --- a/updater/MT_skins_updater.cs +++ b/updater/MT_skins_updater.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using System.Net; using System.IO; -// MT skins updater for the u_skins mod +// MT skins updater for the skins mod // Creator: Krock // License: zlib (http://www.zlib.net/zlib_license.html) namespace MT_skins_updater { @@ -14,7 +14,7 @@ namespace MT_skins_updater { Console.WriteLine("Welcome to the MT skins updater!"); Console.WriteLine("# Created by: Krock (2014-07-10)"); Engine e = new Engine(); - Console.WriteLine(@"Path to the u_skins mod: (ex. 'E:\Minetest\mods\u_skinsdb\u_skins\')"); + Console.WriteLine(@"Path to the skins mod: (ex. 'E:\Minetest\mods\skinsdb\skins\')"); string path = Console.ReadLine(); Console.WriteLine("Start updating at page: ('0' to update everything)"); int page = getInt(Console.ReadLine());