diff --git a/craftguide.lua b/craftguide.lua deleted file mode 100644 index dd59327..0000000 --- a/craftguide.lua +++ /dev/null @@ -1,154 +0,0 @@ -local craftguide, datas, npp = {}, {}, 8*3 - -function craftguide:get_recipe(item) - if item:sub(1,6) == "group:" then - if item:sub(-4) == "wool" or item:sub(-3) == "dye" then - item = item:sub(7)..":white" - elseif minetest.registered_items["default:"..item:sub(7)] then - item = item:gsub("group:", "default:") - else for node, def in pairs(minetest.registered_items) do - if def.groups[item:match("[^,:]+$")] then item = node end - end - end - end - return item -end - -function craftguide:set_formspec(player_name, pagenum, recipe_num) - local data = datas[player_name] - local formspec = [[ size[8,6.6;] - tablecolumns[color;text;color;text] - tableoptions[background=#00000000;highlight=#00000000;border=false] - button[5.4,0;0.8,0.95;prev;<] - button[7.2,0;0.8,0.95;next;>] - button[2.5,0.2;0.8,0.5;search;?] - button[3.2,0.2;0.8,0.5;clear;X] - tooltip[search;Search] - tooltip[clear;Reset] - table[6,0.18;1.1,0.5;pagenum;#FFFF00,]].. - pagenum..",#FFFFFF,/ "..data.pagemax.."]".. - "field[0.3,0.32;2.6,1;filter;;"..data.filter.."]".. - default.gui_bg..default.gui_bg_img - - local first_item = (pagenum - 1) * npp - for i = first_item, first_item + npp - 1 do - local name = data.items[i + 1] - if not name then break end -- last page - - local X = i % 8 - local Y = ((i % npp - X) / 8) + 1 - - formspec = formspec.."item_image_button["..X..","..Y..";1,1;".. - name..";"..name..";]" - end - - if data.item and minetest.registered_items[data.item] then - local recipes = minetest.get_all_craft_recipes(data.item) - if recipe_num > #recipes then recipe_num = 1 end - - if #recipes > 1 then formspec = formspec.. - [[ button[0,6;1.6,1;alternate;Alternate] - label[0,5.5;Recipe ]]..recipe_num.." of "..#recipes.."]" - end - - local type = recipes[recipe_num].type - if type == "cooking" then formspec = formspec.. - "image[3.75,4.6;0.5,0.5;default_furnace_front.png]" - end - - local items = recipes[recipe_num].items - local width = recipes[recipe_num].width - if width == 0 then width = math.min(3, #items) end - -- Lua 5.3 removed `table.maxn`, use `xdecor.maxn` in case of breakage. - local rows = math.ceil(table.maxn(items) / width) - - for i, v in pairs(items) do - local X = (i-1) % width + 4.5 - local Y = math.floor((i-1) / width + (6 - math.min(2, rows))) - local label = "" - if v:sub(1,6) == "group:" then label = "\nG" end - - formspec = formspec.."item_image_button["..X..","..Y..";1,1;".. - self:get_recipe(v)..";"..self:get_recipe(v)..";"..label.."]" - end - - local output = recipes[recipe_num].output - formspec = formspec..[[ image[3.5,5;1,1;gui_furnace_arrow_bg.png^[transformR90] - item_image_button[2.5,5;1,1;]]..output..";"..data.item..";]" - end - - data.formspec = formspec - minetest.show_formspec(player_name, "xdecor:craftguide", formspec) -end - -function craftguide:get_items(player_name) - local items_list, data = {}, datas[player_name] - for name, def in pairs(minetest.registered_items) do - if not (def.groups.not_in_creative_inventory == 1) and - minetest.get_craft_recipe(name).items and - def.description and def.description ~= "" and - (def.name:find(data.filter, 1, true) or - def.description:lower():find(data.filter, 1, true)) then - items_list[#items_list+1] = name - end - end - - table.sort(items_list) - data.items = items_list - data.size = #items_list - data.pagemax = math.ceil(data.size / npp) -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "xdecor:craftguide" then return end - local player_name = player:get_player_name() - local data = datas[player_name] - local formspec = data.formspec - local pagenum = tonumber(formspec:match("#FFFF00,(%d+)")) or 1 - - if fields.clear then - data.filter, data.item = "", nil - craftguide:get_items(player_name) - craftguide:set_formspec(player_name, 1, 1) - elseif fields.alternate then - local recipe_num = tonumber(formspec:match("Recipe%s(%d+)")) or 1 - recipe_num = recipe_num + 1 - craftguide:set_formspec(player_name, pagenum, recipe_num) - elseif fields.search then - data.filter = fields.filter:lower() - craftguide:get_items(player_name) - craftguide:set_formspec(player_name, 1, 1) - elseif fields.prev or fields.next then - if fields.prev then pagenum = pagenum - 1 - else pagenum = pagenum + 1 end - if pagenum > data.pagemax then pagenum = 1 - elseif pagenum == 0 then pagenum = data.pagemax end - craftguide:set_formspec(player_name, pagenum, 1) - else for item in pairs(fields) do - if minetest.get_craft_recipe(item).items then - data.item = item - craftguide:set_formspec(player_name, pagenum, 1) - end - end - end -end) - -minetest.register_craftitem("xdecor:crafting_guide", { - description = "Crafting Guide", - inventory_image = "xdecor_crafting_guide.png", - wield_image = "xdecor_crafting_guide.png", - stack_max = 1, - groups = {book=1}, - on_use = function(itemstack, user) - local player_name = user:get_player_name() - if not datas[player_name] then - datas[player_name] = {} - datas[player_name].filter = "" - craftguide:get_items(player_name) - craftguide:set_formspec(player_name, 1, 1) - else - minetest.show_formspec(player_name, "xdecor:craftguide", datas[player_name].formspec) - end - end -}) - diff --git a/init.lua b/init.lua index 4a19464..629daee 100644 --- a/init.lua +++ b/init.lua @@ -9,18 +9,16 @@ dofile(modpath.."/handlers/nodeboxes.lua") dofile(modpath.."/handlers/registration.lua") -- Item files. -dofile(modpath.."/chess.lua") -dofile(modpath.."/cooking.lua") -dofile(modpath.."/craftguide.lua") -dofile(modpath.."/craftitems.lua") -dofile(modpath.."/enchanting.lua") -dofile(modpath.."/hive.lua") -dofile(modpath.."/itemframe.lua") -dofile(modpath.."/mailbox.lua") -dofile(modpath.."/mechanisms.lua") -dofile(modpath.."/nodes.lua") -dofile(modpath.."/recipes.lua") -dofile(modpath.."/rope.lua") -dofile(modpath.."/workbench.lua") +dofile(modpath.."/src/chess.lua") +dofile(modpath.."/src/cooking.lua") +dofile(modpath.."/src/craftitems.lua") +dofile(modpath.."/src/enchanting.lua") +dofile(modpath.."/src/hive.lua") +dofile(modpath.."/src/itemframe.lua") +dofile(modpath.."/src/mailbox.lua") +dofile(modpath.."/src/mechanisms.lua") +dofile(modpath.."/src/nodes.lua") +dofile(modpath.."/src/recipes.lua") +dofile(modpath.."/src/rope.lua") +dofile(modpath.."/src/workbench.lua") --print(string.format("[xdecor] loaded in %.2f ms", (os.clock()-t)*1000)) - diff --git a/chess.lua b/src/chess.lua similarity index 100% rename from chess.lua rename to src/chess.lua diff --git a/cooking.lua b/src/cooking.lua similarity index 100% rename from cooking.lua rename to src/cooking.lua diff --git a/craftitems.lua b/src/craftitems.lua similarity index 100% rename from craftitems.lua rename to src/craftitems.lua diff --git a/enchanting.lua b/src/enchanting.lua similarity index 100% rename from enchanting.lua rename to src/enchanting.lua diff --git a/hive.lua b/src/hive.lua similarity index 100% rename from hive.lua rename to src/hive.lua diff --git a/itemframe.lua b/src/itemframe.lua similarity index 100% rename from itemframe.lua rename to src/itemframe.lua diff --git a/mailbox.lua b/src/mailbox.lua similarity index 100% rename from mailbox.lua rename to src/mailbox.lua diff --git a/mechanisms.lua b/src/mechanisms.lua similarity index 100% rename from mechanisms.lua rename to src/mechanisms.lua diff --git a/nodes.lua b/src/nodes.lua similarity index 100% rename from nodes.lua rename to src/nodes.lua diff --git a/recipes.lua b/src/recipes.lua similarity index 98% rename from recipes.lua rename to src/recipes.lua index 85af033..9e0b169 100644 --- a/recipes.lua +++ b/src/recipes.lua @@ -97,12 +97,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "xdecor:crafting_guide", - type = "shapeless", - recipe = {"default:book"} -}) - minetest.register_craft({ output = "xdecor:cushion 3", recipe = { diff --git a/rope.lua b/src/rope.lua similarity index 100% rename from rope.lua rename to src/rope.lua diff --git a/workbench.lua b/src/workbench.lua similarity index 100% rename from workbench.lua rename to src/workbench.lua diff --git a/textures/xdecor_crafting_guide.png b/textures/xdecor_crafting_guide.png deleted file mode 100644 index 4d08530..0000000 Binary files a/textures/xdecor_crafting_guide.png and /dev/null differ