mirror of
https://github.com/minetest-mods/craftguide.git
synced 2024-11-23 03:13:44 +01:00
Add API call to open crafting guide (#59)
This commit is contained in:
parent
fc2d2e585c
commit
aac3e3f693
11
README.md
11
README.md
@ -80,3 +80,14 @@ Removes all recipe filters and adds a new one.
|
|||||||
#### `craftguide.get_recipe_filters()`
|
#### `craftguide.get_recipe_filters()`
|
||||||
|
|
||||||
Returns a map of recipe filters, indexed by name.
|
Returns a map of recipe filters, indexed by name.
|
||||||
|
|
||||||
|
### Miscellaneous
|
||||||
|
|
||||||
|
#### `craftguide.show(player_name, item, show_usages)`
|
||||||
|
|
||||||
|
Opens the craft guide with the current filter applied.
|
||||||
|
|
||||||
|
* `player_name`: string param.
|
||||||
|
* `item`: optional, string param. If set, this item is pre-selected. If the item does not exist or has no recipe, use the player's previous selection. By default, player's previous selection is used
|
||||||
|
* `show_usages`: optional, boolean param. If true, show item usages.
|
||||||
|
|
||||||
|
74
init.lua
74
init.lua
@ -16,6 +16,7 @@ local sfinv_only = mt.settings:get_bool("craftguide_sfinv_only") and rawget(_G,
|
|||||||
local reg_items = mt.registered_items
|
local reg_items = mt.registered_items
|
||||||
local get_result = mt.get_craft_result
|
local get_result = mt.get_craft_result
|
||||||
local show_formspec = mt.show_formspec
|
local show_formspec = mt.show_formspec
|
||||||
|
local get_player_by_name = mt.get_player_by_name
|
||||||
local serialize, deserialize = mt.serialize, mt.deserialize
|
local serialize, deserialize = mt.serialize, mt.deserialize
|
||||||
|
|
||||||
-- Intllib
|
-- Intllib
|
||||||
@ -224,6 +225,33 @@ local function cache_recipes(output)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function get_recipes(item, data, player)
|
||||||
|
local is_fuel = fuel_cache[item]
|
||||||
|
local recipes = recipes_cache[item]
|
||||||
|
|
||||||
|
if recipes then
|
||||||
|
recipes = apply_recipe_filters(recipes, player)
|
||||||
|
end
|
||||||
|
|
||||||
|
local no_recipes = not recipes or #recipes == 0
|
||||||
|
if no_recipes and not is_fuel then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if is_fuel and no_recipes then
|
||||||
|
data.show_usages = true
|
||||||
|
end
|
||||||
|
|
||||||
|
if data.show_usages then
|
||||||
|
recipes = apply_recipe_filters(get_item_usages(item), player)
|
||||||
|
if #recipes == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return recipes
|
||||||
|
end
|
||||||
|
|
||||||
local function get_burntime(item)
|
local function get_burntime(item)
|
||||||
return get_result({method = "fuel", width = 1, items = {item}}).time
|
return get_result({method = "fuel", width = 1, items = {item}}).time
|
||||||
end
|
end
|
||||||
@ -683,37 +711,14 @@ local function on_receive_fields(player, fields)
|
|||||||
item = item:sub(1,-5)
|
item = item:sub(1,-5)
|
||||||
end
|
end
|
||||||
|
|
||||||
local is_fuel = fuel_cache[item]
|
|
||||||
local recipes = recipes_cache[item]
|
|
||||||
|
|
||||||
if recipes then
|
|
||||||
recipes = apply_recipe_filters(recipes, player)
|
|
||||||
end
|
|
||||||
|
|
||||||
local no_recipes = not recipes or #recipes == 0
|
|
||||||
if no_recipes and not is_fuel then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if item ~= data.query_item then
|
if item ~= data.query_item then
|
||||||
data.show_usages = nil
|
data.show_usages = nil
|
||||||
else
|
else
|
||||||
data.show_usages = not data.show_usages
|
data.show_usages = not data.show_usages
|
||||||
end
|
end
|
||||||
|
|
||||||
if is_fuel and no_recipes then
|
|
||||||
data.show_usages = true
|
|
||||||
end
|
|
||||||
|
|
||||||
if data.show_usages then
|
|
||||||
recipes = apply_recipe_filters(get_item_usages(item), player)
|
|
||||||
if #recipes == 0 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
data.query_item = item
|
data.query_item = item
|
||||||
data.recipes = recipes
|
data.recipes = get_recipes(item, data, player)
|
||||||
data.rnum = 1
|
data.rnum = 1
|
||||||
|
|
||||||
show_fs(player, name)
|
show_fs(player, name)
|
||||||
@ -932,7 +937,7 @@ end
|
|||||||
mt.register_chatcommand("craft", {
|
mt.register_chatcommand("craft", {
|
||||||
description = S("Show recipe(s) of the pointed node"),
|
description = S("Show recipe(s) of the pointed node"),
|
||||||
func = function(name)
|
func = function(name)
|
||||||
local player = mt.get_player_by_name(name)
|
local player = get_player_by_name(name)
|
||||||
local ppos = player:get_pos()
|
local ppos = player:get_pos()
|
||||||
local dir = player:get_look_dir()
|
local dir = player:get_look_dir()
|
||||||
local eye_h = {x = ppos.x, y = ppos.y + 1.625, z = ppos.z}
|
local eye_h = {x = ppos.x, y = ppos.y + 1.625, z = ppos.z}
|
||||||
@ -987,6 +992,25 @@ mt.register_chatcommand("craft", {
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function craftguide.show(name, item, show_usages)
|
||||||
|
local func = "craftguide." .. __func() .. "(): "
|
||||||
|
assert(name, func .. "player name missing")
|
||||||
|
|
||||||
|
local data = player_data[name]
|
||||||
|
local player = get_player_by_name(name)
|
||||||
|
local query_item = data.query_item
|
||||||
|
|
||||||
|
reset_data(data)
|
||||||
|
|
||||||
|
item = reg_items[item] and item or query_item
|
||||||
|
|
||||||
|
data.query_item = item
|
||||||
|
data.show_usages = show_usages
|
||||||
|
data.recipes = get_recipes(item, data, player)
|
||||||
|
|
||||||
|
show_fs(player, name)
|
||||||
|
end
|
||||||
|
|
||||||
--[[ Custom recipes (>3x3) test code
|
--[[ Custom recipes (>3x3) test code
|
||||||
|
|
||||||
mt.register_craftitem(":secretstuff:custom_recipe_test", {
|
mt.register_craftitem(":secretstuff:custom_recipe_test", {
|
||||||
|
Loading…
Reference in New Issue
Block a user