From c797a15e8ba5f84b7b34e828a84aebad5c1aabd0 Mon Sep 17 00:00:00 2001 From: KaadmY Date: Sat, 13 May 2017 10:27:40 -0700 Subject: [PATCH] Add new crafting mod for a new crafting method --- mods/crafting/README.txt | 8 + mods/crafting/init.lua | 203 ++++++++++++++++++ mods/craftingguide/README.txt | 9 - mods/craftingguide/depends.txt | 1 - mods/craftingguide/init.lua | 183 ---------------- .../textures/craftingguide_method_cooking.png | Bin 268 -> 0 bytes .../textures/craftingguide_method_cooking.xcf | Bin 1018 -> 0 bytes .../craftingguide_method_crafting.png | Bin 200 -> 0 bytes .../craftingguide_method_crafting.xcf | Bin 1333 -> 0 bytes .../textures/craftingguide_method_fuel.png | Bin 300 -> 0 bytes .../textures/craftingguide_method_fuel.xcf | Bin 1087 -> 0 bytes .../textures/craftingguide_method_unknown.png | Bin 286 -> 0 bytes .../textures/craftingguide_method_unknown.xcf | Bin 1028 -> 0 bytes mods/default/formspec.lua | 11 +- 14 files changed, 214 insertions(+), 201 deletions(-) create mode 100644 mods/crafting/README.txt create mode 100644 mods/crafting/init.lua delete mode 100644 mods/craftingguide/README.txt delete mode 100644 mods/craftingguide/depends.txt delete mode 100644 mods/craftingguide/init.lua delete mode 100644 mods/craftingguide/textures/craftingguide_method_cooking.png delete mode 100644 mods/craftingguide/textures/craftingguide_method_cooking.xcf delete mode 100644 mods/craftingguide/textures/craftingguide_method_crafting.png delete mode 100644 mods/craftingguide/textures/craftingguide_method_crafting.xcf delete mode 100644 mods/craftingguide/textures/craftingguide_method_fuel.png delete mode 100644 mods/craftingguide/textures/craftingguide_method_fuel.xcf delete mode 100644 mods/craftingguide/textures/craftingguide_method_unknown.png delete mode 100644 mods/craftingguide/textures/craftingguide_method_unknown.xcf diff --git a/mods/crafting/README.txt b/mods/crafting/README.txt new file mode 100644 index 0000000..bb22e86 --- /dev/null +++ b/mods/crafting/README.txt @@ -0,0 +1,8 @@ +Cratfing mod +============ +By Kaadmy, for Pixture + +Custom crafting method, uses a list of possible items to craft instead of a grid +recipe. + +Source license: LGPLv2.1 diff --git a/mods/crafting/init.lua b/mods/crafting/init.lua new file mode 100644 index 0000000..5645c46 --- /dev/null +++ b/mods/crafting/init.lua @@ -0,0 +1,203 @@ +-- +-- Crafting mod +-- By Kaadmy, for Pixture +-- + +crafting = {} + +crafting.registered_crafts = {} + +-- Crafting can only take 4 itemstacks as input for sanity/interface reasons +crafting.max_inputs = 4 + +-- Default crafting definition values +crafting.default_craftdef = { + output = nil, + description = "", + items = {}, +} + +function crafting.register_craft(output, def) + -- `output` can be any ItemStack value, but count is NOT used + + local itemstack = ItemStack(output) + local itemn = itemstack:get_name() + + if crafting.registered_crafts[itemn] ~= nil then + minetest.log("warning", + "Tried to register an existing craft " .. itemn) + + return + end + + local craftdef = { + output = itemstack, + description = def.description or minetest.registered_items[itemn].description, + items = def.items or default.default_craftdef.items, + } + + if #craftdef.items > 4 then + minetest.log("warning", + "Attempting to register craft " .. itemn .." with more than " + .. crafting.max_inputs .. " inputs, keeping") + end + + for i = 1, crafting.max_inputs do + craftdef.items[i] = ItemStack(craftdef.items[i]) + end + + crafting.registered_crafts[itemn] = craftdef + + minetest.log("info", "Registered recipe for " .. itemn .. ": " .. dump(crafting.registered_crafts[itemn])) +end + +function crafting.craft(output, items) + -- `output` can be any ItemStack value + -- Duplicate items in `items` should work correctly + + print(dump(output)) + + local wanted_itemstack = ItemStack(output) + + print(dump(wanted_itemstack:to_string())) + + local craftdef = crafting.registered_crafts[wanted_itemstack:get_name()] + + if craftdef == nil then + minetest.log("warning", + "Tried to craft an unregistered item " .. wanted_itemstack:get_name()) + + return nil + end + + --print("Craftdef items: " .. dump(craftdef.items)) + print("Input before: " .. dump(items)) + + -- Check for validity + + local craft_count = wanted_itemstack:get_count() + + for i = 1, crafting.max_inputs do + local required_itemstack = ItemStack(craftdef.items[i]) + local itemc = 0 + + if required_itemstack ~= nil and required_itemstack:get_count() ~= 0 then + for j = 1, crafting.max_inputs do + local input_itemstack = ItemStack(items[j]) + + if input_itemstack:get_name() == required_itemstack:get_name() then + itemc = itemc + input_itemstack:get_count() + end + end + + craft_count = math.min(craft_count, math.floor(itemc / required_itemstack:get_count())) + + if craft_count < 1 then + minetest.log("warning", + "Not enough items to craft " .. wanted_itemstack:get_name()) + + return nil -- Not enough items + end + end + end + + --print("Craft count: " .. craft_count .. "/" .. output.count) + + -- Iterate through second time to take items used for crafting + + local function remove_used_item(itemn, count) + local items_required = count + + for i = 1, crafting.max_inputs do + local input_itemstack = ItemStack(items[i]) + + if items[i] ~= nil and input_itemstack:get_name() == itemn then + local items_left = items_required - input_itemstack:get_count() + + print("Taking " .. items_required .. " items from " .. itemn) + + input_itemstack:take_item(items_required) + + if items_left > 0 then + items_required = items_required - (items_required - items_left) + else + items[i] = input_itemstack:to_table() + break + end + + items[i] = input_itemstack:to_table() + end + end + end + + for i = 1, crafting.max_inputs do + local required_itemstack = ItemStack(craftdef.items[i]) + + if craftdef.items[i] ~= nil then + remove_used_item(required_itemstack:get_name(), required_itemstack:get_count() * craft_count) + end + end + + print("Input after: " .. dump(items)) + + return items +end + +crafting.register_craft( + "default:stone 4", + { + items = { + {name = "default:stick", count = 3}, + {name = "default:fiber", count = 2}, + {name = "group:stone", count = 2}, + }, +}) + +crafting.craft( + "default:stone 2", + { + {name = "default:stick", count = 4}, -- 0 leftover + {name = "default:stick", count = 5}, -- 3 leftover + {name = "default:fiber", count = 9}, -- 5 leftover + {name = "group:stone", count = 4}, -- 0 leftover +}) + +local function on_player_recieve_fields(player, form_name, fields) + if form_name ~= "crafting:crafting" or fields.cancel then return end + + local inv = player:get_inventory() + + if fields.trade then + local item = player:get_wielded_item() + + local trade_wanted1 = inv:get_stack("gold_trade_wanted", 1):to_string() + local trade_wanted2 = inv:get_stack("gold_trade_wanted", 2):to_string() + + local trade_in1 = inv:get_stack("gold_trade_in", 1):to_string() + local trade_in2 = inv:get_stack("gold_trade_in", 2):to_string() + + local matches = trade_wanted1 == trade_in1 and trade_wanted2 == trade_in2 + + local meta = minetest.deserialize(item:get_metadata()) + + local trade = {"gold:gold", "gold:gold", "default:stick"} + local trade_type = "" + + if meta then + trade = meta.trade + trade_type = meta.trade_type + end + + if matches then + if inv:room_for_item("gold_trade_out", trade[3]) then + inv:add_item("gold_trade_out", trade[3]) + inv:set_stack("gold_trade_in", 1, "") + inv:set_stack("gold_trade_in", 2, "") + end + end + end +end + +minetest.register_on_player_receive_fields(on_player_recieve_fields) + +default.log("mod:crafting", "loaded") diff --git a/mods/craftingguide/README.txt b/mods/craftingguide/README.txt deleted file mode 100644 index 6e72fcd..0000000 --- a/mods/craftingguide/README.txt +++ /dev/null @@ -1,9 +0,0 @@ -Crafting guide mod -================== - -By Kaadmy, for Pixture - -This mod adds a crafting guide in your inventory. - -Asset license: CC BY-SA 4.0 -Source license: LGPLv2.1 diff --git a/mods/craftingguide/depends.txt b/mods/craftingguide/depends.txt deleted file mode 100644 index 4ad96d5..0000000 --- a/mods/craftingguide/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default diff --git a/mods/craftingguide/init.lua b/mods/craftingguide/init.lua deleted file mode 100644 index 5315454..0000000 --- a/mods/craftingguide/init.lua +++ /dev/null @@ -1,183 +0,0 @@ --- --- Crafting guide mod --- By Kaadmy, for Pixture --- - -craftingguide = {} -craftingguide.items = {} -craftingguide.itemlist = {} -craftingguide.users = {} -- {item = selected item, itemno = recipe no., page = page no.} - -local page_size = 8 * 4 - -function craftingguide.get_formspec(name) - local user = craftingguide.users[name] - - local page = user.page - local max_pages = math.floor(#craftingguide.itemlist / page_size) + 1 - - local form = "" - form = form .. default.ui.get_page("core_craftingguide") - - form = form .. "label[0.41,1.74;"..user.itemno.."/"..#craftingguide.items[user.item].."]" -- itemno - form = form .. "label[3.9,8.15;"..page.."/"..max_pages.."]" -- page - form = form .. "label[4.4,2.5;"..minetest.formspec_escape(minetest.registered_items[user.item].description).."]" -- itemname - - local method = craftingguide.items[user.item][user.itemno].type - if method == "normal" or method == "crafting" then - form = form .. "image[4.25,1.5;1,1;craftingguide_method_crafting.png]" - elseif method == "cooking" then - form = form .. "image[4.25,1.5;1,1;craftingguide_method_cooking.png]" --- fuel recipes are different --- elseif method == "fuel" then --- form = form .. "image[4.25,1.5;1,1;craftingguide_method_fuel.png]" - else - form = form .. "image[4.25,1.5;1,1;craftingguide_method_unknown.png]" - form = form .. "label[4.1,1.73;"..method.."]" - end - - local recipes = craftingguide.items[user.item] - local recipe = recipes[user.itemno] - - form = form .. default.ui.fake_itemstack(6.25, 1.5, ItemStack(recipe.output), "guide_craftresult") - --- print(dump(recipe)) - for slot_index, itemname in pairs(recipe.items) do - local x = slot_index - 1 - - local group = string.match(itemname, "group:(.*)") - - local w = 3 - if recipe.width ~= 0 then - w = recipe.width - end - - if group == nil then - form = form .. default.ui.fake_simple_itemstack(1.25 + (x % w), 0.5 + math.floor(x / w), itemname, "guide_craftgrid_"..itemname) - else - form = form .. default.ui.item_group(1.25 + (x % w), 0.5 + math.floor(x / w), group, "guide_craftgrid_"..itemname) - end - end - - local page_start = ((page * page_size) - page_size) + 1 - - local inv_x = 0 - local inv_y = 0 - - for item_index = page_start, (page_start + page_size) - 1 do - local recipes = craftingguide.items[craftingguide.itemlist[item_index]] - - if recipes ~= nil then - local itemname = ItemStack(recipes[1].output):get_name() - - form = form .. default.ui.fake_simple_itemstack(0.25 + inv_x, 4 + inv_y, itemname, "guide_item_"..itemname) - - inv_x = inv_x + 1 - if inv_x >= 8 then - inv_x = 0 - inv_y = inv_y + 1 - end - else - break - end - end - - return form -end - -local function receive_fields(player, form_name, fields) - if form_name == "core_craftingguide" and not fields.quit then - local name = player:get_player_name() - local user = craftingguide.users[name] - - local page = user.page - local recipes = craftingguide.items[user.item] - local itemno = user.itemno - - local max_pages = math.floor(#craftingguide.itemlist / page_size) + 1 - - if fields.guide_next_recipe then - if itemno < #recipes then - itemno = itemno + 1 - else - itemno = 1 - end - elseif fields.guide_prev_recipe then - if itemno <= 1 then - itemno = #recipes - else - itemno = itemno - 1 - end - end - - - if fields.guide_next and page < max_pages then - page = page + 1 - elseif fields.guide_prev and page > 1 then - page = page - 1 - end - - for fieldname, val in pairs(fields) do - local itemname = string.match(fieldname, "guide_item_(.*)") - - if itemname ~= nil then - itemno = 1 - craftingguide.users[name].item = itemname - end - end - - craftingguide.users[name].page = page - craftingguide.users[name].itemno = itemno - - minetest.show_formspec(name, "core_craftingguide", craftingguide.get_formspec(name)) - end -end - -local function on_joinplayer(player) - local name = player:get_player_name() - - craftingguide.users[name] = {page = 1, item = craftingguide.itemlist[1], itemno = 1} -end - -local function on_leaveplayer(player) - local name = player:get_player_name() - - craftingguide.users[name] = nil -end - -local function load_recipes() - for itemname, itemdef in pairs(minetest.registered_items) do - local recipes = minetest.get_all_craft_recipes(itemname) - - if recipes ~= nil and itemname ~= "" then --- print(dump(recipes)) - craftingguide.items[itemname] = recipes - table.insert(craftingguide.itemlist, itemname) - end - end - - table.sort(craftingguide.itemlist) - - print("Got "..#craftingguide.itemlist.." craftable items") -end - -minetest.after(0, load_recipes) - -minetest.register_on_joinplayer(on_joinplayer) -minetest.register_on_leaveplayer(on_leaveplayer) -minetest.register_on_player_receive_fields(receive_fields) - -local form_craftingguide = default.ui.get_page("core") -form_craftingguide = form_craftingguide .. default.ui.get_itemslot_bg(0.25, 4, 8, 4) -form_craftingguide = form_craftingguide .. default.ui.image_button(2.5, 7.9, 1, 1, "guide_prev", "ui_arrow_bg.png^[transformR90") -form_craftingguide = form_craftingguide .. default.ui.image_button(5, 7.9, 1, 1, "guide_next", "ui_arrow_bg.png^[transformR270") - -form_craftingguide = form_craftingguide .. default.ui.image_button(0.25, 0.5, 1, 1, "guide_next_recipe", "ui_arrow_bg.png") -form_craftingguide = form_craftingguide .. default.ui.image_button(0.25, 2.5, 1, 1, "guide_prev_recipe", "ui_arrow_bg.png^[transformFY") -form_craftingguide = form_craftingguide .. default.ui.get_itemslot_bg(1.25, 0.5, 3, 3) -form_craftingguide = form_craftingguide .. default.ui.get_itemslot_bg(6.25, 1.5, 1, 1) -form_craftingguide = form_craftingguide .. "image[5.25,1.5;1,1;"..minetest.formspec_escape("ui_arrow.png^[transformR270").."]" - -default.ui.register_page("core_craftingguide", form_craftingguide) - -default.log("mod:craftingguide", "loaded") diff --git a/mods/craftingguide/textures/craftingguide_method_cooking.png b/mods/craftingguide/textures/craftingguide_method_cooking.png deleted file mode 100644 index 9a4ed1dd8d22b9f538e81affc31afe89a21e90a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~hb*Hk|K)YJlYv5#C9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3hti10pX2&;y^_uo-U3d7N?W{{QqyytlH4p*w}dR$dMMEv+3vNG)geAF0pEz z2o!7VY;-c<;Ym2C`ti@tVv&7ImZ*HxtN8cF^6<@`QAXS#Xx3cD$J;)oF_#{47U%?m? zab{U8jhNVhVZNF9X1~oY9uF3D<+#-4K2yLn>4;Cj34zZUczgV+DCl74;7#xY@Jor2 zcLDqf#GVJsnobl1EKDI+uz7kLGdpE7`oz;Yo!s3&U`G>F9@ri;y_nCi25h1Xl637e znnXUI4LbwZb0R;A=|BWC_NF$yxxNur14gnngwbiuXxXQK0~}o?3)|tLM@OX=6xVe{ zSu>X*Pbm+bIZJRpa@~ZbKO4m9-=(6mJBsHZjl7izVtGG!qTR9WJbH1o48^gjl7_c} zx08dnB}V$8#1NFL3hq>Jw}OurJa+G@;k9K8%e4ucbn!TAv~#n=iv6qVNs{cz{sktxZ8JVzIoI|4%40jBG1} w8ObU_8FVusNTEy$iMXGTZW#Jj2s5HrgmmcYK#)SZ6cVu%>MPy6v4{7SZ}im96951J diff --git a/mods/craftingguide/textures/craftingguide_method_crafting.png b/mods/craftingguide/textures/craftingguide_method_crafting.png deleted file mode 100644 index 47a908d037189abbc030b21c9de6cea88c98015e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~hb$utm&K8`FF+y564!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiAgtPZ!4!i_^(}{{OdUR&8i)Y-~JuAEZdFzG_Z~B!ACIhNqofO4D1?+ zG$HlsB;U?AGv5r8UATzXbnAyS6cHm}mI87cU>I;*1N!q%LJ(j#fD^z4;7)PW-GY7r ze#Bv{>!)$d5(zQE;?-luJjnw3Cgh4Po}OQ@VwF-6dz`sE69MKxZ4f7yyNJ;|jYKdW zI3f4bD9xx-Iyd7>k4_#YrL~Z$DvhCa+0v@(^f1BJZNBz=k#IWI--6_>Eva(uCJ~Z~ z#9y%-`_nMYnfzH0yML#uOtTg5L7DNT8F>9Zc%#F)=fCnS-6Z9;nM!sF9$%*b^c6?> zx#Hl+eT@%ld|2c7x;O`I1kn5vIL_5}21M8NpP_ewk|~r>uMS%Cy_qvVFt&=`Y+uaG q>M%M-c4uXC=COTN@xSSzclyJfl3uYVg;^a&=g97?Y|cEk&m!O4gOz9i diff --git a/mods/craftingguide/textures/craftingguide_method_fuel.png b/mods/craftingguide/textures/craftingguide_method_fuel.png deleted file mode 100644 index 70744ace88f900d7d881e8762d8896dcd7ad8252..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~hb*(Wl)D6T4p2z4#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-J9H?lDr;B5V#p$(^FY+E%;Bh%0x-XA;N#8-K9KqBTYXVcb-ydZA z*Zsm@NL9pD;FW%JiU0G%9$uWbrVI_=|4obt{pgfl%G~xxiD7zxU4sc@Q6R&mvU>-M zxC>O4onbxG_2?SUlfn++PKo5d+Af>t#~t6wq1pE0g!79N|KB$DW&h>q+hdV=t9kR= mz5J(l^BK(cJRNcA_uTykw+ym^et!pfg2B_(&t;ucLK6T_Vr+E) diff --git a/mods/craftingguide/textures/craftingguide_method_fuel.xcf b/mods/craftingguide/textures/craftingguide_method_fuel.xcf deleted file mode 100644 index 7338825afa931b1992b7157a67041c5d2dfb1d11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1087 zcmbtT%}&BV5Z)~mK_ucY3GuKO6FgubJ@yT2h1&^ux%Wv3I@l?AQTn-z z$U6i6EyS7!k8Rt*Xyo`YtY--9KQbo>KY9@|?C8@&VR>O-UrQH0Kv%Y|V6?wwRQ1_zfTOR`*s{6rv98jB z;@h^OthJwg9y9LSk4}X1f$K(2yj&2cH%ot&{3xD-H2S3wMD>2~M5{f^e)7WL*-wv6 zle7{jokApO!Q<}`zayrYi zXOgWaC{Q!%BEN`QN;8V4l$KF9SJI|o!Zle+o3Mg8U(4x4N=x=cNt^$dZmdbK<+PEL fZZtNeZ%9E@$wI)-_alf9q(n-hOmtD%;g{qWd#>Wo diff --git a/mods/craftingguide/textures/craftingguide_method_unknown.png b/mods/craftingguide/textures/craftingguide_method_unknown.png deleted file mode 100644 index 51345980bf637754439dbca7b3abf35f73bf92a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~hb*I{*yWYmmIH+(OI#yLobz*YQ}ap~oQqNuOHxx5 z$}>wc6x=<11Hv2m#DR+1JY5_^EKVN{zRlUZIsrl)!%@Od<=M^nl_ z0nb}E{=K;<=5gqEi^Ua&27#t)5z|=SUq1A#BXH|6PCWW ZVT@?ANEhyGKL>OXgQu&X%Q~loCIDAAY9s&v diff --git a/mods/craftingguide/textures/craftingguide_method_unknown.xcf b/mods/craftingguide/textures/craftingguide_method_unknown.xcf deleted file mode 100644 index e7623ccfae39aedfa4d32ea01f7fb1c0f68f7821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1028 zcmb7?%SyvQ6ozNUduy>?1JT7S>!Q*U@BtJN7lN-4(7u?8SNiuylemSI9^Ft3hY@jRasFLZ7f zEr&1Eiosck#UV4;~ipSHux#5;;uQ*#zm?ue-~d{a@&D|snjP_+on>QLm7N7UOWRd!>@L_+(O@gZ2IB>X%-#ZTGEp32Cq89g Dn7z%g diff --git a/mods/default/formspec.lua b/mods/default/formspec.lua index 68fe33c..1289ca2 100644 --- a/mods/default/formspec.lua +++ b/mods/default/formspec.lua @@ -171,17 +171,14 @@ form_core = form_core .. "size[8.5,9]" form_core = form_core .. default.ui.core.colors form_core = form_core .. default.ui.core.bg form_core = form_core .. default.ui.tab(-0.9, 0.5, "tab_crafting", "ui_icon_crafting.png", "Crafting") -if minetest.get_modpath("craftingguide") ~= nil then - form_core = form_core .. default.ui.tab(-0.9, 1.28, "tab_craftingguide", "ui_icon_craftingguide.png", "Crafting Guide") -end if minetest.get_modpath("armor") ~= nil then - form_core = form_core .. default.ui.tab(-0.9, 2.06, "tab_armor", "ui_icon_armor.png", "Armor") + form_core = form_core .. default.ui.tab(-0.9, 1.28, "tab_armor", "ui_icon_armor.png", "Armor") end if minetest.get_modpath("achievements") ~= nil then - form_core = form_core .. default.ui.tab(-0.9, 2.84, "tab_achievements", "ui_icon_achievements.png", "Achievements") + form_core = form_core .. default.ui.tab(-0.9, 2.06, "tab_achievements", "ui_icon_achievements.png", "Achievements") end if minetest.get_modpath("player_skins") ~= nil then - form_core = form_core .. default.ui.tab(-0.9, 3.62, "tab_player_skins", "ui_icon_player_skins.png", "Player Skins") + form_core = form_core .. default.ui.tab(-0.9, 2.84, "tab_player_skins", "ui_icon_player_skins.png", "Player Skins") end form_core = form_core .. "background[0,0;8.5,9;ui_formspec_bg_tall.png]" default.ui.register_page("core", form_core) @@ -238,8 +235,6 @@ function default.ui.receive_fields(player, form_name, fields) if fields.tab_crafting then minetest.show_formspec(name, "core_crafting", default.ui.get_page("core_crafting")) - elseif minetest.get_modpath("craftingguide") ~= nil and fields.tab_craftingguide then - minetest.show_formspec(name, "core_craftingguide", craftingguide.get_formspec(name)) elseif minetest.get_modpath("armor") ~= nil and fields.tab_armor then minetest.show_formspec(name, "core_armor", default.ui.get_page("core_armor")) elseif minetest.get_modpath("achievements") ~= nil and fields.tab_achievements then