diff --git a/init.lua b/init.lua index 983946d..28524cf 100644 --- a/init.lua +++ b/init.lua @@ -19,17 +19,23 @@ local function lf(path) end i3 = { - modules = {}, - MAX_FAVS = 6, - ITEM_BTN_SIZE = 1.1, - DROP_BAG_ON_DIE = true, - MIN_FORMSPEC_VERSION = 4, - SAVE_INTERVAL = 600, -- Player data save interval (in seconds) + settings = { + max_favs = 6, + min_fs_version = 4, + item_btn_size = 1.1, + drop_bag_on_die = true, + save_interval = 600, -- Player data save interval (in seconds) - HUD_TIMER_MAX = 1.5, - HUD_SPEED = 1, + hud_speed = 1, + hud_timer_max = 1.5, - SUBCAT = { + damage_enabled = core.settings:get_bool"enable_damage", + progressive_mode = core.settings:get_bool"i3_progressive_mode", + legacy_inventory = core.settings:get_bool"i3_legacy_inventory", + item_compression = core.settings:get_bool("i3_item_compression", true), + }, + + categories = { "bag", "armor", "skins", @@ -37,7 +43,7 @@ i3 = { "waypoints", }, - META_SAVES = { + saves = { -- Metadata to save bag = true, home = true, waypoints = true, @@ -46,21 +52,6 @@ i3 = { known_recipes = true, }, - -- Caches - init_items = {}, - fuel_cache = {}, - usages_cache = {}, - recipes_cache = {}, - cubes = {}, - plants = {}, - - tabs = {}, - craft_types = {}, - - recipe_filters = {}, - search_filters = {}, - sorting_methods = {}, - files = { api = lf"/src/api.lua", bags = lf"/src/bags.lua", @@ -84,13 +75,25 @@ i3 = { } }, - progressive_mode = core.settings:get_bool"i3_progressive_mode", - legacy_inventory = core.settings:get_bool"i3_legacy_inventory", - item_compression = core.settings:get_bool("i3_item_compression", true), + -- Caches + init_items = {}, + fuel_cache = {}, + usages_cache = {}, + recipes_cache = {}, + + tabs = {}, + cubes = {}, + plants = {}, + modules = {}, + craft_types = {}, + + recipe_filters = {}, + search_filters = {}, + sorting_methods = {}, } -i3.HOTBAR_LEN = i3.legacy_inventory and 8 or 9 -i3.INV_SIZE = 4 * i3.HOTBAR_LEN +i3.settings.hotbar_len = i3.settings.legacy_inventory and 8 or 9 +i3.settings.inv_size = 4 * i3.settings.hotbar_len i3.files.common() i3.files.api(http) @@ -191,7 +194,7 @@ local function init_data(player, info) data.fs_version = info.formspec_version local inv = player:get_inventory() - inv:set_size("main", i3.INV_SIZE) + inv:set_size("main", i3.settings.inv_size) core.after(0, set_fs, player) end @@ -201,7 +204,7 @@ local function save_data(player_name) for name, v in pairs(_data) do for dat in pairs(v) do - if not i3.META_SAVES[dat] then + if not i3.saves[dat] then _data[name][dat] = nil if player_name and i3.data[player_name] then @@ -223,7 +226,7 @@ core.register_on_joinplayer(function(player) local name = player:get_player_name() local info = core.get_player_information and core.get_player_information(name) - if not info or get_formspec_version(info) < i3.MIN_FORMSPEC_VERSION then + if not info or get_formspec_version(info) < i3.settings.min_fs_version then return outdated(name) end @@ -242,12 +245,12 @@ core.register_on_shutdown(save_data) local function routine() save_data() - core.after(i3.SAVE_INTERVAL, routine) + core.after(i3.settings.save_interval, routine) end -core.after(i3.SAVE_INTERVAL, routine) +core.after(i3.settings.save_interval, routine) -if i3.progressive_mode then +if i3.settings.progressive_mode then i3.files.progressive() end diff --git a/src/callbacks.lua b/src/callbacks.lua index 01fa155..0cb3152 100644 --- a/src/callbacks.lua +++ b/src/callbacks.lua @@ -56,7 +56,7 @@ i3.new_tab("inventory", { for field in pairs(fields) do if sub(field, 1, 4) == "btn_" then - data.subcat = indexof(i3.SUBCAT, sub(field, 5)) + data.subcat = indexof(i3.categories, sub(field, 5)) break elseif sub(field, 1, 3) == "cb_" then @@ -379,7 +379,7 @@ local function rcp_fields(player, data, fields) local fav, i = is_fav(data.favs, data.query_item) local total = #data.favs - if total < i3.MAX_FAVS and not fav then + if total < i3.settings.max_favs and not fav then data.favs[total + 1] = data.query_item elseif fav then remove(data.favs, i) @@ -479,7 +479,7 @@ core.register_on_dieplayer(function(player) local data = i3.data[name] if not data then return end - if i3.DROP_BAG_ON_DIE then + if i3.settings.drop_bag_on_die then local bagstack = ItemStack(data.bag) spawn_item(player, bagstack) end diff --git a/src/common.lua b/src/common.lua index 8ec6e2c..dd40517 100644 --- a/src/common.lua +++ b/src/common.lua @@ -282,7 +282,7 @@ local function apply_recipe_filters(recipes, player) end local function compression_active(data) - return i3.item_compression and not next(i3.recipe_filters) and data.filter == "" + return i3.settings.item_compression and not next(i3.recipe_filters) and data.filter == "" end local function compressible(item, data) @@ -539,7 +539,7 @@ local function sort_inventory(player, data) local inv = player:get_inventory() local list = inv:get_list"main" local size = inv:get_size"main" - local start_i = data.ignore_hotbar and (i3.HOTBAR_LEN + 1) or 1 + local start_i = data.ignore_hotbar and (i3.settings.hotbar_len + 1) or 1 if true_table(data.drop_items) then list = drop_items(player, inv, list, start_i, data.drop_items) diff --git a/src/gui.lua b/src/gui.lua index fc9a26f..92ab370 100644 --- a/src/gui.lua +++ b/src/gui.lua @@ -1,4 +1,5 @@ -local damage_enabled = core.settings:get_bool"enable_damage" +local damage_enabled = i3.settings.damage_enabled +local hotbar_len = i3.settings.hotbar_len local model_aliases = i3.files.model_alias() local PNG, styles, fs_elements, colors = i3.files.styles() @@ -122,22 +123,22 @@ local function get_stack_max(inv, data, is_recipe, rcp) end local function get_inv_slots(fs) - local inv_x = i3.legacy_inventory and 0.75 or 0.22 + local inv_x = i3.settings.legacy_inventory and 0.75 or 0.22 local inv_y = 6.9 local size, spacing = 1, 0.1 fs"style_type[box;colors=#77777710,#77777710,#777,#777]" - for i = 0, i3.HOTBAR_LEN - 1 do + for i = 0, hotbar_len - 1 do fs("box", i * size + inv_x + (i * spacing), inv_y, size, size, "") end fs(fmt("style_type[list;size=%f;spacing=%f]", size, spacing), - fmt("list[current_player;main;%f,%f;%u,1;]", inv_x, inv_y, i3.HOTBAR_LEN)) + fmt("list[current_player;main;%f,%f;%u,1;]", inv_x, inv_y, hotbar_len)) fs(fmt("style_type[list;size=%f;spacing=%f]", size, spacing), fmt("list[current_player;main;%f,%f;%u,%u;%u]", inv_x, inv_y + 1.15, - i3.HOTBAR_LEN, i3.INV_SIZE / i3.HOTBAR_LEN, i3.HOTBAR_LEN), + hotbar_len, i3.settings.inv_size / hotbar_len, hotbar_len), "style_type[list;size=1;spacing=0.15]") fs"listring[current_player;craft]listring[current_player;main]" @@ -233,7 +234,7 @@ local function get_isometric_view(fs, pos, X, Y, t, cubes, depth, high) local width = 8 local base_height = 4 local base_depth = depth == -1 - local max_depth = -5 + local max_depth = -10 local height = base_depth and (base_height - 1) or depth local pos1 = vec_new(pos.x - width, pos.y + depth, pos.z - width) @@ -454,7 +455,7 @@ local function get_container(fs, data, player, yoffset, ctn_len, award_list, awa local yextra = damage_enabled and 5.5 or 5 - for i, title in ipairs(i3.SUBCAT) do + for i, title in ipairs(i3.categories) do local btn_name = fmt("btn_%s", title) fs(fmt("style[btn_%s;fgimg=%s;fgimg_hovered=%s;content_offset=0]", title, data.subcat == i and PNG[fmt("%s_hover", title)] or PNG[title], @@ -790,7 +791,8 @@ local function get_tooltip(item, info, pos) end if pos then - return fmt("tooltip", pos.x, pos.y, i3.ITEM_BTN_SIZE, i3.ITEM_BTN_SIZE, ESC(tooltip)) + local btn_size = i3.settings.item_btn_size + return fmt("tooltip", pos.x, pos.y, btn_size, btn_size, ESC(tooltip)) end return fmt("tooltip[%s;%s]", item, ESC(tooltip)) @@ -832,14 +834,15 @@ local function get_output_fs(fs, data, rcp, is_recipe, shapeless, right, btn_siz end end - local arrow_X = right + 0.2 + (_btn_size or i3.ITEM_BTN_SIZE) + local BTN_SIZE = i3.settings.item_btn_size + local arrow_X = right + 0.2 + (_btn_size or BTN_SIZE) local X = arrow_X + 1.2 local Y = data.yoffset + 1.4 fs("image", arrow_X, Y + 0.06, 1, 1, PNG.arrow) if fuel then - fs("animated_image", X + 0.05, Y, i3.ITEM_BTN_SIZE, i3.ITEM_BTN_SIZE, PNG.fire_anim, 8, 180) + fs("animated_image", X + 0.05, Y, BTN_SIZE, BTN_SIZE, PNG.fire_anim, 8, 180) return end @@ -848,17 +851,17 @@ local function get_output_fs(fs, data, rcp, is_recipe, shapeless, right, btn_siz local name = item:get_name() local count = item:get_count() local wear = item:get_wear() - local bt_s = i3.ITEM_BTN_SIZE * 1.2 + local bt_s = BTN_SIZE * 1.2 local _name = fmt("_%s", name) local pos if meta:get_string"color" ~= "" or meta:get_string"palette_index" ~= "" then local rcp_usg = is_recipe and "rcp" or "usg" - fs(fmt("style_type[list;size=%f]", i3.ITEM_BTN_SIZE)) + fs(fmt("style_type[list;size=%f]", BTN_SIZE)) fs"listcolors[#bababa50;#bababa99]" fs(fmt("list[detached:i3_output_%s_%s;main;%f,%f;1,1;]", rcp_usg, data.player_name, X + 0.11, Y)) - fs("button", X + 0.11, Y, i3.ITEM_BTN_SIZE, i3.ITEM_BTN_SIZE, _name, "") + fs("button", X + 0.11, Y, BTN_SIZE, BTN_SIZE, _name, "") local inv = get_detached_inv(fmt("output_%s", rcp_usg), data.player_name) inv:set_stack("main", 1, item) @@ -866,7 +869,7 @@ local function get_output_fs(fs, data, rcp, is_recipe, shapeless, right, btn_siz else fs("image", X, Y - 0.11, bt_s, bt_s, PNG.slot) fs("item_image_button", - X + 0.11, Y, i3.ITEM_BTN_SIZE, i3.ITEM_BTN_SIZE, + X + 0.11, Y, BTN_SIZE, BTN_SIZE, fmt("%s %u %u", name, count * (is_recipe and data.scrbar_rcp or data.scrbar_usg or 1), wear), _name, "") end @@ -898,7 +901,8 @@ end local function get_grid_fs(fs, data, rcp, is_recipe) local width = rcp.width or 1 - local right, btn_size, _btn_size = 0, i3.ITEM_BTN_SIZE + local right = 0 + local btn_size, _btn_size = i3.settings.item_btn_size local cooktime, shapeless if rcp.type == "cooking" then @@ -1113,9 +1117,10 @@ end local function get_header(fs, data) local fav = is_fav(data.favs, data.query_item) local nfavs = #data.favs + local max_favs = i3.settings.max_favs local star_x, star_y, size = data.inv_width + 0.3, data.yoffset + 0.2, 0.4 - if nfavs < i3.MAX_FAVS or (nfavs == i3.MAX_FAVS and fav) then + if nfavs < max_favs or (nfavs == max_favs and fav) then local fav_marked = fmt("i3_fav%s.png", fav and "_off" or "") fs(fmt("style[fav;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s]", fmt("i3_fav%s.png", fav and "" or "_off"), fav_marked, fav_marked)) @@ -1342,6 +1347,7 @@ local function get_items_fs(fs, player, data, full_height) end local function get_favs(fs, data) + local btn_size = i3.settings.item_btn_size fs("label", data.inv_width + 0.4, data.yoffset + 0.4, ES"Bookmarks") for i = 1, #data.favs do @@ -1350,10 +1356,10 @@ local function get_favs(fs, data) local Y = data.yoffset + 0.8 if data.query_item == item then - fs("image", X, Y, i3.ITEM_BTN_SIZE, i3.ITEM_BTN_SIZE, PNG.slot) + fs("image", X, Y, btn_size, btn_size, PNG.slot) end - fs("item_image_button", X, Y, i3.ITEM_BTN_SIZE, i3.ITEM_BTN_SIZE, item, item, "") + fs("item_image_button", X, Y, btn_size, btn_size, item, item, "") end end @@ -1490,7 +1496,7 @@ local function make_fs(player, data) local tab = i3.tabs[data.tab] fs(fmt("formspec_version[%u]size[%f,%f]no_prepend[]bgcolor[#0000]", - i3.MIN_FORMSPEC_VERSION, data.inv_width + 8, full_height), styles) + i3.settings.min_fs_version, data.inv_width + 8, full_height), styles) fs("bg9", 0, 0, data.inv_width, full_height, PNG.bg_full, 10) diff --git a/src/hud.lua b/src/hud.lua index 5469460..72d1a96 100644 --- a/src/hud.lua +++ b/src/hud.lua @@ -36,7 +36,7 @@ local function init_hud(player) if not i3.legacy_inventory then core.after(0, function() - player:hud_set_hotbar_itemcount(i3.HOTBAR_LEN) + player:hud_set_hotbar_itemcount(i3.settings.hotbar_len) player:hud_set_hotbar_image"i3_hotbar.png" end) end @@ -66,18 +66,18 @@ local function show_hud(player, data) player:hud_change(def, "position", { x = hud_info.position.x, - y = hud_info.position.y - ((dt / 5) * i3.HUD_SPEED) + y = hud_info.position.y - ((dt / 5) * i3.settings.hud_speed) }) end elseif data.show_hud == false then - if data.hud_timer >= i3.HUD_TIMER_MAX then + if data.hud_timer >= i3.settings.hud_timer_max then for _, def in pairs(data.hud) do local hud_info = player:hud_get(def) player:hud_change(def, "position", { x = hud_info.position.x, - y = hud_info.position.y + ((dt / 5) * i3.HUD_SPEED) + y = hud_info.position.y + ((dt / 5) * i3.settings.hud_speed) }) end