mirror of
https://github.com/minetest-mods/i3.git
synced 2024-12-26 02:40:38 +01:00
Cleaning + API fix
This commit is contained in:
parent
9afbee72ce
commit
5587341f2e
@ -280,6 +280,8 @@ function i3.compress(item, def)
|
||||
return err "i3.compress: replace string missing"
|
||||
elseif not is_table(def.by) then
|
||||
return err "i3.compress: replace substrings missing"
|
||||
elseif i3.compressed[item] then
|
||||
return err(fmt("i3.compress: item '%s' is already compressed", item))
|
||||
end
|
||||
|
||||
local t = {}
|
||||
@ -302,8 +304,6 @@ function i3.add_sorting_method(def)
|
||||
return err "i3.add_sorting_method: name missing"
|
||||
elseif not is_func(def.func) then
|
||||
return err "i3.add_sorting_method: function missing"
|
||||
elseif i3.compressed[def.name] then
|
||||
return err(fmt("i3.add_sorting_method: item '%s' is already compressed", def.name))
|
||||
end
|
||||
|
||||
insert(i3.sorting_methods, def)
|
||||
|
123
src/common.lua
123
src/common.lua
@ -1,8 +1,15 @@
|
||||
local translate = core.get_translated_string
|
||||
local fmt, find, gmatch, match, sub, split, lower =
|
||||
string.format, string.find, string.gmatch, string.match, string.sub, string.split, string.lower
|
||||
local reg_items, reg_nodes, reg_craftitems, reg_tools =
|
||||
core.registered_items, core.registered_nodes, core.registered_craftitems, core.registered_tools
|
||||
local fmt, find, match, gmatch, sub, split, lower =
|
||||
string.format, string.find, string.match, string.gmatch, string.sub, string.split, string.lower
|
||||
|
||||
local old_is_creative_enabled = core.is_creative_enabled
|
||||
|
||||
function core.is_creative_enabled(name)
|
||||
if name == "" then
|
||||
return old_is_creative_enabled(name)
|
||||
end
|
||||
|
||||
return core.check_player_privs(name, {creative = true}) or old_is_creative_enabled(name)
|
||||
end
|
||||
|
||||
local S = core.get_translator "i3"
|
||||
local ES = function(...) return core.formspec_escape(S(...)) end
|
||||
@ -36,6 +43,19 @@ local function reset_compression(data)
|
||||
data.expand = ""
|
||||
end
|
||||
|
||||
local function msg(name, str)
|
||||
return core.chat_send_player(name, fmt("[i3] %s", str))
|
||||
end
|
||||
|
||||
local function err(str)
|
||||
return core.log("error", str)
|
||||
end
|
||||
|
||||
local function round(num, decimal)
|
||||
local mul = 10 ^ decimal
|
||||
return math.floor(num * mul + 0.5) / mul
|
||||
end
|
||||
|
||||
local function search(data)
|
||||
reset_compression(data)
|
||||
|
||||
@ -60,7 +80,7 @@ local function search(data)
|
||||
for i = 1, #data.items_raw do
|
||||
local item = data.items_raw[i]
|
||||
local def = core.registered_items[item]
|
||||
local desc = lower(translate(data.lang_code, def and def.description)) or ""
|
||||
local desc = lower(core.get_translated_string(data.lang_code, def and def.description)) or ""
|
||||
local search_in = fmt("%s %s", item, desc)
|
||||
local temp, j, to_add = {}, 1
|
||||
|
||||
@ -174,6 +194,14 @@ local function rcp_eq(rcp, rcp2)
|
||||
return true
|
||||
end
|
||||
|
||||
local function clean_name(item)
|
||||
if sub(item, 1, 1) == ":" or sub(item, 1, 1) == " " or sub(item, 1, 1) == "_" then
|
||||
item = sub(item, 2)
|
||||
end
|
||||
|
||||
return item
|
||||
end
|
||||
|
||||
local function is_group(item)
|
||||
return sub(item, 1, 6) == "group:"
|
||||
end
|
||||
@ -202,7 +230,7 @@ local function groups_to_items(groups, get_all)
|
||||
if not get_all and #groups == 1 then
|
||||
local group = groups[1]
|
||||
local stereotype = i3.group_stereotypes[group]
|
||||
local def = reg_items[stereotype]
|
||||
local def = core.registered_items[stereotype]
|
||||
|
||||
if show_item(def) then
|
||||
return stereotype
|
||||
@ -211,7 +239,7 @@ local function groups_to_items(groups, get_all)
|
||||
|
||||
local names = {}
|
||||
|
||||
for name, def in pairs(reg_items) do
|
||||
for name, def in pairs(core.registered_items) do
|
||||
if show_item(def) and item_has_groups(def.groups, groups) then
|
||||
if get_all then
|
||||
names[#names + 1] = name
|
||||
@ -240,27 +268,6 @@ local function compressible(item, data)
|
||||
return compression_active(data) and i3.compress_groups[item]
|
||||
end
|
||||
|
||||
local function clean_name(item)
|
||||
if sub(item, 1, 1) == ":" or sub(item, 1, 1) == " " or sub(item, 1, 1) == "_" then
|
||||
item = sub(item, 2)
|
||||
end
|
||||
|
||||
return item
|
||||
end
|
||||
|
||||
local function msg(name, str)
|
||||
return core.chat_send_player(name, fmt("[i3] %s", str))
|
||||
end
|
||||
|
||||
local function err(str)
|
||||
return core.log("error", str)
|
||||
end
|
||||
|
||||
local function round(num, decimal)
|
||||
local mul = 10 ^ decimal
|
||||
return math.floor(num * mul + 0.5) / mul
|
||||
end
|
||||
|
||||
local function is_fav(favs, query_item)
|
||||
local fav, i
|
||||
for j = 1, #favs do
|
||||
@ -290,9 +297,9 @@ local function sort_by_category(data)
|
||||
local to_add = true
|
||||
|
||||
if data.itab == 2 then
|
||||
to_add = reg_nodes[item]
|
||||
to_add = core.registered_nodes[item]
|
||||
elseif data.itab == 3 then
|
||||
to_add = reg_craftitems[item] or reg_tools[item]
|
||||
to_add = core.registered_craftitems[item] or core.registered_tools[item]
|
||||
end
|
||||
|
||||
if to_add then
|
||||
@ -312,6 +319,42 @@ local function spawn_item(player, stack)
|
||||
core.add_item(look_at, stack)
|
||||
end
|
||||
|
||||
local function get_recipes(player, item)
|
||||
local clean_item = core.registered_aliases[item] or item
|
||||
local recipes = i3.recipes_cache[clean_item]
|
||||
local usages = i3.usages_cache[clean_item]
|
||||
|
||||
if recipes then
|
||||
recipes = apply_recipe_filters(recipes, player)
|
||||
end
|
||||
|
||||
local no_recipes = not recipes or #recipes == 0
|
||||
if no_recipes and not usages then return end
|
||||
usages = apply_recipe_filters(usages, player)
|
||||
|
||||
local no_usages = not usages or #usages == 0
|
||||
|
||||
return not no_recipes and recipes or nil,
|
||||
not no_usages and usages or nil
|
||||
end
|
||||
|
||||
local function get_stack(player, stack)
|
||||
local inv = player:get_inventory()
|
||||
|
||||
if inv:room_for_item("main", stack) then
|
||||
inv:add_item("main", stack)
|
||||
else
|
||||
spawn_item(player, stack)
|
||||
end
|
||||
end
|
||||
|
||||
local function safe_teleport(player, pos)
|
||||
pos.y = pos.y + 0.5
|
||||
local vel = player:get_velocity()
|
||||
player:add_velocity(vector.multiply(vel, -1))
|
||||
player:set_pos(pos)
|
||||
end
|
||||
|
||||
local function get_sorting_idx(name)
|
||||
local idx = 1
|
||||
|
||||
@ -442,23 +485,30 @@ local _ = {
|
||||
-- Sorting
|
||||
search = search,
|
||||
sorter = sorter,
|
||||
get_recipes = get_recipes,
|
||||
sort_inventory = sort_inventory,
|
||||
get_sorting_idx = get_sorting_idx,
|
||||
sort_by_category = sort_by_category,
|
||||
apply_recipe_filters = apply_recipe_filters,
|
||||
|
||||
-- Misc. functions
|
||||
err = err,
|
||||
msg = msg,
|
||||
-- Type checks
|
||||
is_fav = is_fav,
|
||||
is_str = is_str,
|
||||
is_num = is_num,
|
||||
is_func = is_func,
|
||||
show_item = show_item,
|
||||
spawn_item = spawn_item,
|
||||
true_str = true_str,
|
||||
true_table = true_table,
|
||||
|
||||
-- Console
|
||||
err = err,
|
||||
msg = msg,
|
||||
|
||||
-- Misc. functions
|
||||
get_stack = get_stack,
|
||||
show_item = show_item,
|
||||
spawn_item = spawn_item,
|
||||
clean_name = clean_name,
|
||||
safe_teleport = safe_teleport,
|
||||
|
||||
-- Core functions
|
||||
clr = core.colorize,
|
||||
@ -517,7 +567,6 @@ local _ = {
|
||||
vec_add = vector.add,
|
||||
vec_round = vector.round,
|
||||
vec_eq = vector.equals,
|
||||
vec_mul = vector.multiply,
|
||||
}
|
||||
|
||||
function i3.get(...)
|
||||
|
@ -4,26 +4,16 @@ local S, clr = i3.get("S", "clr")
|
||||
local min, ceil, random = i3.get("min", "ceil", "random")
|
||||
local reg_items, reg_aliases = i3.get("reg_items", "reg_aliases")
|
||||
local fmt, find, match, sub, lower = i3.get("fmt", "find", "match", "sub", "lower")
|
||||
local vec_new, vec_mul, vec_eq, vec_round = i3.get("vec_new", "vec_mul", "vec_eq", "vec_round")
|
||||
local vec_new, vec_eq, vec_round = i3.get("vec_new", "vec_eq", "vec_round")
|
||||
local sort, copy, insert, remove, indexof = i3.get("sort", "copy", "insert", "remove", "indexof")
|
||||
|
||||
local msg, is_fav = i3.get("msg", "is_fav")
|
||||
local is_group, extract_groups, groups_to_items =
|
||||
i3.get("is_group", "extract_groups", "groups_to_items")
|
||||
local search, get_sorting_idx, sort_inventory, sort_by_category, apply_recipe_filters =
|
||||
i3.get("search", "get_sorting_idx", "sort_inventory", "sort_by_category", "apply_recipe_filters")
|
||||
local show_item, spawn_item, clean_name, compressible, check_privs =
|
||||
i3.get("show_item", "spawn_item", "clean_name", "compressible", "check_privs")
|
||||
|
||||
local old_is_creative_enabled = core.is_creative_enabled
|
||||
|
||||
function core.is_creative_enabled(name)
|
||||
if name == "" then
|
||||
return old_is_creative_enabled(name)
|
||||
end
|
||||
|
||||
return check_privs(name, {creative = true}) or old_is_creative_enabled(name)
|
||||
end
|
||||
local search, get_sorting_idx, sort_inventory, sort_by_category, get_recipes =
|
||||
i3.get("search", "get_sorting_idx", "sort_inventory", "sort_by_category", "get_recipes")
|
||||
local show_item, get_stack, clean_name, compressible, check_privs, safe_teleport =
|
||||
i3.get("show_item", "get_stack", "clean_name", "compressible", "check_privs", "safe_teleport")
|
||||
|
||||
local function reset_data(data)
|
||||
data.filter = ""
|
||||
@ -49,42 +39,6 @@ local function reset_data(data)
|
||||
end
|
||||
end
|
||||
|
||||
local function get_recipes(player, item)
|
||||
local clean_item = reg_aliases[item] or item
|
||||
local recipes = i3.recipes_cache[clean_item]
|
||||
local usages = i3.usages_cache[clean_item]
|
||||
|
||||
if recipes then
|
||||
recipes = apply_recipe_filters(recipes, player)
|
||||
end
|
||||
|
||||
local no_recipes = not recipes or #recipes == 0
|
||||
if no_recipes and not usages then return end
|
||||
usages = apply_recipe_filters(usages, player)
|
||||
|
||||
local no_usages = not usages or #usages == 0
|
||||
|
||||
return not no_recipes and recipes or nil,
|
||||
not no_usages and usages or nil
|
||||
end
|
||||
|
||||
local function get_stack(player, stack)
|
||||
local inv = player:get_inventory()
|
||||
|
||||
if inv:room_for_item("main", stack) then
|
||||
inv:add_item("main", stack)
|
||||
else
|
||||
spawn_item(player, stack)
|
||||
end
|
||||
end
|
||||
|
||||
local function safe_teleport(player, pos)
|
||||
pos.y = pos.y + 0.5
|
||||
local vel = player:get_velocity()
|
||||
player:add_velocity(vec_mul(vel, -1))
|
||||
player:set_pos(pos)
|
||||
end
|
||||
|
||||
i3.new_tab {
|
||||
name = "inventory",
|
||||
description = S"Inventory",
|
||||
|
Loading…
Reference in New Issue
Block a user