From fc562ecaa0966e71c8a70cfc27f7f924e3f16556 Mon Sep 17 00:00:00 2001 From: reusityback <98353605+reusityback@users.noreply.github.com> Date: Sun, 4 Sep 2022 16:35:00 +0000 Subject: [PATCH 01/16] Update German translation (#211) Added categories, waypoint etc. translations updated, inventory trashing button still missing --- locale/unified_inventory.de.tr | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/locale/unified_inventory.de.tr b/locale/unified_inventory.de.tr index 474049c..f1b1670 100644 --- a/locale/unified_inventory.de.tr +++ b/locale/unified_inventory.de.tr @@ -7,17 +7,17 @@ Bag @1=Tasche @1 Small Bag=Kleine Tasche Medium Bag=Mittelgroße Tasche Large Bag=Große Tasche -All Items= -Misc. Items= -Plant Life= -Building Materials= -Tools= -Minerals and Metals= -Environment and Worldgen= -Lighting= +All Items=Alle Gegenstände +Misc. Items=Sonstige Gegenstände +Plant Life=Pfanzenwelt +Building Materials=Baumaterialien +Tools=Werkzeuge +Minerals and Metals=Minerale und Metalle +Environment and Worldgen=Umwelt und Welterstellung +Lighting=Beleuchtung and = und -Scroll categories left= -Scroll categories right= +Scroll categories left=Kategorien nach links blättern +Scroll categories right=Kategorien nach rechts blättern Search=Suchen Reset search and display everything=Suche zurücksetzen und alles anzeigen First page=Erste Seite @@ -76,10 +76,10 @@ Waypoints=Wegpunkte Select Waypoint #@1=Wegpunkt Nr. @1 auswählen Waypoint @1=Wegpunkt Nr. @1 Set waypoint to current location=Setze Wegpunkt zur derzeitigen Position -Hide waypoint= -Show waypoint= -Hide coordinates= -Show coordinates= +Hide waypoint=Wegpunkt verstecken +Show waypoint=Wegpunkt zeigen +Hide coordinates=Koordinaten verstecken +Show coordinates=Koordinaten zeigen Change color of waypoint display=Farbe der Darstellung der Wegpunkte ändern Edit waypoint name=Name des Wegpunkts ändern Waypoint active=Wegpunkt aktiv From 574de919716f7cee2cbe413d7f4ddf972e63daf7 Mon Sep 17 00:00:00 2001 From: Thomas--S Date: Thu, 15 Sep 2022 10:48:29 +0200 Subject: [PATCH 02/16] Craft guide: Add support for colored items (#213) --- register.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/register.lua b/register.lua index 8dc20f0..1fb58b6 100644 --- a/register.lua +++ b/register.lua @@ -207,11 +207,9 @@ ui.register_page("craft", { local function stack_image_button(x, y, w, h, buttonname_prefix, item) local name = item:get_name() - local count = item:get_count() - local wear = item:get_wear() local description = item:get_meta():get_string("description") local show_is_group = false - local displayitem = name.." "..count.." "..wear + local displayitem = item:to_string() local selectitem = name if name:sub(1, 6) == "group:" then local group_name = name:sub(7) From 8e9ea34ae87f545660538bbd0a4472cc3122b978 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Thu, 15 Sep 2022 10:56:01 +0200 Subject: [PATCH 03/16] Elaborate the use of NS() --- register.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/register.lua b/register.lua index 1fb58b6..1f72bfe 100644 --- a/register.lua +++ b/register.lua @@ -243,6 +243,9 @@ local function stack_image_button(x, y, w, h, buttonname_prefix, item) return button end +-- The recipe text contains parameters, hence they can yet not be translated. +-- Instead, use a dummy translation call so that it can be picked up by the +-- static parsing of the translation string update script local recipe_text = { recipe = NS("Recipe @1 of @2"), usage = NS("Usage @1 of @2"), From 177debd13ce27db9538b35e2443ed233105b79d6 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Thu, 15 Sep 2022 12:53:41 +0200 Subject: [PATCH 04/16] Bags: Disallow moving bags into themselves Previously, the bag and its list would disappear immediately. --- bags.lua | 71 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/bags.lua b/bags.lua index 14ac875..876b1a5 100644 --- a/bags.lua +++ b/bags.lua @@ -114,6 +114,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end) +-- Player slots are preserved when unified_inventory is disabled. Do not allow modification. +-- Fix: use a detached inventory and store the data separately. local function save_bags_metadata(player, bags_inv) local is_empty = true local bags = {} @@ -163,7 +165,7 @@ local function load_bags_metadata(player, bags_inv) save_bags_metadata(player, bags_inv) end - -- Clean up deprecated garbage after saving + -- Legacy: Clean up old player lists for i = 1, 4 do local bag = "bag" .. i player_inv:set_size(bag, 0) @@ -172,46 +174,29 @@ end minetest.register_on_joinplayer(function(player) local player_name = player:get_player_name() - local bags_inv = minetest.create_detached_inventory(player_name .. "_bags",{ + local bags_inv = minetest.create_detached_inventory(player_name .. "_bags", { + allow_put = function(inv, listname, index, stack, player) + local new_slots = stack:get_definition().groups.bagslots + if not new_slots then + return 0 -- ItemStack is not a bag. + end + + -- The execution order of `allow_put`/`allow_take` is not defined. + -- We do not know the replacement ItemStack if the items are swapped. + -- Hence, bag slot upgrades and downgrades are not possible with the + -- current API. + + if not player:get_inventory():is_empty(listname .. "contents") then + -- Legacy: in case `allow_take` is not executed on old Minetest versions. + return 0 + end + return 1 + end, on_put = function(inv, listname, index, stack, player) player:get_inventory():set_size(listname .. "contents", stack:get_definition().groups.bagslots) save_bags_metadata(player, inv) end, - allow_put = function(inv, listname, index, stack, player) - local new_slots = stack:get_definition().groups.bagslots - if not new_slots then - return 0 - end - local player_inv = player:get_inventory() - local old_slots = player_inv:get_size(listname .. "contents") - - if new_slots >= old_slots then - return 1 - end - - -- using a smaller bag, make sure it fits - local old_list = player_inv:get_list(listname .. "contents") - local new_list = {} - local slots_used = 0 - local use_new_list = false - - for i, v in ipairs(old_list) do - if v and not v:is_empty() then - slots_used = slots_used + 1 - use_new_list = i > new_slots - new_list[slots_used] = v - end - end - if new_slots >= slots_used then - if use_new_list then - player_inv:set_list(listname .. "contents", new_list) - end - return 1 - end - -- New bag is smaller: Disallow inserting - return 0 - end, allow_take = function(inv, listname, index, stack, player) if player:get_inventory():is_empty(listname .. "contents") then return stack:get_count() @@ -230,6 +215,20 @@ minetest.register_on_joinplayer(function(player) load_bags_metadata(player, bags_inv) end) + +minetest.register_allow_player_inventory_action(function(player, action, inventory, info) + -- From detached inventory -> player inventory: put & take callbacks + if action ~= "put" or not info.listname:find("bag%dcontents") then + return + end + if info.stack:get_definition().groups.bagslots then + -- Problem 1: empty bags could be moved into their own slots + -- Problem 2: cannot reliably keep track of ItemStack ownership due to + --> Disallow all external bag movements into this list + return 0 + end +end) + -- register bag tools minetest.register_tool("unified_inventory:bag_small", { description = S("Small Bag"), From 9533200e257a8369e0e204149eb3ab6e63e37fe8 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 5 Oct 2022 21:07:11 +0200 Subject: [PATCH 05/16] Tidy and comment filtering functions --- api.lua | 82 ++++++++++++++++++++++++++++++++-------------------- category.lua | 3 ++ internal.lua | 33 +++++++++++++-------- 3 files changed, 75 insertions(+), 43 deletions(-) diff --git a/api.lua b/api.lua index 1609217..e4b67fa 100644 --- a/api.lua +++ b/api.lua @@ -2,40 +2,49 @@ local S = minetest.get_translator("unified_inventory") local F = minetest.formspec_escape local ui = unified_inventory +local function is_recipe_craftable(recipe) + -- Ensure the ingedients exist + for _, itemname in pairs(recipe.items) do + local groups = string.find(itemname, "group:") + if groups then + if not ui.get_group_item(string.sub(groups, 8)).item then + return false + end + else + -- Possibly an item + if not minetest.registered_items[itemname] + or minetest.get_item_group(itemname, "not_in_craft_guide") ~= 0 then + return false + end + end + end + return true +end + -- Create detached creative inventory after loading all mods minetest.after(0.01, function() local rev_aliases = {} - for source, target in pairs(minetest.registered_aliases) do - if not rev_aliases[target] then rev_aliases[target] = {} end - table.insert(rev_aliases[target], source) + for original, newname in pairs(minetest.registered_aliases) do + if not rev_aliases[newname] then + rev_aliases[newname] = {} + end + table.insert(rev_aliases[newname], original) end + + -- Filtered item list ui.items_list = {} for name, def in pairs(minetest.registered_items) do - if (not def.groups.not_in_creative_inventory or - def.groups.not_in_creative_inventory == 0) and - def.description and def.description ~= "" then + if ui.is_itemdef_listable(def) then table.insert(ui.items_list, name) + + -- Alias processing: Find recipes that belong to the current item name local all_names = rev_aliases[name] or {} table.insert(all_names, name) - for _, player_name in ipairs(all_names) do - local recipes = minetest.get_all_craft_recipes(player_name) - if recipes then - for _, recipe in ipairs(recipes) do - - local unknowns - - for _,chk in pairs(recipe.items) do - local groupchk = string.find(chk, "group:") - if (not groupchk and not minetest.registered_items[chk]) - or (groupchk and not ui.get_group_item(string.gsub(chk, "group:", "")).item) - or minetest.get_item_group(chk, "not_in_craft_guide") ~= 0 then - unknowns = true - end - end - - if not unknowns then - ui.register_craft(recipe) - end + for _, itemname in ipairs(all_names) do + local recipes = minetest.get_all_craft_recipes(itemname) + for _, recipe in ipairs(recipes or {}) do + if is_recipe_craftable(recipe) then + ui.register_craft(recipe) end end end @@ -44,6 +53,8 @@ minetest.after(0.01, function() table.sort(ui.items_list) ui.items_list_size = #ui.items_list print("Unified Inventory. Inventory size: "..ui.items_list_size) + + -- Analyse dropped items -> custom "digging" recipes for _, name in ipairs(ui.items_list) do local def = minetest.registered_items[name] -- Simple drops @@ -201,8 +212,8 @@ minetest.after(0.01, function() end end) +---------------- Home API ---------------- --- load_home local function load_home() local input = io.open(ui.home_filename, "r") if not input then @@ -219,6 +230,7 @@ local function load_home() end io.close(input) end + load_home() function ui.set_home(player, pos) @@ -247,7 +259,8 @@ function ui.go_home(player) return false end --- register_craft +---------------- Crafting API ---------------- + function ui.register_craft(options) if not options.output then return @@ -270,14 +283,12 @@ function ui.register_craft(options) end end - local craft_type_defaults = { width = 3, height = 3, uses_crafting_grid = false, } - function ui.craft_type_defaults(name, options) if not options.description then options.description = name @@ -288,8 +299,7 @@ end function ui.register_craft_type(name, options) - ui.registered_craft_types[name] = - ui.craft_type_defaults(name, options) + ui.registered_craft_types[name] = ui.craft_type_defaults(name, options) end @@ -346,6 +356,8 @@ ui.register_craft_type("digging_chance", { height = 1, }) +---------------- GUI registrations ---------------- + function ui.register_page(name, def) ui.pages[name] = def end @@ -361,6 +373,8 @@ function ui.register_button(name, def) table.insert(ui.buttons, def) end +---------------- Callback registrations ---------------- + function ui.register_on_initialized(callback) if type(callback) ~= "function" then error(("Initialized callback must be a function, %s given."):format(type(callback))) @@ -375,6 +389,8 @@ function ui.register_on_craft_registered(callback) table.insert(ui.craft_registered_callbacks, callback) end +---------------- List getters ---------------- + function ui.get_recipe_list(output) return ui.crafts_for.recipe[output] end @@ -387,11 +403,15 @@ function ui.get_registered_outputs() return outputs end +---------------- Player utilities ---------------- + function ui.is_creative(playername) return minetest.check_player_privs(playername, {creative=true}) or minetest.settings:get_bool("creative_mode") end +---------------- Formspec helpers ---------------- + function ui.single_slot(xpos, ypos, bright) return string.format("background9[%f,%f;%f,%f;ui_single_slot%s.png;false;16]", xpos, ypos, ui.imgscale, ui.imgscale, (bright and "_bright" or "") ) diff --git a/category.lua b/category.lua index d0fee5e..46b3e02 100644 --- a/category.lua +++ b/category.lua @@ -96,6 +96,9 @@ function unified_inventory.register_category(category_name, config) end update_category_list() end + +-- TODO: Mark these for removal. They are pretty much useless + function unified_inventory.set_category_symbol(category_name, symbol) ensure_category_exists(category_name) unified_inventory.registered_categories[category_name].symbol = symbol diff --git a/internal.lua b/internal.lua index 938ca19..3fbf5b7 100644 --- a/internal.lua +++ b/internal.lua @@ -329,7 +329,7 @@ function ui.set_inventory_formspec(player, page) end end -local function valid_def(def) +function ui.is_itemdef_listable(def) return (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description @@ -342,9 +342,11 @@ function ui.apply_filter(player, filter, search_dir) return false end local player_name = player:get_player_name() + local lfilter = string.lower(filter) local ffilter if lfilter:sub(1, 6) == "group:" then + -- Group filter: all groups of the item must match local groups = lfilter:sub(7):split(",") ffilter = function(name, def) for _, group in ipairs(groups) do @@ -356,6 +358,7 @@ function ui.apply_filter(player, filter, search_dir) return true end else + -- Name filter: fuzzy match item names and descriptions local player_info = minetest.get_player_information(player_name) local lang = player_info and player_info.lang_code or "" @@ -368,35 +371,41 @@ function ui.apply_filter(player, filter, search_dir) or llocaldesc and string.find(llocaldesc, lfilter, 1, true) end end - ui.filtered_items_list[player_name]={} + + local is_itemdef_listable = ui.is_itemdef_listable + local filtered_items = {} + local category = ui.current_category[player_name] or 'all' if category == 'all' then for name, def in pairs(minetest.registered_items) do - if valid_def(def) + if is_itemdef_listable(def) and ffilter(name, def) then - table.insert(ui.filtered_items_list[player_name], name) + table.insert(filtered_items, name) end end elseif category == 'uncategorized' then for name, def in pairs(minetest.registered_items) do - if (not ui.find_category(name)) - and valid_def(def) + if is_itemdef_listable(def) + and not ui.find_category(name) and ffilter(name, def) then - table.insert(ui.filtered_items_list[player_name], name) + table.insert(filtered_items, name) end end else - for name,exists in pairs(ui.registered_category_items[category]) do + -- Any other category is selected + for name, exists in pairs(ui.registered_category_items[category]) do local def = minetest.registered_items[name] if exists and def - and valid_def(def) + and is_itemdef_listable(def) and ffilter(name, def) then - table.insert(ui.filtered_items_list[player_name], name) + table.insert(filtered_items, name) end end end - table.sort(ui.filtered_items_list[player_name]) - ui.filtered_items_list_size[player_name] = #ui.filtered_items_list[player_name] + table.sort(filtered_items) + + ui.filtered_items_list_size[player_name] = #filtered_items + ui.filtered_items_list[player_name] = filtered_items ui.current_index[player_name] = 1 ui.activefilter[player_name] = filter ui.active_search_direction[player_name] = search_dir From db1c3c10b8ed97931a2fa462d19ee6d47c5eacb9 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 5 Oct 2022 21:07:41 +0200 Subject: [PATCH 06/16] API doc: use Minetest style --- doc/mod_api.txt | 94 ++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 52 deletions(-) diff --git a/doc/mod_api.txt b/doc/mod_api.txt index ef87697..99fa638 100644 --- a/doc/mod_api.txt +++ b/doc/mod_api.txt @@ -1,7 +1,8 @@ unified_inventory API ===================== -This file provides information about the API of unified_inventory. +This file provides information about the API of unified_inventory +and can be viewed in Markdown readers. API revisions within unified_inventory can be checked using: @@ -163,68 +164,57 @@ Register a non-standard craft recipe: Categories ---------- -Register a new category: - The config table (second argument) is optional, and all its members are optional - See the unified_inventory.set_category_* functions for more details on the members of the config table + * `unified_inventory.register_category(name, def)` + * Registers a new category + * `name` (string): internal category name + * `def` (optional, table): also its fields are optional unified_inventory.register_category("category_name", { - symbol = "mod_name:item_name" or "texture.png", + symbol = source, + -- ^ Can be in the format "mod_name:item_name" or "texture.png", label = "Human Readable Label", index = 5, + -- ^ Categories are sorted by index. Lower numbers appear before higher ones. + -- By default, the name is translated to a number: AA -> 0.0101, ZZ -> 0.2626 + --- Predefined category indices: "all" = -2, "uncategorized" = -1 items = { "mod_name:item_name", "another_mod:different_item" } + -- ^ List of items within this category }) + * `unified_inventory.remove_category(name)` + * Removes an entire category -Add / override the symbol for a category: - The category does not need to exist first - The symbol can be an item name or a texture image - If unset this will default to "default:stick" +Modifier functions (to be removed) - unified_inventory.set_category_symbol("category_name", "mod_name:item_name" or "texture.png") + * `unified_inventory.set_category_symbol(name, source)` + * Changes the symbol of the category. The category does not need to exist yet. + * `name` (string): internal category name + * `source` (string, optional): `"mod_name:item_name"` or `"texture.png"`. + Defaults to `"default:stick"` if not specified. + * `unified_inventory.set_category_label(name, label)` + * Changes the human readable label of the category. + * `name` (string): internal category name + * `label` (string): human readable label. Defaults to the category name. + * `unified_inventory.set_category_index(name, index)` + * Changes the sorting index of the category. + * `name` (string): internal category name + * `index` (numeric): any real number -Add / override the human readable label for a category: - If unset this will default to the category name +Item management - unified_inventory.set_category_label("category_name", "Human Readable Label") + * ` unified_inventory.add_category_item(name, itemname)` + * Adds a single item to the category + * `itemname` (string): self-explanatory + * `unified_inventory.add_category_items(name, { itemname1, itemname2, ... }` + * Same as above but with multiple items + * `unified_inventory.remove_category_item(name, itemname)` + * Removes an item from the category + * `unified_inventory.find_category(itemname)` + * Looks up the first category containing this item + * Returns: category name (string) or nil + * `unified_inventory.find_categories(itemname)` + * Looks up the item name within all registered categories + * Returns: array of category names (table) -Add / override the sorting index of the category: - Must be a number, can also be negative (-5) or fractional (2.345) - This determines the position the category appears in the list of categories - The "all" meta-category has index -2, the "misc"/"uncategorized" meta-category has index -1, use a negative number smaller than these to make a category appear before these in the list - By default categories are sorted alphabetically with an index between 0.0101(AA) and 0.2626(ZZ) - - unified_inventory.set_category_index("category_name", 5) - -Add a single item to a category: - - unified_inventory.add_category_item("category_name", "mod_name:item_name") - -Add multiple items to a category: - - unified_inventory.add_category_items("category_name", { - "mod_name:item_name", - "another_mod:different_item" - }) - -Remove an item from a category: - - unified_inventory.remove_category_item("category_name", "mod_name:item_name") - -Remove a category entirely: - - unified_inventory.remove_category("category_name") - -Finding existing items in categories: - This will find the first category an item exists in - It should be used for checking if an item is catgorised - Returns "category_name" or nil - - unified_inventory.find_category("mod_name:item_name") - - - This will find all the categories an item exists in - Returns a number indexed table (list) of category names - - unified_inventory.find_categories("mod_name:item_name") From 826d5f4683c783ca342e02b941b832604989e632 Mon Sep 17 00:00:00 2001 From: fluxionary <25628292+fluxionary@users.noreply.github.com> Date: Wed, 26 Oct 2022 01:05:03 -0700 Subject: [PATCH 07/16] Add setting to hide disabled buttons (#217) --- init.lua | 2 ++ internal.lua | 11 +++++++---- settingtypes.txt | 5 ++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/init.lua b/init.lua index 1b962da..4a09b32 100644 --- a/init.lua +++ b/init.lua @@ -52,6 +52,8 @@ unified_inventory = { list_img_offset = 0.13, standard_background = "bgcolor[#0000]background9[0,0;1,1;ui_formbg_9_sliced.png;true;16]", + hide_disabled_buttons = minetest.settings:get_bool("unified_inventory_hide_disabled_buttons", false), + version = 4 } diff --git a/internal.lua b/internal.lua index 3fbf5b7..7231969 100644 --- a/internal.lua +++ b/internal.lua @@ -52,9 +52,11 @@ local function formspec_tab_buttons(player, formspec, style) local filtered_inv_buttons = {} - for i, def in pairs(ui.buttons) do + for _, def in pairs(ui.buttons) do if not (style.is_lite_mode and def.hide_lite) then - table.insert(filtered_inv_buttons, def) + if def.condition == nil or def.condition(player) or not ui.hide_disabled_buttons then + table.insert(filtered_inv_buttons, def) + end end end @@ -71,13 +73,14 @@ local function formspec_tab_buttons(player, formspec, style) local pos_y = math.floor((i - 1) / style.main_button_cols) * style.btn_spc if def.type == "image" then - if (def.condition == nil or def.condition(player) == true) then + if (def.condition == nil or def.condition(player)) then formspec[n] = string.format("image_button[%g,%g;%g,%g;%s;%s;]", pos_x, pos_y, style.btn_size, style.btn_size, F(def.image), F(def.name)) formspec[n+1] = "tooltip["..F(def.name)..";"..(def.tooltip or "").."]" n = n+2 + else formspec[n] = string.format("image[%g,%g;%g,%g;%s^[colorize:#808080:alpha]", pos_x, pos_y, style.btn_size, style.btn_size, @@ -358,7 +361,7 @@ function ui.apply_filter(player, filter, search_dir) return true end else - -- Name filter: fuzzy match item names and descriptions + -- Name filter: fuzzy match item names and descriptions local player_info = minetest.get_player_information(player_name) local lang = player_info and player_info.lang_code or "" diff --git a/settingtypes.txt b/settingtypes.txt index 27768ac..5ab7f84 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -10,5 +10,8 @@ unified_inventory_bags (Enable bags) bool true #and the give privilege. unified_inventory_trash (Enable trash) bool true +#If enabled, disabled buttons will be hidden instead of grayed out. +unified_inventory_hide_disabled_buttons (Hide disabled buttons) bool false -unified_inventory_automatic_categorization (Items automatically added to categories) bool true \ No newline at end of file + +unified_inventory_automatic_categorization (Items automatically added to categories) bool true From 31c35dcd59ac77892126941df9c2a1d61d6a18ee Mon Sep 17 00:00:00 2001 From: fluxionary <25628292+fluxionary@users.noreply.github.com> Date: Mon, 12 Dec 2022 08:45:53 -0800 Subject: [PATCH 08/16] Remove dependency on farming (#219) Avoids circular dependencies of 3rd party mods with unified_inventory -> farming -> stairs. --- mod.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod.conf b/mod.conf index 3d27d29..0f03231 100644 --- a/mod.conf +++ b/mod.conf @@ -1,6 +1,6 @@ name = unified_inventory -optional_depends = default, creative, sfinv, datastorage, farming +optional_depends = default, creative, sfinv, datastorage description = """ Unified Inventory replaces the default survival and creative inventory. It adds a nicer interface and a number of features, such as a crafting guide. From 82cdf24045ecb6821876e77b6d3e42aec590c9c9 Mon Sep 17 00:00:00 2001 From: luk3yx Date: Sat, 31 Dec 2022 09:43:46 +1300 Subject: [PATCH 09/16] Improve scroll height calculation (#220) --- internal.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal.lua b/internal.lua index 7231969..45db6b3 100644 --- a/internal.lua +++ b/internal.lua @@ -91,9 +91,10 @@ local function formspec_tab_buttons(player, formspec, style) end formspec[n] = "scroll_container_end[]" if needs_scrollbar then + local total_rows = math.ceil(#filtered_inv_buttons / style.main_button_cols) formspec[n+1] = ("scrollbaroptions[max=%i;arrows=hide]"):format( -- This calculation is not 100% accurate but "good enough" - math.ceil((#filtered_inv_buttons - 1) / style.main_button_cols) * style.btn_spc * 5 + (total_rows - style.main_button_rows) * style.btn_spc * 10 ) formspec[n+2] = ("scrollbar[%g,%g;0.4,%g;vertical;tabbtnscroll;0]"):format( style.main_button_x + style.main_button_cols * style.btn_spc - 0.1, -- x pos From b590764026dd8ffc33b0c13438a8a0c6cc2d04e6 Mon Sep 17 00:00:00 2001 From: luk3yx Date: Thu, 5 Jan 2023 02:35:46 +1300 Subject: [PATCH 10/16] Centre page number label and move refill/trash labels (#221) * Centre page number label * Move refill and trash labels --- internal.lua | 8 +++++--- register.lua | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/internal.lua b/internal.lua index 45db6b3..0903d86 100644 --- a/internal.lua +++ b/internal.lua @@ -274,9 +274,11 @@ local function formspec_add_item_browser(player, formspec, ui_peruser) end end end - formspec[n] = string.format("label[%f,%f;%s: %s]", - ui_peruser.page_buttons_x + ui_peruser.btn_spc * (ui_peruser.is_lite_mode and 1 or 2), - ui_peruser.page_buttons_y + 0.1 + ui_peruser.btn_spc * 2, + formspec[n] = "style[page_number;content_offset=0]" + formspec[n + 1] = string.format("image_button[%f,%f;%f,0.4;;page_number;%s: %s;false;false;]", + ui_peruser.page_buttons_x, + ui_peruser.page_buttons_y + ui_peruser.btn_spc * 2 - 0.1, + ui_peruser.btn_spc * (bn - 1) + ui_peruser.btn_size, F(S("Page")), S("@1 of @2",page2,pagemax)) end diff --git a/register.lua b/register.lua index 1f72bfe..9af6421 100644 --- a/register.lua +++ b/register.lua @@ -183,14 +183,14 @@ ui.register_page("craft", { local n=#formspec+1 if ui.trash_enabled or ui.is_creative(player_name) or minetest.get_player_privs(player_name).give then - formspec[n] = string.format("label[%f,%f;%s]", craftx + 6.45, crafty + 2.4, F(S("Trash:"))) + formspec[n] = string.format("label[%f,%f;%s]", craftx + 6.35, crafty + 2.3, F(S("Trash:"))) formspec[n+1] = ui.make_trash_slot(craftx + 6.25, crafty + 2.5) n=n + 2 end if ui.is_creative(player_name) then formspec[n] = ui.single_slot(craftx - 2.5, crafty + 2.5) - formspec[n+1] = string.format("label[%f,%f;%s]", craftx - 2.3, crafty + 2.4,F(S("Refill:"))) + formspec[n+1] = string.format("label[%f,%f;%s]", craftx - 2.4, crafty + 2.3, F(S("Refill:"))) formspec[n+2] = string.format("list[detached:%srefill;main;%f,%f;1,1;]", F(player_name), craftx - 2.5 + ui.list_img_offset, crafty + 2.5 + ui.list_img_offset) end From bda9f2598f28fab39ac0e198504c531a35e99341 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 4 Jan 2023 11:08:20 +0100 Subject: [PATCH 11/16] Improve group matching for 'copy to craft' --- api.lua | 40 ++------------------------------- group.lua | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ match_craft.lua | 19 +++++----------- 3 files changed, 68 insertions(+), 51 deletions(-) diff --git a/api.lua b/api.lua index e4b67fa..cfa15ae 100644 --- a/api.lua +++ b/api.lua @@ -146,46 +146,10 @@ minetest.after(0.01, function() end -- Step 1: group-indexed lookup table for items - local spec_matcher = {} - for _, name in ipairs(ui.items_list) do - -- we only need to care about groups, exact items are handled separately - for group, value in pairs(minetest.registered_items[name].groups) do - if value and value ~= 0 then - if not spec_matcher[group] then - spec_matcher[group] = {} - end - spec_matcher[group][name] = true - end - end - end + unified_inventory.init_matching_cache() -- Step 2: Find all matching items for the given spec (groups) - local function get_matching_spec_items(specname) - if specname:sub(1,6) ~= "group:" then - return { [specname] = true } - end - - local accepted = {} - for i, group in ipairs(specname:sub(7):split(",")) do - if i == 1 then - -- First step: Copy all possible item names in this group - for name, _ in pairs(spec_matcher[group] or {}) do - accepted[name] = true - end - else - -- Perform filtering - if spec_matcher[group] then - for name, _ in pairs(accepted) do - accepted[name] = spec_matcher[group][name] - end - else - -- No matching items - return {} - end - end - end - return accepted - end + local get_matching_spec_items = unified_inventory.get_matching_items for _, recipes in pairs(ui.crafts_for.recipe) do -- List of crafts that return this item string (variable "_") diff --git a/group.lua b/group.lua index 2bc8e2f..1483b3c 100644 --- a/group.lua +++ b/group.lua @@ -1,4 +1,5 @@ local S = minetest.get_translator("unified_inventory") +local ui = unified_inventory function unified_inventory.extract_groupnames(groupname) local specname = ItemStack(groupname):get_name() @@ -26,6 +27,7 @@ end -- It may be a comma-separated list of group names. This is really a -- "group:..." ingredient specification, minus the "group:" prefix. +-- TODO Replace this with the more efficient spec matcher (below) local function compute_group_item(group_name_list) local group_names = group_name_list:split(",") local candidate_items = {} @@ -84,3 +86,61 @@ function unified_inventory.get_group_item(group_name) return group_item_cache[group_name] end + +--[[ +This is for filtering known items by groups +e.g. find all items that match "group:flower,yellow" (flower AND yellow groups) +]] +local spec_matcher = {} +function unified_inventory.init_matching_cache() + for _, name in ipairs(ui.items_list) do + -- we only need to care about groups, exact items are handled separately + for group, value in pairs(minetest.registered_items[name].groups) do + if value and value ~= 0 then + if not spec_matcher[group] then + spec_matcher[group] = {} + end + spec_matcher[group][name] = true + end + end + end +end + +--[[ +Retrieves all matching items + +Arguments: + specname (string): Item name or group(s) to filter + +Output: + { + matchingitem1 = true, + ... + } +]] +function unified_inventory.get_matching_items(specname) + if specname:sub(1,6) ~= "group:" then + return { [specname] = true } + end + + local accepted = {} + for i, group in ipairs(specname:sub(7):split(",")) do + if i == 1 then + -- First step: Copy all possible item names in this group + for name, _ in pairs(spec_matcher[group] or {}) do + accepted[name] = true + end + else + -- Perform filtering + if spec_matcher[group] then + for name, _ in pairs(accepted) do + accepted[name] = spec_matcher[group][name] + end + else + -- No matching items + return {} + end + end + end + return accepted +end diff --git a/match_craft.lua b/match_craft.lua index 2dd40b0..b2d18ec 100644 --- a/match_craft.lua +++ b/match_craft.lua @@ -126,25 +126,18 @@ Example output: } --]] function unified_inventory.find_usable_items(inv_items, craft_items) - local get_group = minetest.get_item_group local result = {} for craft_item in pairs(craft_items) do - local group = craft_item:match("^group:(.+)") - local found = {} + -- may specify group:type1,type2 + local items = unified_inventory.get_matching_items(craft_item) - if group ~= nil then - for inv_item in pairs(inv_items) do - if get_group(inv_item, group) > 0 then - found[inv_item] = true - end - end - else - if inv_items[craft_item] ~= nil then - found[craft_item] = true + local found = {} + for itemname, _ in pairs(items) do + if inv_items[itemname] then + found[itemname] = true end end - result[craft_item] = found end From de0063835c0f0519bfdb780428e0eef132c51da1 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 4 Jan 2023 11:41:48 +0100 Subject: [PATCH 12/16] Purge recipes with invalid ingredients --- api.lua | 15 +++++++++++++-- doc/mod_api.txt | 4 +++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/api.lua b/api.lua index cfa15ae..0437391 100644 --- a/api.lua +++ b/api.lua @@ -145,14 +145,18 @@ minetest.after(0.01, function() end end - -- Step 1: group-indexed lookup table for items + -- Step 1: Initialize cache for looking up groups unified_inventory.init_matching_cache() -- Step 2: Find all matching items for the given spec (groups) local get_matching_spec_items = unified_inventory.get_matching_items - for _, recipes in pairs(ui.crafts_for.recipe) do + for outputitemname, recipes in pairs(ui.crafts_for.recipe) do -- List of crafts that return this item string (variable "_") + + -- Problem: The group cache must be initialized after all mods finished loading + -- thus, invalid recipes might be indexed. Hence perform filtering with `new_recipe_list` + local new_recipe_list = {} for _, recipe in ipairs(recipes) do local ingredient_items = {} for _, spec in pairs(recipe.items) do @@ -168,7 +172,14 @@ minetest.after(0.01, function() end table.insert(ui.crafts_for.usage[name], recipe) end + + if next(ingredient_items) then + -- There's at least one known ingredient: mark as good recipe + -- PS: What whatll be done about partially incomplete recipes? + table.insert(new_recipe_list, recipe) + end end + ui.crafts_for.recipe[outputitemname] = new_recipe_list end for _, callback in ipairs(ui.initialized_callbacks) do diff --git a/doc/mod_api.txt b/doc/mod_api.txt index 99fa638..45eb432 100644 --- a/doc/mod_api.txt +++ b/doc/mod_api.txt @@ -24,7 +24,9 @@ Grouped by use-case, afterwards sorted alphabetically. Callbacks --------- -Register a callback that will be run whenever a craft is registered via unified_inventory.register_craft: +Register a callback that will be run whenever a craft is registered via unified_inventory.register_craft. +This callback is run before any recipe ingredients checks, hence it is also executed on recipes that are +purged after all mods finished loading. unified_inventory.register_on_craft_registered( function (item_name, options) From 1b074828a66aaef9a673fb9921cfeb0ce5ce7175 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Tue, 10 Jan 2023 21:27:56 +0100 Subject: [PATCH 13/16] Document and replace sounds A few sounds were replaced because I could not find them on freesound.org --- README.md | 13 +++++++++++++ callbacks.lua | 8 ++++---- register.lua | 4 ++-- sounds/birds.ogg | Bin 14797 -> 0 bytes sounds/owl.ogg | Bin 50950 -> 0 bytes sounds/ui_click.ogg | Bin 0 -> 6125 bytes sounds/ui_morning.ogg | Bin 0 -> 23446 bytes sounds/ui_owl.ogg | Bin 0 -> 14621 bytes 8 files changed, 19 insertions(+), 6 deletions(-) delete mode 100644 sounds/birds.ogg delete mode 100644 sounds/owl.ogg create mode 100644 sounds/ui_click.ogg create mode 100644 sounds/ui_morning.ogg create mode 100644 sounds/ui_owl.ogg diff --git a/README.md b/README.md index 5d23f79..8c64ab1 100644 --- a/README.md +++ b/README.md @@ -102,3 +102,16 @@ Other files from Wikimedia Commons: RealBadAngel: (CC-BY-4.0) * Everything else. + + +## Sounds + + * [`bell.ogg`](https://freesound.org/people/bennstir/sounds/81072/) by bennstir, CC 4.0 + * [`electricity.ogg`](https://freesound.org/people/Halleck/sounds/19486/) by Halleck, CC 4.0 (cut) + * [`pageflip1.ogg`](https://freesound.org/people/themfish/sounds/45823/) by themfish, CC 4.0 (cut, slowed down) + * `pageflip2.ogg` (derived from `pageflip1.ogg`) + * [`trash.ogg`](https://freesound.org/people/OwlStorm/sounds/151231/) by OwlStorm, CC 0 (speed up) + * [`trash_all.ogg`](https://freesound.org/people/abel_K/sounds/68280/) by abel_K, Sampling Plus 1.0 (speed up) + * [`ui_click.ogg`](https://freesound.org/people/lartti/sounds/527569/) by lartti, CC 0 (cut) + * [`ui_morning.ogg`](https://freesound.org/people/InspectorJ/sounds/439472/) by InspectorJ, CC 4.0 + * [`ui_owl.ogg`](https://freesound.org/people/manda_g/sounds/54987/) by manda_g, Sampling Plus 1.0 (cut) diff --git a/callbacks.lua b/callbacks.lua index fa6d03a..e949c7a 100644 --- a/callbacks.lua +++ b/callbacks.lua @@ -57,7 +57,7 @@ end) local function apply_new_filter(player, search_text, new_dir) local player_name = player:get_player_name() - minetest.sound_play("click", {to_player=player_name, gain = 0.1}) + minetest.sound_play("ui_click", {to_player=player_name, gain = 0.1}) ui.apply_filter(player, search_text, new_dir) ui.current_searchbox[player_name] = search_text ui.set_inventory_formspec(player, ui.current_page[player_name]) @@ -114,7 +114,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) for i, def in pairs(unified_inventory.buttons) do if fields[def.name] then def.action(player) - minetest.sound_play("click", + minetest.sound_play("ui_click", {to_player=player_name, gain = 0.1}) return end @@ -179,7 +179,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end if clicked_item then - minetest.sound_play("click", + minetest.sound_play("ui_click", {to_player=player_name, gain = 0.1}) local page = unified_inventory.current_page[player_name] local player_creative = unified_inventory.is_creative(player_name) @@ -219,7 +219,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if not (fields.alternate or fields.alternate_prev) then return end - minetest.sound_play("click", + minetest.sound_play("ui_click", {to_player=player_name, gain = 0.1}) local item_name = unified_inventory.current_item[player_name] if not item_name then diff --git a/register.lua b/register.lua index 9af6421..225a861 100644 --- a/register.lua +++ b/register.lua @@ -98,7 +98,7 @@ ui.register_button("misc_set_day", { action = function(player) local player_name = player:get_player_name() if minetest.check_player_privs(player_name, {settime=true}) then - minetest.sound_play("birds", + minetest.sound_play("ui_morning", {to_player=player_name, gain = 1.0}) minetest.set_timeofday((6000 % 24000) / 24000) minetest.chat_send_player(player_name, @@ -122,7 +122,7 @@ ui.register_button("misc_set_night", { action = function(player) local player_name = player:get_player_name() if minetest.check_player_privs(player_name, {settime=true}) then - minetest.sound_play("owl", + minetest.sound_play("ui_owl", {to_player=player_name, gain = 1.0}) minetest.set_timeofday((21000 % 24000) / 24000) minetest.chat_send_player(player_name, diff --git a/sounds/birds.ogg b/sounds/birds.ogg deleted file mode 100644 index 4a9339544a9ce969a2ff2402d4e951d36dc03077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14797 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 diff --git a/sounds/ui_click.ogg b/sounds/ui_click.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0c9fe31b1c8ee2254ca4965bd883491d9f3221d8 GIT binary patch literal 6125 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 literal 0 HcmV?d00001 diff --git a/sounds/ui_morning.ogg b/sounds/ui_morning.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7fb8c22bdefb7036b1831e3cffd4a2bb179659b9 GIT binary patch literal 23446 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 literal 0 HcmV?d00001 diff --git a/sounds/ui_owl.ogg b/sounds/ui_owl.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a1433f9e8e676a6ce2ab8dc8a73a24d2edf681dc GIT binary patch literal 14621 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 Date: Tue, 10 Jan 2023 13:41:36 +1300 Subject: [PATCH 14/16] Make bags support lite mode --- bags.lua | 65 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/bags.lua b/bags.lua index 876b1a5..464b65b 100644 --- a/bags.lua +++ b/bags.lua @@ -10,25 +10,26 @@ local F = minetest.formspec_escape local ui = unified_inventory ui.register_page("bags", { - get_formspec = function(player) + get_formspec = function(player, perplayer_formspec) local player_name = player:get_player_name() - return { formspec = table.concat({ - ui.style_full.standard_inv_bg, - ui.single_slot(0.925, 1.5), - ui.single_slot(3.425, 1.5), - ui.single_slot(5.925, 1.5), - ui.single_slot(8.425, 1.5), - "label["..ui.style_full.form_header_x..","..ui.style_full.form_header_y..";" .. F(S("Bags")) .. "]", - "button[0.6125,2.75;1.875,0.75;bag1;" .. F(S("Bag @1", 1)) .. "]", - "button[3.1125,2.75;1.875,0.75;bag2;" .. F(S("Bag @1", 2)) .. "]", - "button[5.6125,2.75;1.875,0.75;bag3;" .. F(S("Bag @1", 3)) .. "]", - "button[8.1125,2.75;1.875,0.75;bag4;" .. F(S("Bag @1", 4)) .. "]", + local std_inv_x = perplayer_formspec.std_inv_x + local formspec = { + perplayer_formspec.standard_inv_bg, + "label[", perplayer_formspec.form_header_x, ",", + perplayer_formspec.form_header_y, ";", F(S("Bags")), "]", "listcolors[#00000000;#00000000]", - "list[detached:" .. F(player_name) .. "_bags;bag1;1.075,1.65;1,1;]", - "list[detached:" .. F(player_name) .. "_bags;bag2;3.575,1.65;1,1;]", - "list[detached:" .. F(player_name) .. "_bags;bag3;6.075,1.65;1,1;]", - "list[detached:" .. F(player_name) .. "_bags;bag4;8.575,1.65;1,1;]" - }) } + } + + for i = 1, 4 do + local x = std_inv_x + i * 2.5 + formspec[#formspec + 1] = ui.single_slot(x - 1.875, 1.5) + formspec[#formspec + 1] = string.format("list[detached:%s_bags;bag%i;%.3f,1.65;1,1;]", + F(player_name), i, x - 1.725) + formspec[#formspec + 1] = string.format("button[%.4f,2.75;1.875,0.75;bag%i;%s]", + x - 2.1875, i, F(S("Bag @1", i))) + end + + return { formspec = table.concat(formspec) } end, }) @@ -36,7 +37,6 @@ ui.register_button("bags", { type = "image", image = "ui_bags_icon.png", tooltip = S("Bags"), - hide_lite=true }) local function get_player_bag_stack(player, i) @@ -48,23 +48,38 @@ end for bag_i = 1, 4 do ui.register_page("bag" .. bag_i, { - get_formspec = function(player) + get_formspec = function(player, perplayer_formspec) local stack = get_player_bag_stack(player, bag_i) local image = stack:get_definition().inventory_image local slots = stack:get_definition().groups.bagslots + local std_inv_x = perplayer_formspec.std_inv_x + local lite_mode = perplayer_formspec.is_lite_mode + + local bag_inv_y, header_x, header_y = 1.5, 0.3, 0.65 + if lite_mode then + bag_inv_y = 0.5 + header_x = perplayer_formspec.form_header_x + header_y = perplayer_formspec.form_header_y + end local formspec = { - ui.style_full.standard_inv_bg, - ui.make_inv_img_grid(0.3, 1.5, 8, slots/8), - "image[9.2,0.4;1,1;" .. image .. "]", - "label[0.3,0.65;" .. F(S("Bag @1", bag_i)) .. "]", + perplayer_formspec.standard_inv_bg, + ui.make_inv_img_grid(std_inv_x, bag_inv_y, 8, slots/8), + "label[", header_x, ",", header_y, ";", F(S("Bag @1", bag_i)), "]", "listcolors[#00000000;#00000000]", "listring[current_player;main]", string.format("list[current_player;bag%icontents;%f,%f;8,3;]", - bag_i, 0.3 + ui.list_img_offset, 1.5 + ui.list_img_offset), - "listring[current_name;bag" .. bag_i .. "contents]", + bag_i, std_inv_x + ui.list_img_offset, bag_inv_y + ui.list_img_offset), + "listring[current_name;bag", bag_i, "contents]", } + + if lite_mode then + return { formspec = table.concat(formspec) } + end + local n = #formspec + 1 + formspec[n] = "image[" .. std_inv_x + 8.9 .. ",0.4;1,1;" .. image .. "]" + n = n + 1 local player_name = player:get_player_name() -- For if statement. if ui.trash_enabled From b2cc3d15320aabc9df0d6d90e22e7661099dbb8a Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Fri, 27 Jan 2023 15:57:28 +0100 Subject: [PATCH 15/16] Fix search not working after page flip --- callbacks.lua | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/callbacks.lua b/callbacks.lua index e949c7a..52cb710 100644 --- a/callbacks.lua +++ b/callbacks.lua @@ -63,24 +63,41 @@ local function apply_new_filter(player, search_text, new_dir) ui.set_inventory_formspec(player, ui.current_page[player_name]) end -minetest.register_on_player_receive_fields(function(player, formname, fields) +-- Search box handling +local function receive_fields_searchbox(player, formname, fields) local player_name = player:get_player_name() - local ui_peruser,draw_lite_mode = unified_inventory.get_per_player_formspec(player_name) + -- always take new search text, even if not searching on it yet + if fields.searchbox and fields.searchbox ~= ui.current_searchbox[player_name] then + ui.current_searchbox[player_name] = fields.searchbox + end + if fields.searchbutton + or fields.key_enter_field == "searchbox" then + + if ui.current_searchbox[player_name] ~= ui.activefilter[player_name] then + ui.apply_filter(player, ui.current_searchbox[player_name], "nochange") + ui.set_inventory_formspec(player, ui.current_page[player_name]) + minetest.sound_play("paperflip2", + {to_player=player_name, gain = 1.0}) + end + elseif fields.searchresetbutton then + if ui.activefilter[player_name] ~= "" then + apply_new_filter(player, "", "nochange") + end + end +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) if formname ~= "" then return end - -- always take new search text, even if not searching on it yet - local dirty_search_filter = false + receive_fields_searchbox(player, formname, fields) - if fields.searchbox - and fields.searchbox ~= unified_inventory.current_searchbox[player_name] then - unified_inventory.current_searchbox[player_name] = fields.searchbox - dirty_search_filter = true - end + local player_name = player:get_player_name() + local ui_peruser,draw_lite_mode = unified_inventory.get_per_player_formspec(player_name) local clicked_category for name, value in pairs(fields) do @@ -201,20 +218,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end - if fields.searchbutton - or fields.key_enter_field == "searchbox" then - if dirty_search_filter then - ui.apply_filter(player, ui.current_searchbox[player_name], "nochange") - ui.set_inventory_formspec(player, ui.current_page[player_name]) - minetest.sound_play("paperflip2", - {to_player=player_name, gain = 1.0}) - end - elseif fields.searchresetbutton then - if ui.activefilter[player_name] ~= "" then - apply_new_filter(player, "", "nochange") - end - end - -- alternate buttons if not (fields.alternate or fields.alternate_prev) then return From 15d729c351bae663e022ac5528c639e8e8a9b02b Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Tue, 6 Jun 2023 19:41:03 +0200 Subject: [PATCH 16/16] Waypoints: Add teleportation button This also adds button click sounds and makes use of the teleport sound for consistency. --- README.md | 3 +++ textures/ui_teleport.png | Bin 0 -> 2217 bytes waypoints.lua | 55 +++++++++++++++++++++++++++------------ 3 files changed, 41 insertions(+), 17 deletions(-) create mode 100644 textures/ui_teleport.png diff --git a/README.md b/README.md index 8c64ab1..e71fb42 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,9 @@ From http://www.clker.com (Public Domain, CC-BY-4.0): * [`ui_pencil_icon.pnc`](http://www.clker.com/clipart-2256.html) * [`ui_waypoint_set_icon.png`](http://www.clker.com/clipart-larger-flag.html) +From https://www.svgrepo.com (CC-BY) + * [`ui_teleport.png`](https://www.svgrepo.com/svg/321565/teleport) + Everaldo Coelho (YellowIcon) (LGPL v2.1+): * [`ui_craftguide_icon.png` / `ui_craft_icon.png`](http://commons.wikimedia.org/wiki/File:Advancedsettings.png) diff --git a/textures/ui_teleport.png b/textures/ui_teleport.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea5d20315d0c6c49a0c11e534600daea13bb58e GIT binary patch literal 2217 zcmai#c{J4h9>-_KIx-9%Ly{P2D9cD)35{(`wlT(7vW}&iB%zWe!#pBm$k=*9X)F^` z5#q5|_T-@=AxpQhWN8d;NX#8{yZ3aSbMEV$-|zSRyw3am{hsst{qdvXuo#GloCp8_ zfLNR~!}FfeTbD2&@4h^qvIYPEZE)5EG;ic?Ltt?U6I_Q0uG7Sh_%S+e8|S~1KZ@I} z{~PCRdIsr-~XNAouMg}?PXl9$|BB+vd*`r+r+xBO0~_{)DYKkGZ{m+@!rfBnw- z{1i8GnwvPo&79+wvAMMzZu26SwZ>iD;I3_K_2@;H8+k9(`!XJD4-ni1-9kZen*+!# z42-t1#%)1xJmum>v#8wrWY$;tP43v86kfX>8=*C zNI*3@H^?oOtat9le(|JkAUahPJb;wav{Uu2bsOTy_0G;mwYuZ{2>RTB_4wQCX5ChS z>B?nJB^yb1HdsZDpyWmVnUR=_s{CL2Er>=+W%jfQ!QS#H@)-#dpbT2~EE<}tiUn41 z5$Yh-2o>{=*h#hiu-x6fhI^Og?Lnvo@Ev8NUjJ8K!+Lj@1k6*CtFk}n5QjUGG1}PX zry>=-*19d$;*k+nP1hQ2l>(<0gDTGFL(fte2GqEiJuCC?EWs#7i2pTH_y9p=@}?{5 z%f;85(~hH?ww135&8=5oA6=caxwG^fHrtBO1Klh0IBMYks@Gd9hQfB`9?1UO49{_H zRx_hxjhoM+`gX;dl9BwYeI{Aee&g9!Lfz>SQoB085yPDD$G+RV{#G^#1?LoGA$l7Cot1Vi4 z3V{0+q1hh>$Hw-2r>gkI>n?`fmd)sCdG~^K&Hj-^bCfC?cvpl`@5|cco z1iyMR*9VZOQ2L(XBsE6Om!!1o)KXHeMxLm=op-*e4?PaaH&y#B;sx*{lp=-4pbz!M zNVZ(&znN=SiV~1fun>T1x6x`}5oO!d%{rcxtCx0H-xGbzyl)f#UKw)1!x8Y|HfyXu{cN}|W;${$*R_3G(&(_15`qOc;T`I8c|eI-`7vSXm84vEmyUi_>%+NI_4 z(AfvzN)<5Sn)p%rXVXF3eO8jU{Zy2KbF~Y-nV>Giu2hpX*Z2~2u22%*FXK!tFtau4 zfCVvGy%pYbuoCvbSk>&tMgUMZaE6-bzKg@+08#z_tw4SQl?w@yldirE6IR}l=D62MwWyIi@LPQ)a*18sEi!syd#L|Uh8dqpQJqOQ7T(8YcR&@W!^>9Y&d;GieaWl+` z4MjyKQYQ%4^CXTN;k66;O(7)=bJK*~V)^SN)5h!o$Uk@Iwd+A4_zoP6pD#pzAII=F zZPlW>)xY%po{(B*5tZ?#=;3&C9D_nJA6I_NZRzpx6+Wcnd`x!1$1ZI_Oi!?&%kIzt z2DF%50A2?2zPNAqgmA5l`exwD*B}v0%wDoqe|MhykrXrT$5?N8fLbG2RguVAI$!dF zG)leRY@hJC_u;`z1_YZEoZ&dMm?h3cow!YLlS#6a`OO!lQ`T75E1eY`{^DW0lF*;b zteB&3y}*L%T7@s-Pc5FdIa0o^eIegVd?NT=x@K{Am8E_!D7sM*LYIpZ=JZRe4!yZD zD0mC%4yX5>bTjn>58NdJMQo;J(VDh}c*)Otn)X$*xAdFbGGIbP&5LiQ-$yoCTiLN9 zLJCi1>JBVp9q%v+p@(h0b=b}i-5