223 lines
7.9 KiB
Lua
223 lines
7.9 KiB
Lua
crafting_guide = {}
|
|
|
|
crafting_guide.form = "size[3,3;]"..default.gui_colors..default.gui_bg;
|
|
crafting_guide.form_back = "size[3,4;]"..default.gui_colors..default.gui_bg.."button[0,3;3,1;btn_back;Back]";
|
|
|
|
crafting_guide.form_items = "size[8,7]"..default.gui_colors..default.gui_bg.."button[0,6;3,1;btn_left;<]button[5,6;3,1;btn_right;>]button[3,6;2,1;btn_quests;Quests]"
|
|
|
|
crafting_guide.pages = {}
|
|
|
|
minetest.register_privilege("creative", {
|
|
description = "",
|
|
give_to_singleplayer = false,
|
|
})
|
|
|
|
function crafting_guide.get_formspec(crafts,back_button)
|
|
local str = crafting_guide.form
|
|
if back_button then
|
|
str = crafting_guide.form_back
|
|
end
|
|
local x = 1
|
|
local y = 1
|
|
local j = 1
|
|
for i=1,9 do
|
|
if (string.find((crafts[1].items[j] or ""),"group:") or 0) == 1 then
|
|
if crafts[1].items[j] then
|
|
str = str .. ("button["..(x-1)..","..(y-1)..";1,1;group_"..i..";"..string.sub(crafts[1].items[j], 7).."]")
|
|
else
|
|
str = str .. ("button["..(x-1)..","..(y-1)..";1,1;;]")
|
|
end
|
|
else
|
|
str = str .. ("item_image_button["..(x-1)..","..(y-1)..";1,1;"..(crafts[1].items[j] or "")..";"..(crafts[1].items[j] or "")..";]")
|
|
end
|
|
j = j + 1
|
|
|
|
x = x+1
|
|
if x > 3 then
|
|
x = 1
|
|
y = y+1
|
|
end
|
|
end
|
|
return str
|
|
end
|
|
|
|
function crafting_guide.get_furnace_formspec(recipe,back_button)
|
|
local str = crafting_guide.form
|
|
if back_button then
|
|
str = crafting_guide.form_back
|
|
end
|
|
|
|
str = str .. "label[0,0;Furnace:]"
|
|
|
|
str = str .. "item_image_button[0,1;1,1;" .. recipe.input .. ";" .. recipe.input .. ";]"
|
|
str = str .. "item_image_button[1,1;1,1;" .. recipe.pattern .. ";" .. recipe.pattern .. ";]"
|
|
str = str .. "item_image_button[2,1;1,1;" .. recipe.output .. ";" .. recipe.output .. ";]"
|
|
|
|
return str
|
|
end
|
|
|
|
function crafting_guide.get_item_formspec(page, player)
|
|
page = page or 0
|
|
local str = crafting_guide.form_items
|
|
local creative_priv = minetest.get_player_privs(player:get_player_name()).creative
|
|
|
|
if page > -1 then
|
|
local i = 0
|
|
local x = 0
|
|
local y = 0
|
|
|
|
local items = {}
|
|
for name,def in pairs(minetest.registered_items) do
|
|
if not(def.groups.not_in_creative_inventory) then
|
|
table.insert(items,name)
|
|
end
|
|
end
|
|
|
|
table.sort(items)
|
|
|
|
for _,name in ipairs(items) do
|
|
if ((minetest.get_all_craft_recipes(name) or furnace.get_recipe(name)) or creative_priv) and
|
|
i < (8*6)*(page+1) then
|
|
if i > (8*6)*(page)-1 then
|
|
str = str .. "item_image_button["..x..","..y..";1,1;"..name..";"..name..";]"
|
|
x = x + 1
|
|
if x > 7 then
|
|
x = 0
|
|
y = y +1
|
|
end
|
|
end
|
|
i = i +1
|
|
end
|
|
end
|
|
elseif page == -1 then
|
|
str = str .. "label[0,0;Mining :]"
|
|
str = str .. "item_image_button[0,0.5;1,1;default:axe_stone;default:axe_stone;]"
|
|
str = str .. "item_image_button[1,0.5;1,1;default:simple_hammer;default:simple_hammer;]"
|
|
str = str .. "item_image_button[2,0.5;1,1;default:flint_pick;default:flint_pick;]"
|
|
str = str .. "item_image_button[3,0.5;1,1;default:pick;default:pick;]"
|
|
str = str .. "item_image_button[4,0.5;1,1;default:pick_copper;default:pick_copper;]"
|
|
str = str .. "item_image_button[5,0.5;1,1;default:pick_diamond;default:pick_diamond;]"
|
|
str = str .. "item_image_button[7,0.5;1,1;torch:torch;torch:torch;]"
|
|
|
|
str = str .. "label[0,2;Weapons :]"
|
|
str = str .. "item_image_button[0,2.5;1,1;skills:spear_lvl_1;skills:spear_lvl_1;]"
|
|
str = str .. "item_image_button[1,2.5;1,1;skills:sword_lvl_20;skills:sword_lvl_20;]"
|
|
str = str .. "item_image_button[2,2.5;1,1;skills:bow_lvl_1;skills:bow_lvl_1;]"
|
|
|
|
str = str .. "label[0,4;Furnace :]"
|
|
str = str .. "item_image_button[0,4.5;1,1;furnace:furnace;furnace:furnace;]"
|
|
str = str .. "item_image_button[1,4.5;1,1;furnace:pattern_rod;furnace:pattern_rod;]"
|
|
str = str .. "item_image_button[2,4.5;1,1;default:coalblock_glowing;default:coalblock_glowing;]"
|
|
|
|
str = str .. "label[4,4;Workbench :]"
|
|
str = str .. "item_image_button[4,4.5;1,1;default:workbench;default:workbench;]"
|
|
str = str .. "item_image_button[5,4.5;1,1;default:workbench_v2;default:workbench_v2;]"
|
|
elseif page == -2 then
|
|
local x = 0
|
|
local y = 0
|
|
str = str .. "label[0,0;Mobs :]"
|
|
for i,v in ipairs(mobs.mobs) do
|
|
local name = v[1]
|
|
str = str .. "item_image_button[".. x ..",".. y+0.5 ..";1,1;"..name..";"..name..";]"
|
|
x = x + 1
|
|
if x > 7 then
|
|
x = 0
|
|
y = y +1
|
|
end
|
|
end
|
|
|
|
local ores = {}
|
|
local a = {}
|
|
for _,v in pairs(minetest.registered_ores) do
|
|
if not(a[v.ore]) then
|
|
table.insert(ores, v.ore)
|
|
a[v.ore] = true
|
|
end
|
|
end
|
|
str = str .. "label[0,2.5;Ores :]"
|
|
x = 0
|
|
y = 3
|
|
for _,name in ipairs(ores) do
|
|
str = str .. "item_image_button[".. x ..",".. y ..";1,1;"..name..";"..name..";]"
|
|
x = x + 1
|
|
if x > 7 then
|
|
x = 0
|
|
y = y +1
|
|
end
|
|
end
|
|
end
|
|
|
|
return str
|
|
end
|
|
|
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
if formname == "crafting_guide:book" then
|
|
if fields.btn_back then
|
|
minetest.show_formspec(player:get_player_name(), "crafting_guide:book_items", crafting_guide.get_item_formspec(crafting_guide.pages[player:get_player_name()], player))
|
|
elseif fields.quit then
|
|
crafting_guide.pages[player:get_player_name()] = nil
|
|
else
|
|
for i,j in pairs(fields) do
|
|
local crafts = minetest.get_all_craft_recipes(i)
|
|
if crafts then
|
|
minetest.show_formspec(player:get_player_name(), "crafting_guide:book", crafting_guide.get_formspec(crafts,true))
|
|
elseif furnace.get_recipe(i) then
|
|
minetest.show_formspec(player:get_player_name(), "crafting_guide:book", crafting_guide.get_furnace_formspec(furnace.get_recipe(i),true))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if formname == "crafting_guide:book_items" then
|
|
if fields.btn_left then
|
|
crafting_guide.pages[player:get_player_name()] = crafting_guide.pages[player:get_player_name()] -1
|
|
minetest.show_formspec(player:get_player_name(), "crafting_guide:book_items", crafting_guide.get_item_formspec(crafting_guide.pages[player:get_player_name()], player))
|
|
elseif fields.btn_right then
|
|
crafting_guide.pages[player:get_player_name()] = crafting_guide.pages[player:get_player_name()] +1
|
|
minetest.show_formspec(player:get_player_name(), "crafting_guide:book_items", crafting_guide.get_item_formspec(crafting_guide.pages[player:get_player_name()], player))
|
|
elseif fields.btn_quests then
|
|
minetest.show_formspec(player:get_player_name(), "quests:show_quests", quests.get_formspec(player:get_player_name()))
|
|
elseif fields.quit then
|
|
crafting_guide.pages[player:get_player_name()] = nil
|
|
else
|
|
for i,j in pairs(fields) do
|
|
local crafts = minetest.get_all_craft_recipes(i)
|
|
local has_creative_priv = minetest.get_player_privs(player:get_player_name()).creative
|
|
if has_creative_priv then
|
|
player:get_inventory():add_item("main", i .. " 99")
|
|
print("[crafting_guide] give " .. player:get_player_name() .. " " .. i .. " 99")
|
|
elseif crafts then
|
|
minetest.show_formspec(player:get_player_name(), "crafting_guide:book", crafting_guide.get_formspec(crafts,true))
|
|
elseif furnace.get_recipe(i) then
|
|
minetest.show_formspec(player:get_player_name(), "crafting_guide:book", crafting_guide.get_furnace_formspec(furnace.get_recipe(i),true))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
minetest.register_craftitem("crafting_guide:lens", {
|
|
inventory_image = "crafting_guide_lens.png",
|
|
description = "Lens",
|
|
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.under then
|
|
local crafts = minetest.get_all_craft_recipes(minetest.get_node(pointed_thing.under).name)
|
|
if crafts then
|
|
minetest.show_formspec(user:get_player_name(), "crafting_guide:lens", crafting_guide.get_formspec(crafts))
|
|
else
|
|
minetest.show_formspec(user:get_player_name(), "crafting_guide:lens", "size[3,3;]"..default.gui_colors..default.gui_bg.."label[0,0;No crafts]")
|
|
end
|
|
end
|
|
end
|
|
})
|
|
|
|
minetest.register_craftitem("crafting_guide:book", {
|
|
inventory_image = "crafting_guide_book.png",
|
|
description = "Crafting Guide",
|
|
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
crafting_guide.pages[user:get_player_name()] = 0
|
|
minetest.show_formspec(user:get_player_name(), "crafting_guide:book_items", crafting_guide.get_item_formspec(0, user))
|
|
end
|
|
})
|