mirror of
https://github.com/minetest-mods/craftguide.git
synced 2025-06-28 22:26:28 +02:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
961b536cd7 | |||
44ebb84e89 | |||
5fce8ddbda | |||
39ed2c2c45 | |||
8b309106c3 | |||
9625542468 |
@ -4,5 +4,6 @@ allow_defined_top = true
|
||||
read_globals = {
|
||||
"minetest",
|
||||
"default",
|
||||
"sfinv",
|
||||
"sfinv_buttons",
|
||||
}
|
||||
|
2
LICENSE
2
LICENSE
@ -1,4 +1,4 @@
|
||||
« Copyright © 2015-2017, Jean-Patrick Guerrero <jeanpatrick.guerrero@gmail.com>
|
||||
« Copyright © 2015-2018, Jean-Patrick Guerrero <jeanpatrick.guerrero@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
|
11
README.md
11
README.md
@ -1,14 +1,15 @@
|
||||
##  Crafting Guide ##
|
||||
|
||||
#### A Crafting Guide for Minetest that doesn't suck. ####
|
||||
#### `craftguide` is the most comprehensive crafting guide on Minetest. ####
|
||||
#### Consult the [Minetest Wiki](http://wiki.minetest.net/Crafting_guide) for more details. ####
|
||||
|
||||
#### `craftguide` is the most comprehensive mod of its category. ####
|
||||
#### Consult the [Minetest Wiki](http://wiki.minetest.net/Crafting_guide) for more details and comparisons. ####
|
||||
|
||||
#### This crafting guide is usable with a blue book named *"Crafting Guide"*. ####
|
||||
#### This crafting guide is usable with a blue book named *"Crafting Guide"* ####
|
||||
|
||||
#### This crafting guide features two modes : Standard and Progressive. ####
|
||||
The Progressive mode is a Terraria-like system that only shows recipes you can craft from items in inventory.
|
||||
The progressive mode can be enabled with `craftguide_progressive_mode = true` in `minetest.conf`.
|
||||
|
||||
`craftguide` is also integrated in `sfinv` (Minetest Game inventory) when you enable it with
|
||||
`craftguide_sfinv_only = true` in `minetest.conf`.
|
||||
|
||||

|
||||
|
@ -1,2 +1,3 @@
|
||||
sfinv?
|
||||
sfinv_buttons?
|
||||
intllib?
|
||||
|
389
init.lua
389
init.lua
@ -1,5 +1,8 @@
|
||||
local craftguide, datas, mt = {}, {searches = {}}, minetest
|
||||
|
||||
local progressive_mode = mt.settings:get_bool("craftguide_progressive_mode")
|
||||
local sfinv_only = mt.settings:get_bool("craftguide_sfinv_only")
|
||||
|
||||
local get_recipe, get_recipes = mt.get_craft_recipe, mt.get_all_craft_recipes
|
||||
local get_result, show_formspec = mt.get_craft_result, mt.show_formspec
|
||||
local reg_items = mt.registered_items
|
||||
@ -20,6 +23,7 @@ local MIN_LIMIT, MAX_LIMIT = 9, 12
|
||||
DEFAULT_SIZE = min(MAX_LIMIT, max(MIN_LIMIT, DEFAULT_SIZE))
|
||||
|
||||
local GRID_LIMIT = 5
|
||||
local BUTTON_SIZE = 1.1
|
||||
|
||||
local group_stereotypes = {
|
||||
wool = "wool:white",
|
||||
@ -56,8 +60,7 @@ local function extract_groups(str)
|
||||
end
|
||||
|
||||
local function colorize(str)
|
||||
-- If client <= 0.4.14, don't colorize for compatibility.
|
||||
return mt.colorize and mt.colorize("#FFFF00", str) or str
|
||||
return mt.colorize("#FFFF00", str)
|
||||
end
|
||||
|
||||
local function get_fueltime(item)
|
||||
@ -84,30 +87,35 @@ function craftguide:get_tooltip(item, recipe_type, cooktime, groups)
|
||||
colorize(groups[i]) .. (groups[i + 1] and ", " or "")
|
||||
end
|
||||
|
||||
tooltip = tooltip .. S("Any item belonging to the group(s)") .. ": " .. groupstr
|
||||
tooltip = tooltip ..
|
||||
S("Any item belonging to the group(s)") .. ": " .. groupstr
|
||||
end
|
||||
|
||||
if recipe_type == "cooking" then
|
||||
tooltip = tooltip .. item_desc .. "\n"
|
||||
.. S("Cooking time") .. ": " .. colorize(cooktime)
|
||||
tooltip = tooltip .. item_desc .. "\n" ..
|
||||
S("Cooking time") .. ": " .. colorize(cooktime)
|
||||
end
|
||||
|
||||
if fueltime > 0 then
|
||||
tooltip = tooltip .. item_desc .. "\n"
|
||||
.. S("Burning time") .. ": " .. colorize(fueltime)
|
||||
tooltip = tooltip .. item_desc .. "\n" ..
|
||||
S("Burning time") .. ": " .. colorize(fueltime)
|
||||
end
|
||||
|
||||
return has_extras and tooltip .. "]" or ""
|
||||
end
|
||||
|
||||
function craftguide:get_recipe(iY, xoffset, tooltip, item, recipe_num, recipes, show_usage)
|
||||
function craftguide:get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage)
|
||||
local formspec, recipes_total = "", #recipes
|
||||
if recipes_total > 1 then
|
||||
formspec = formspec ..
|
||||
"button[0," .. (iY + 3.3) .. ";2,1;alternate;" .. S("Alternate") .. "]" ..
|
||||
"label[0," .. (iY + 2.8) .. ";" ..
|
||||
"button[" .. (iX - (sfinv_only and 2 or 2.4)) .. "," ..
|
||||
(iY + (sfinv_only and 3.9 or 3.3)) ..
|
||||
";2,1;alternate;" .. S("Alternate") .. "]" ..
|
||||
|
||||
"label[" .. (iX - (sfinv_only and 2 or 2.4)) .. "," ..
|
||||
(iY + (sfinv_only and 3.5 or 2.9)) .. ";" ..
|
||||
(show_usage and S("Usage") or S("Recipe")) .. " " ..
|
||||
S("@1 of @2", recipe_num, recipes_total) .. "]"
|
||||
S("@1 of @2", recipe_num, recipes_total) .. "]"
|
||||
end
|
||||
|
||||
local recipe_type = recipes[recipe_num].type
|
||||
@ -117,11 +125,14 @@ function craftguide:get_recipe(iY, xoffset, tooltip, item, recipe_num, recipes,
|
||||
if recipe_type == "cooking" or (recipe_type == "normal" and width == 0) then
|
||||
local icon = recipe_type == "cooking" and "furnace" or "shapeless"
|
||||
formspec = formspec ..
|
||||
"image[" .. (xoffset - 0.8) .. "," .. (iY + 1.7) ..
|
||||
";0.5,0.5;craftguide_" .. icon .. ".png]"
|
||||
"image[" .. (xoffset + 0.2) .. "," .. (iY + (sfinv_only and 2.2 or 1.7)) ..
|
||||
";0.5,0.5;craftguide_" .. icon .. ".png" ..
|
||||
(icon == "shapeless" and "^[transformFX" or "") .. "]"
|
||||
end
|
||||
|
||||
if width == 0 then
|
||||
if recipe_type == "cooking" then
|
||||
width = 1
|
||||
elseif width == 0 then
|
||||
width = min(3, #items)
|
||||
end
|
||||
|
||||
@ -129,18 +140,17 @@ function craftguide:get_recipe(iY, xoffset, tooltip, item, recipe_num, recipes,
|
||||
|
||||
if recipe_type == "normal" and (width > GRID_LIMIT or rows > GRID_LIMIT) then
|
||||
formspec = formspec ..
|
||||
"label[" .. xoffset .. "," .. (iY + 2) .. ";" ..
|
||||
"label[" .. xoffset .. "," .. (iY + 2.2) .. ";" ..
|
||||
S("Recipe is too big to\nbe displayed (@1x@2)", width, rows) .. "]"
|
||||
else
|
||||
local btn_size = 1
|
||||
for i, v in pairs(items) do
|
||||
local X = (i - 1) % width + xoffset
|
||||
local X = (i - 1) % width + xoffset - width
|
||||
local Y = ceil(i / width + (iY + 2) - min(2, rows))
|
||||
|
||||
if recipe_type == "normal" and (width > 3 or rows > 3) then
|
||||
btn_size = width > 3 and 3 / width or 3 / rows
|
||||
X = btn_size * (i % width) + xoffset
|
||||
Y = btn_size * floor((i - 1) / width) + (iY + 3) - min(2, rows)
|
||||
BUTTON_SIZE = width > 3 and 3 / width or 3 / rows
|
||||
X = BUTTON_SIZE * (i % width) + 0
|
||||
Y = BUTTON_SIZE * floor((i - 1) / width) + (iY + 3) - min(2, rows)
|
||||
end
|
||||
|
||||
local groups = extract_groups(v)
|
||||
@ -149,23 +159,40 @@ function craftguide:get_recipe(iY, xoffset, tooltip, item, recipe_num, recipes,
|
||||
local tltip = self:get_tooltip(item_r, recipe_type, width, groups)
|
||||
|
||||
formspec = formspec ..
|
||||
"item_image_button[" .. X .. "," .. (Y + 0.2) .. ";" ..
|
||||
btn_size .. "," .. btn_size .. ";" .. item_r ..
|
||||
"item_image_button[" .. X .. "," ..
|
||||
(Y + (sfinv_only and 0.7 or 0.2)) .. ";" ..
|
||||
BUTTON_SIZE .. "," .. BUTTON_SIZE .. ";" .. item_r ..
|
||||
";" .. item_r .. ";" .. label .. "]" .. tltip
|
||||
end
|
||||
|
||||
BUTTON_SIZE = 1.1
|
||||
end
|
||||
|
||||
local output = recipes[recipe_num].output
|
||||
return formspec ..
|
||||
"image[" .. (xoffset - 1) .. "," .. (iY + 2.35) ..
|
||||
";0.9,0.7;craftguide_arrow.png]" ..
|
||||
"item_image_button[" .. (xoffset - 2) .. "," .. (iY + 2.2) .. ";1,1;" ..
|
||||
output .. ";" .. item .. ";]" .. tooltip
|
||||
local output = recipes[recipe_num].output:match("%S+")
|
||||
formspec = formspec ..
|
||||
"image[" .. (xoffset + 0.08) .. "," .. (iY + (sfinv_only and 2.85 or 2.35)) ..
|
||||
";0.9,0.7;craftguide_arrow.png^[transformFX]" ..
|
||||
"item_image_button[" .. (xoffset + 1) .. "," ..
|
||||
(iY + (sfinv_only and 2.7 or 2.2)) .. ";" ..
|
||||
BUTTON_SIZE .. "," .. BUTTON_SIZE .. ";" ..
|
||||
output .. ";" .. output .. ";]" .. self:get_tooltip(output)
|
||||
|
||||
local output_is_fuel = get_fueltime(output) > 0
|
||||
if output_is_fuel then
|
||||
formspec = formspec ..
|
||||
"image[" .. (xoffset + 2) .. "," ..
|
||||
(iY + (sfinv_only and 2.85 or 2.35)) ..
|
||||
";0.6,0.4;craftguide_arrow.png^[transformFX]" ..
|
||||
"image[" .. (xoffset + 2.6) .. "," .. (iY + (sfinv_only and 2.68 or 2.18)) ..
|
||||
";0.6,0.6;craftguide_fire.png]"
|
||||
end
|
||||
|
||||
return formspec
|
||||
end
|
||||
|
||||
function craftguide:get_formspec(player_name, is_fuel)
|
||||
local data = datas[player_name]
|
||||
local iY = data.iX - 5
|
||||
local iY = sfinv_only and 4 or data.iX - 5
|
||||
local ipp = data.iX * iY
|
||||
|
||||
if not data.items then
|
||||
@ -174,35 +201,40 @@ function craftguide:get_formspec(player_name, is_fuel)
|
||||
|
||||
data.pagemax = max(1, ceil(#data.items / ipp))
|
||||
|
||||
local formspec = "size[" .. (data.iX - 0.35) .. "," .. (iY + 4) .. ";]" .. [[
|
||||
background[1,1;1,1;craftguide_bg.png;true]
|
||||
local formspec = ""
|
||||
if not sfinv_only then
|
||||
formspec = formspec ..
|
||||
"size[" .. (data.iX - 0.35) .. "," .. (iY + 4) .. ";]" ..
|
||||
"background[1,1;1,1;craftguide_bg.png;true]" ..
|
||||
"tooltip[size_inc;" .. S("Increase window size") .. "]" ..
|
||||
"tooltip[size_dec;" .. S("Decrease window size") .. "]" ..
|
||||
"button[" .. (data.iX * 0.48) .. ",-0.02;0.7,1;size_inc;+]" ..
|
||||
"button[" .. ((data.iX * 0.48) + 0.5) .. ",-0.02;0.7,1;size_dec;-]"
|
||||
end
|
||||
|
||||
formspec = formspec .. [[
|
||||
button[2.4,0.23;0.8,0.5;search;?]
|
||||
button[3.05,0.23;0.8,0.5;clear;X]
|
||||
field_close_on_enter[filter;false]
|
||||
]] ..
|
||||
"tooltip[search;" .. S("Search") .. "]" ..
|
||||
"tooltip[clear;" .. S("Reset") .. "]" ..
|
||||
"tooltip[size_inc;" .. S("Increase window size") .. "]" ..
|
||||
"tooltip[size_dec;" .. S("Decrease window size") .. "]" ..
|
||||
"tooltip[prev;" .. S("Previous page") .. "]" ..
|
||||
"tooltip[next;" .. S("Next page") .. "]" ..
|
||||
"button[" .. (data.iX * 0.48) .. ",-0.02;0.7,1;size_inc;+]" ..
|
||||
"button[" .. ((data.iX * 0.48) + 0.5) ..
|
||||
",-0.02;0.7,1;size_dec;-]" ..
|
||||
"button[" .. (data.iX - 3.1) .. ",0;0.8,0.95;prev;<]" ..
|
||||
"label[" .. (data.iX - 2.2) .. ",0.18;" ..
|
||||
"button[" .. (data.iX - (sfinv_only and 2.6 or 3.1)) ..
|
||||
"," .. (sfinv_only and 0.03 or 0) .. ";0.8,0.95;prev;<]" ..
|
||||
"label[" .. (data.iX - (sfinv_only and 1.7 or 2.2)) .. "," ..
|
||||
(sfinv_only and 0.21 or 0.18) .. ";" ..
|
||||
colorize(data.pagenum) .. " / " .. data.pagemax .. "]" ..
|
||||
"button[" .. (data.iX - 1.2) .. ",0;0.8,0.95;next;>]" ..
|
||||
"field[0.3,0.32;2.5,1;filter;;" ..
|
||||
mt.formspec_escape(data.filter) .. "]"
|
||||
"button[" .. (data.iX - (sfinv_only and 0.7 or 1.2)) ..
|
||||
"," .. (sfinv_only and 0.03 or 0) .. ";0.8,0.95;next;>]" ..
|
||||
"field[0.3,0.32;2.5,1;filter;;" .. mt.formspec_escape(data.filter) .. "]"
|
||||
|
||||
local even_num = data.iX % 2 == 0
|
||||
local xoffset = data.iX / 2 + (even_num and 0.5 or 0)
|
||||
local xoffset = data.iX / 2.15
|
||||
|
||||
if not next(data.items) then
|
||||
formspec = formspec ..
|
||||
"label[" .. (xoffset - (even_num and 1.5 or 1)) .. ",2;" ..
|
||||
S("No item to show") .. "]"
|
||||
"label[" .. ((data.iX / 2) - 1) .. ",2;" .. S("No item to show") .. "]"
|
||||
end
|
||||
|
||||
local first_item = (data.pagenum - 1) * ipp
|
||||
@ -213,26 +245,31 @@ function craftguide:get_formspec(player_name, is_fuel)
|
||||
local Y = (i % ipp - X) / data.iX + 1
|
||||
|
||||
formspec = formspec ..
|
||||
"item_image_button[" .. (X - (X * 0.05)) .. "," .. Y .. ";1.1,1.1;" ..
|
||||
"item_image_button[" .. (X - (sfinv_only and 0 or (X * 0.05))) .. "," ..
|
||||
Y .. ";" .. BUTTON_SIZE .. "," .. BUTTON_SIZE .. ";" ..
|
||||
name .. ";" .. name .. "_inv;]"
|
||||
end
|
||||
|
||||
if data.item and reg_items[data.item] then
|
||||
local tooltip = self:get_tooltip(data.item)
|
||||
if not data.recipes_item or (is_fuel and not get_recipe(data.item).items) then
|
||||
formspec = formspec ..
|
||||
"image[" .. (xoffset - 1) .. "," .. (iY + 2.35) ..
|
||||
";0.9,0.7;craftguide_arrow.png]" ..
|
||||
"item_image_button[" .. xoffset .. "," .. (iY + 2.2) ..
|
||||
";1,1;" .. data.item .. ";" .. data.item .. ";]" ..
|
||||
tooltip ..
|
||||
"image[" .. (xoffset - 2) .. "," ..
|
||||
(iY + 2.18) .. ";1,1;craftguide_fire.png]"
|
||||
"image[" .. (xoffset + 0.08) .. "," ..
|
||||
(iY + (sfinv_only and 2.85 or 2.35)) ..
|
||||
";0.9,0.7;craftguide_arrow.png^[transformFX]" ..
|
||||
"item_image_button[" .. (xoffset - 1) .. "," ..
|
||||
(iY + (sfinv_only and 2.7 or 2.2)) ..
|
||||
";" .. BUTTON_SIZE .. "," .. BUTTON_SIZE ..
|
||||
";" .. data.item .. ";" .. data.item .. ";]" ..
|
||||
self:get_tooltip(data.item) ..
|
||||
"image[" .. (xoffset + 1) .. "," ..
|
||||
(iY + (sfinv_only and 2.68 or 2.18)) ..
|
||||
";1.1,1.1;craftguide_fire.png]"
|
||||
else
|
||||
local show_usage = data.show_usage
|
||||
formspec = formspec ..
|
||||
self:get_recipe(iY, xoffset, tooltip,
|
||||
data.item,
|
||||
self:get_recipe(data.iX,
|
||||
iY,
|
||||
xoffset,
|
||||
data.rnum,
|
||||
(show_usage and data.usages or data.recipes_item),
|
||||
show_usage)
|
||||
@ -240,7 +277,12 @@ function craftguide:get_formspec(player_name, is_fuel)
|
||||
end
|
||||
|
||||
data.formspec = formspec
|
||||
show_formspec(player_name, "craftguide", formspec)
|
||||
|
||||
if sfinv_only then
|
||||
return formspec
|
||||
else
|
||||
show_formspec(player_name, "craftguide", formspec)
|
||||
end
|
||||
end
|
||||
|
||||
local function player_has_item(T)
|
||||
@ -302,9 +344,10 @@ function craftguide:get_init_items()
|
||||
local items_list, counter = {}, 0
|
||||
for name, def in pairs(reg_items) do
|
||||
local is_fuel = get_fueltime(name) > 0
|
||||
if (not (def.groups.not_in_craft_guide == 1 or def.groups.not_in_creative_inventory == 1)) and
|
||||
(get_recipe(name).items or is_fuel) and
|
||||
def.description and def.description ~= "" then
|
||||
if (not (def.groups.not_in_craft_guide == 1 or
|
||||
def.groups.not_in_creative_inventory == 1)) and
|
||||
(get_recipe(name).items or is_fuel) and
|
||||
def.description and def.description ~= "" then
|
||||
|
||||
counter = counter + 1
|
||||
items_list[counter] = name
|
||||
@ -363,8 +406,9 @@ end
|
||||
function craftguide:get_item_usages(item)
|
||||
local usages = {}
|
||||
for name, def in pairs(reg_items) do
|
||||
if not (def.groups.not_in_creative_inventory == 1) and
|
||||
(get_recipe(name).items) and def.description and def.description ~= "" then
|
||||
if not (def.groups.not_in_craft_guide == 1 or
|
||||
def.groups.not_in_creative_inventory == 1) and
|
||||
get_recipe(name).items and def.description and def.description ~= "" then
|
||||
local recipes = get_recipes(name)
|
||||
for i = 1, #recipes do
|
||||
local recipe = recipes[i]
|
||||
@ -388,11 +432,28 @@ function craftguide:get_item_usages(item)
|
||||
return usages
|
||||
end
|
||||
|
||||
mt.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "craftguide" then return end
|
||||
local function get_fields(player, ...)
|
||||
local args, formname, fields = {...}
|
||||
if sfinv_only then
|
||||
fields = args[1]
|
||||
else
|
||||
formname, fields = args[1], args[2]
|
||||
end
|
||||
|
||||
if not sfinv_only and formname ~= "craftguide" then return end
|
||||
local player_name = player:get_player_name()
|
||||
local data = datas[player_name]
|
||||
|
||||
local show_fs = function(is_fuel)
|
||||
if sfinv_only then
|
||||
local context = sfinv.get_or_create_context(player)
|
||||
context.fuel = is_fuel
|
||||
sfinv.set_player_inventory_formspec(player, context)
|
||||
else
|
||||
craftguide:get_formspec(player_name, is_fuel)
|
||||
end
|
||||
end
|
||||
|
||||
if fields.clear then
|
||||
data.show_usage = nil
|
||||
data.filter = ""
|
||||
@ -401,7 +462,7 @@ mt.register_on_player_receive_fields(function(player, formname, fields)
|
||||
data.rnum = 1
|
||||
|
||||
data.items = progressive_mode and data.init_filter_items or datas.init_items
|
||||
craftguide:get_formspec(player_name)
|
||||
show_fs()
|
||||
|
||||
elseif fields.alternate then
|
||||
local num
|
||||
@ -412,14 +473,14 @@ mt.register_on_player_receive_fields(function(player, formname, fields)
|
||||
end
|
||||
|
||||
data.rnum = num and data.rnum + 1 or 1
|
||||
craftguide:get_formspec(player_name)
|
||||
show_fs()
|
||||
|
||||
elseif (fields.key_enter_field == "filter" or fields.search) and
|
||||
fields.filter ~= "" then
|
||||
data.filter = fields.filter:lower()
|
||||
data.pagenum = 1
|
||||
craftguide:get_filter_items(data, player)
|
||||
craftguide:get_formspec(player_name)
|
||||
show_fs()
|
||||
|
||||
elseif fields.prev or fields.next then
|
||||
data.pagenum = data.pagenum - (fields.prev and 1 or -1)
|
||||
@ -430,18 +491,20 @@ mt.register_on_player_receive_fields(function(player, formname, fields)
|
||||
data.pagenum = data.pagemax
|
||||
end
|
||||
|
||||
craftguide:get_formspec(player_name)
|
||||
show_fs()
|
||||
|
||||
elseif (fields.size_inc and data.iX < MAX_LIMIT) or
|
||||
(fields.size_dec and data.iX > MIN_LIMIT) then
|
||||
data.pagenum = 1
|
||||
data.iX = data.iX - (fields.size_dec and 1 or -1)
|
||||
craftguide:get_formspec(player_name)
|
||||
show_fs()
|
||||
|
||||
else for item in pairs(fields) do
|
||||
if item:find(":") then
|
||||
if item:sub(-4) == "_inv" then
|
||||
item = item:sub(1,-5)
|
||||
elseif item:find("%s") then
|
||||
item = item:match("%S*")
|
||||
end
|
||||
|
||||
local is_fuel = get_fueltime(item) > 0
|
||||
@ -455,7 +518,7 @@ mt.register_on_player_receive_fields(function(player, formname, fields)
|
||||
data.rnum = 1
|
||||
end
|
||||
|
||||
craftguide:get_formspec(player_name)
|
||||
show_fs()
|
||||
else
|
||||
if progressive_mode then
|
||||
local inv = player:get_inventory()
|
||||
@ -470,92 +533,126 @@ mt.register_on_player_receive_fields(function(player, formname, fields)
|
||||
data.rnum = 1
|
||||
data.show_usage = nil
|
||||
|
||||
craftguide:get_formspec(player_name, is_fuel)
|
||||
show_fs(is_fuel)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function craftguide:on_use(itemstack, user)
|
||||
if not datas.init_items then
|
||||
self:get_init_items()
|
||||
end
|
||||
|
||||
local player_name = user:get_player_name()
|
||||
local data = datas[player_name]
|
||||
|
||||
if progressive_mode or not data then
|
||||
datas[player_name] = {filter = "", pagenum = 1, iX = DEFAULT_SIZE}
|
||||
if progressive_mode then
|
||||
self:get_filter_items(datas[player_name], user)
|
||||
end
|
||||
|
||||
self:get_formspec(player_name)
|
||||
else
|
||||
show_formspec(player_name, "craftguide", data.formspec)
|
||||
end
|
||||
end
|
||||
|
||||
mt.register_craftitem("craftguide:book", {
|
||||
description = S("Crafting Guide"),
|
||||
inventory_image = "craftguide_book.png",
|
||||
wield_image = "craftguide_book.png",
|
||||
stack_max = 1,
|
||||
groups = {book = 1},
|
||||
on_use = function(itemstack, user)
|
||||
craftguide:on_use(itemstack, user)
|
||||
if sfinv_only then
|
||||
sfinv.register_page("craftguide:craftguide", {
|
||||
title = "Craft Guide",
|
||||
get = function(self, player, context)
|
||||
local player_name = player:get_player_name()
|
||||
return sfinv.make_formspec(
|
||||
player,
|
||||
context,
|
||||
craftguide:get_formspec(player_name, context.fuel)
|
||||
)
|
||||
end,
|
||||
on_enter = function(self, player, context)
|
||||
if not datas.init_items then
|
||||
craftguide:get_init_items()
|
||||
end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
local data = datas[player_name]
|
||||
|
||||
if progressive_mode or not data then
|
||||
datas[player_name] = {filter = "", pagenum = 1, iX = 8}
|
||||
if progressive_mode then
|
||||
craftguide:get_filter_items(datas[player_name], player)
|
||||
end
|
||||
end
|
||||
end,
|
||||
on_player_receive_fields = function(self, player, context, fields)
|
||||
get_fields(player, fields)
|
||||
end,
|
||||
})
|
||||
else
|
||||
mt.register_on_player_receive_fields(get_fields)
|
||||
|
||||
function craftguide:on_use(itemstack, user)
|
||||
if not datas.init_items then
|
||||
self:get_init_items()
|
||||
end
|
||||
|
||||
local player_name = user:get_player_name()
|
||||
local data = datas[player_name]
|
||||
|
||||
if progressive_mode or not data then
|
||||
datas[player_name] = {filter = "", pagenum = 1, iX = DEFAULT_SIZE}
|
||||
if progressive_mode then
|
||||
self:get_filter_items(datas[player_name], user)
|
||||
end
|
||||
|
||||
self:get_formspec(player_name)
|
||||
else
|
||||
show_formspec(player_name, "craftguide", data.formspec)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
mt.register_node("craftguide:sign", {
|
||||
description = S("Crafting Guide Sign"),
|
||||
drawtype = "nodebox",
|
||||
tiles = {"craftguide_sign.png"},
|
||||
inventory_image = "craftguide_sign_inv.png",
|
||||
wield_image = "craftguide_sign_inv.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "wallmounted",
|
||||
sunlight_propagates = true,
|
||||
groups = {wood = 1, oddly_breakable_by_hand = 1, flammable = 3},
|
||||
node_box = {
|
||||
type = "wallmounted",
|
||||
wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
|
||||
wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
|
||||
wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375}
|
||||
},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", S("Crafting Guide Sign"))
|
||||
end,
|
||||
on_rightclick = function(pos, node, user, itemstack)
|
||||
craftguide:on_use(itemstack, user)
|
||||
end
|
||||
})
|
||||
mt.register_craftitem("craftguide:book", {
|
||||
description = S("Crafting Guide"),
|
||||
inventory_image = "craftguide_book.png",
|
||||
wield_image = "craftguide_book.png",
|
||||
stack_max = 1,
|
||||
groups = {book = 1},
|
||||
on_use = function(itemstack, user)
|
||||
craftguide:on_use(itemstack, user)
|
||||
end
|
||||
})
|
||||
|
||||
mt.register_craft({
|
||||
output = "craftguide:book",
|
||||
type = "shapeless",
|
||||
recipe = {"default:book"}
|
||||
})
|
||||
mt.register_node("craftguide:sign", {
|
||||
description = S("Crafting Guide Sign"),
|
||||
drawtype = "nodebox",
|
||||
tiles = {"craftguide_sign.png"},
|
||||
inventory_image = "craftguide_sign_inv.png",
|
||||
wield_image = "craftguide_sign_inv.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "wallmounted",
|
||||
sunlight_propagates = true,
|
||||
groups = {wood = 1, oddly_breakable_by_hand = 1, flammable = 3},
|
||||
node_box = {
|
||||
type = "wallmounted",
|
||||
wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
|
||||
wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
|
||||
wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375}
|
||||
},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", S("Crafting Guide Sign"))
|
||||
end,
|
||||
on_rightclick = function(pos, node, user, itemstack)
|
||||
craftguide:on_use(itemstack, user)
|
||||
end
|
||||
})
|
||||
|
||||
mt.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "craftguide:book",
|
||||
burntime = 3
|
||||
})
|
||||
mt.register_craft({
|
||||
output = "craftguide:book",
|
||||
type = "shapeless",
|
||||
recipe = {"default:book"}
|
||||
})
|
||||
|
||||
mt.register_craft({
|
||||
output = "craftguide:sign",
|
||||
type = "shapeless",
|
||||
recipe = {"default:sign_wall_wood"}
|
||||
})
|
||||
mt.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "craftguide:book",
|
||||
burntime = 3
|
||||
})
|
||||
|
||||
mt.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "craftguide:sign",
|
||||
burntime = 10
|
||||
})
|
||||
mt.register_craft({
|
||||
output = "craftguide:sign",
|
||||
type = "shapeless",
|
||||
recipe = {"default:sign_wall_wood"}
|
||||
})
|
||||
|
||||
mt.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "craftguide:sign",
|
||||
burntime = 10
|
||||
})
|
||||
end
|
||||
|
||||
if rawget(_G, "sfinv_buttons") then
|
||||
sfinv_buttons.register_button("craftguide", {
|
||||
@ -568,8 +665,6 @@ if rawget(_G, "sfinv_buttons") then
|
||||
})
|
||||
end
|
||||
|
||||
mt.register_alias("xdecor:crafting_guide", "craftguide:book")
|
||||
|
||||
--[[ Custom recipes (>3x3) test code
|
||||
|
||||
mt.register_craftitem("craftguide:custom_recipe_test", {
|
||||
@ -591,4 +686,4 @@ for x = 1, 6 do
|
||||
recipe = cr[x]
|
||||
})
|
||||
end
|
||||
]]
|
||||
]]
|
4
settingtypes.txt
Normal file
4
settingtypes.txt
Normal file
@ -0,0 +1,4 @@
|
||||
#For enabling some options of craftguide.
|
||||
|
||||
craftguide_progressive_mode (Progressive Mode) bool false
|
||||
craftguide_sfinv_only (Sfinv only) bool false
|
Reference in New Issue
Block a user