diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..32492e4 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,19 @@ +Unified Inventory for Minetest +Copyright (C) 2012-2014 Maciej Kasatkin (RealBadAngel) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Contact information: + Examine a git patch to get the contributor's email address. diff --git a/README.md b/README.md index 1de7256..15802c6 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,48 @@ -Unified inventory -================= +# Unified Inventory Unified Inventory replaces the default survival and creative inventory. -It adds a nicer interface and a number of features, such as a crafting guide. -License -======= + +## Features + + * Node, item and tool browser + * Crafting guide + * Can copy the recipe to the crafting grid + * Recipe search function by ingredients + * Up to four bags with up to 24 slots each + * Home function to teleport + * Trash slot + * Lite mode: reduces the item browser width + * Mod API for modders: see [mod_api.txt](doc/mod_api.txt) + * Setting-determinated features: see [settingtypes.txt](settingtypes.txt) + + +## Requirements + + * Minetest 5.0.0+ since commit 4403b69 + * Minetest 0.4.16+ prior commit 4403b69 + + +# Licenses Copyright (C) 2012-2014 Maciej Kasatkin (RealBadAngel) -Unified inventory code is licensed under the GNU LGPLv2+. +Copyright (C) 2012-? Various minetest-mods contributors -Licenses for textures: + +## Code + +GNU LGPLv2+, see [license notice](LICENSE.txt) + + +## Textures VanessaE: (CC-BY-4.0) + * `ui_group.png` Tango Project: (Public Domain, CC-BY-4.0) + * [`ui_reset_icon.png`](https://commons.wikimedia.org/wiki/File:Edit-clear.svg) * [`ui_doubleleft_icon.png`](http://commons.wikimedia.org/wiki/File:Media-seek-backward.svg) * [`ui_doubleright_icon.png`](http://commons.wikimedia.org/wiki/File:Media-seek-forward.svg) @@ -25,6 +51,7 @@ Tango Project: (Public Domain, CC-BY-4.0) * [`ui_skip_forward_icon.png`](http://commons.wikimedia.org/wiki/File:Media-skip-forward.svg) From http://www.clker.com (Public Domain, CC-BY-4.0): + * [`bags_small.png`](http://www.clker.com/clipart-moneybag-empty.html) * [`bags_medium.png`](http://www.clker.com/clipart-backpack-1.html) * [`bags_large.png` / `ui_bags_icon.png`](http://www.clker.com/clipart-backpack-green-brown.html) @@ -37,25 +64,33 @@ From http://www.clker.com (Public Domain, CC-BY-4.0): * [`ui_waypoint_set_icon.png`](http://www.clker.com/clipart-larger-flag.html) Everaldo Coelho (YellowIcon) (LGPL v2.1+): + * [`ui_craftguide_icon.png` / `ui_craft_icon.png`](http://commons.wikimedia.org/wiki/File:Advancedsettings.png) Gregory H. Revera: (CC-BY-SA 3.0) + * [`ui_moon_icon.png`](http://commons.wikimedia.org/wiki/File:FullMoon2010.jpg) Thomas Bresson: (CC-BY 3.0) + * [`ui_sun_icon.png`](http://commons.wikimedia.org/wiki/File:2012-10-13_15-29-35-sun.jpg) Fibonacci: (Public domain, CC-BY 4.0) + * [`ui_xyz_off_icon.png`](http://commons.wikimedia.org/wiki/File:No_sign.svg) Gregory Maxwell: (Public domain, CC-BY 4.0) + * [`ui_ok_icon.png`](http://commons.wikimedia.org/wiki/File:Yes_check.svg) Adrien Facélina: (LGPL v2.1+) + * [`inventory_plus_worldedit_gui.png`](http://commons.wikimedia.org/wiki/File:Erioll_world_2.svg) Other files from Wikimedia Commons: + * [`ui_gohome_icon.png` / `ui_home_icon.png` / `ui_sethome_icon.png`](http://commons.wikimedia.org/wiki/File:Home_256x256.png) (GPL v2+) RealBadAngel: (CC-BY-4.0) + * Everything else. \ No newline at end of file diff --git a/api.lua b/api.lua index f6afec5..3ec17ec 100644 --- a/api.lua +++ b/api.lua @@ -187,7 +187,7 @@ end function unified_inventory.go_home(player) local pos = unified_inventory.home_pos[player:get_player_name()] if pos then - player:setpos(pos) + player:set_pos(pos) end end diff --git a/bags.lua b/bags.lua index 75ea13b..02858c5 100644 --- a/bags.lua +++ b/bags.lua @@ -1,7 +1,9 @@ --- Bags for Minetest +--[[ +Bags for Minetest --- Copyright (c) 2012 cornernote, Brett O'Donnell --- License: GPLv3 +Copyright (c) 2012 cornernote, Brett O'Donnell +License: GPLv3 +--]] local S = unified_inventory.gettext local F = minetest.formspec_escape @@ -118,17 +120,19 @@ local function save_bags_metadata(player, bags_inv) is_empty = false end end + local meta = player:get_meta() if is_empty then - player:set_attribute("unified_inventory:bags", nil) + meta:set_string("unified_inventory:bags", nil) else - player:set_attribute("unified_inventory:bags", + meta:set_string("unified_inventory:bags", minetest.serialize(bags)) end end local function load_bags_metadata(player, bags_inv) local player_inv = player:get_inventory() - local bags_meta = player:get_attribute("unified_inventory:bags") + local meta = player:get_meta() + local bags_meta = meta:get_string("unified_inventory:bags") local bags = bags_meta and minetest.deserialize(bags_meta) or {} local dirty_meta = false if not bags_meta then diff --git a/callbacks.lua b/callbacks.lua index e6ea3e7..8bfe6b6 100644 --- a/callbacks.lua +++ b/callbacks.lua @@ -47,6 +47,15 @@ minetest.register_on_joinplayer(function(player) refill:set_size("main", 1) 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}) + unified_inventory.apply_filter(player, search_text, new_dir) + unified_inventory.current_searchbox[player_name] = search_text + unified_inventory.set_inventory_formspec(player, + unified_inventory.current_page[player_name]) +end + minetest.register_on_player_receive_fields(function(player, formname, fields) local player_name = player:get_player_name() @@ -60,7 +69,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields.searchbox and fields.searchbox ~= unified_inventory.current_searchbox[player_name] then unified_inventory.current_searchbox[player_name] = fields.searchbox - unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) end for i, def in pairs(unified_inventory.buttons) do @@ -112,21 +120,18 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) unified_inventory.current_page[player_name]) end + -- Check clicked item image button local clicked_item for name, value in pairs(fields) do - if string.sub(name, 1, 12) == "item_button_" then - local new_dir, mangled_item = string.match(name, "^item_button_([a-z]+)_(.*)$") + local new_dir, mangled_item = string.match(name, "^item_button_([a-z]+)_(.*)$") + if new_dir and mangled_item then clicked_item = unified_inventory.demangle_for_formspec(mangled_item) if string.sub(clicked_item, 1, 6) == "group:" then - minetest.sound_play("click", {to_player=player_name, gain = 0.1}) - unified_inventory.apply_filter(player, clicked_item, new_dir) - unified_inventory.current_searchbox[player_name] = clicked_item - unified_inventory.set_inventory_formspec(player, - unified_inventory.current_page[player_name]) + -- Change search filter to this group + apply_new_filter(player, clicked_item, new_dir) return end - if new_dir == "recipe" - or new_dir == "usage" then + if new_dir == "recipe" or new_dir == "usage" then unified_inventory.current_craft_direction[player_name] = new_dir end break @@ -145,6 +150,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) unified_inventory.alternate[player_name] = 1 unified_inventory.set_inventory_formspec(player, "craftguide") elseif player_creative then + -- Creative page: Add entire stack to inventory local inv = player:get_inventory() local stack = ItemStack(clicked_item) stack:set_count(stack:get_stack_max()) @@ -162,12 +168,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) minetest.sound_play("paperflip2", {to_player=player_name, gain = 1.0}) elseif fields.searchresetbutton then - unified_inventory.apply_filter(player, "", "nochange") - unified_inventory.current_searchbox[player_name] = "" - unified_inventory.set_inventory_formspec(player, - unified_inventory.current_page[player_name]) - minetest.sound_play("click", - {to_player=player_name, gain = 0.1}) + apply_new_filter(player, "", "nochange") end -- alternate buttons diff --git a/internal.lua b/internal.lua index 7cd27f0..c049f29 100644 --- a/internal.lua +++ b/internal.lua @@ -302,15 +302,13 @@ function unified_inventory.apply_filter(player, filter, search_dir) return string.find(lname, lfilter, 1, true) or string.find(ldesc, lfilter, 1, true) end end - local is_creative = unified_inventory.is_creative(player_name) unified_inventory.filtered_items_list[player_name]={} 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 ~= "" - and ffilter(name, def) - and (is_creative or unified_inventory.crafts_for.recipe[def.name]) then + and ffilter(name, def) then table.insert(unified_inventory.filtered_items_list[player_name], name) end end diff --git a/mod.conf b/mod.conf index 26a8af6..e22e595 100644 --- a/mod.conf +++ b/mod.conf @@ -1 +1,4 @@ name = unified_inventory +depends = default +optional_depends = creative, sfinv, intllib, datastorage, farming +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. diff --git a/textures/bags_large.png b/textures/bags_large.png index 6d56299..187021c 100644 Binary files a/textures/bags_large.png and b/textures/bags_large.png differ diff --git a/textures/bags_medium.png b/textures/bags_medium.png index 59ba11d..d908883 100644 Binary files a/textures/bags_medium.png and b/textures/bags_medium.png differ diff --git a/textures/bags_small.png b/textures/bags_small.png index d48ffcb..9e4f4f6 100644 Binary files a/textures/bags_small.png and b/textures/bags_small.png differ diff --git a/textures/ui_1_icon.png b/textures/ui_1_icon.png index f4e85a0..ed4ceb9 100644 Binary files a/textures/ui_1_icon.png and b/textures/ui_1_icon.png differ diff --git a/textures/ui_2_icon.png b/textures/ui_2_icon.png index 96175a6..f4566d8 100644 Binary files a/textures/ui_2_icon.png and b/textures/ui_2_icon.png differ diff --git a/textures/ui_3_icon.png b/textures/ui_3_icon.png index 1db2916..ff6ebbb 100644 Binary files a/textures/ui_3_icon.png and b/textures/ui_3_icon.png differ diff --git a/textures/ui_4_icon.png b/textures/ui_4_icon.png index f344af4..3a12bfd 100644 Binary files a/textures/ui_4_icon.png and b/textures/ui_4_icon.png differ diff --git a/textures/ui_5_icon.png b/textures/ui_5_icon.png index e5dc4b0..c389152 100644 Binary files a/textures/ui_5_icon.png and b/textures/ui_5_icon.png differ diff --git a/textures/ui_bags_icon.png b/textures/ui_bags_icon.png index 6d56299..2882a23 100644 Binary files a/textures/ui_bags_icon.png and b/textures/ui_bags_icon.png differ diff --git a/textures/ui_bags_lg_form.png b/textures/ui_bags_lg_form.png index 713cacc..24dab30 100644 Binary files a/textures/ui_bags_lg_form.png and b/textures/ui_bags_lg_form.png differ diff --git a/textures/ui_bags_main_form.png b/textures/ui_bags_main_form.png index 37450f3..8c168d2 100644 Binary files a/textures/ui_bags_main_form.png and b/textures/ui_bags_main_form.png differ diff --git a/textures/ui_bags_med_form.png b/textures/ui_bags_med_form.png index 33e922e..27a1591 100644 Binary files a/textures/ui_bags_med_form.png and b/textures/ui_bags_med_form.png differ diff --git a/textures/ui_bags_sm_form.png b/textures/ui_bags_sm_form.png index b3b66bb..6234eb8 100644 Binary files a/textures/ui_bags_sm_form.png and b/textures/ui_bags_sm_form.png differ diff --git a/textures/ui_bags_trash.png b/textures/ui_bags_trash.png index 6338999..0bc11c5 100644 Binary files a/textures/ui_bags_trash.png and b/textures/ui_bags_trash.png differ diff --git a/textures/ui_blank_image.png b/textures/ui_blank_image.png index a8735b8..83d9d1a 100644 Binary files a/textures/ui_blank_image.png and b/textures/ui_blank_image.png differ diff --git a/textures/ui_blue_icon_background.png b/textures/ui_blue_icon_background.png index 9434217..2f872a4 100644 Binary files a/textures/ui_blue_icon_background.png and b/textures/ui_blue_icon_background.png differ diff --git a/textures/ui_circular_arrows_icon.png b/textures/ui_circular_arrows_icon.png index d687bbf..c6846e6 100644 Binary files a/textures/ui_circular_arrows_icon.png and b/textures/ui_circular_arrows_icon.png differ diff --git a/textures/ui_craft_icon.png b/textures/ui_craft_icon.png index fbe4cc7..a2283e3 100644 Binary files a/textures/ui_craft_icon.png and b/textures/ui_craft_icon.png differ diff --git a/textures/ui_craftgrid_icon.png b/textures/ui_craftgrid_icon.png index 6731327..5111f1e 100644 Binary files a/textures/ui_craftgrid_icon.png and b/textures/ui_craftgrid_icon.png differ diff --git a/textures/ui_craftguide_form.png b/textures/ui_craftguide_form.png index 3cd8643..d9be53f 100644 Binary files a/textures/ui_craftguide_form.png and b/textures/ui_craftguide_form.png differ diff --git a/textures/ui_craftguide_icon.png b/textures/ui_craftguide_icon.png index 5866b7b..d6c89e6 100644 Binary files a/textures/ui_craftguide_icon.png and b/textures/ui_craftguide_icon.png differ diff --git a/textures/ui_crafting_form.png b/textures/ui_crafting_form.png index 8c980ac..9043287 100644 Binary files a/textures/ui_crafting_form.png and b/textures/ui_crafting_form.png differ diff --git a/textures/ui_doubleleft_icon.png b/textures/ui_doubleleft_icon.png index 587bb25..64d50c0 100644 Binary files a/textures/ui_doubleleft_icon.png and b/textures/ui_doubleleft_icon.png differ diff --git a/textures/ui_doubleright_icon.png b/textures/ui_doubleright_icon.png index f552acc..af20930 100644 Binary files a/textures/ui_doubleright_icon.png and b/textures/ui_doubleright_icon.png differ diff --git a/textures/ui_form_bg.png b/textures/ui_form_bg.png index 74a6a3b..d973b34 100644 Binary files a/textures/ui_form_bg.png and b/textures/ui_form_bg.png differ diff --git a/textures/ui_gohome_icon.png b/textures/ui_gohome_icon.png index b3397ef..c5126ae 100644 Binary files a/textures/ui_gohome_icon.png and b/textures/ui_gohome_icon.png differ diff --git a/textures/ui_green_icon_background.png b/textures/ui_green_icon_background.png index b06c29c..ea28c82 100644 Binary files a/textures/ui_green_icon_background.png and b/textures/ui_green_icon_background.png differ diff --git a/textures/ui_group.png b/textures/ui_group.png index 2e4714a..b6b8d28 100644 Binary files a/textures/ui_group.png and b/textures/ui_group.png differ diff --git a/textures/ui_home_icon.png b/textures/ui_home_icon.png index e44419d..b9ce4f3 100644 Binary files a/textures/ui_home_icon.png and b/textures/ui_home_icon.png differ diff --git a/textures/ui_left_icon.png b/textures/ui_left_icon.png index 68cffb8..373b71e 100644 Binary files a/textures/ui_left_icon.png and b/textures/ui_left_icon.png differ diff --git a/textures/ui_main_inventory.png b/textures/ui_main_inventory.png index 3d380de..b7860ca 100644 Binary files a/textures/ui_main_inventory.png and b/textures/ui_main_inventory.png differ diff --git a/textures/ui_misc_form.png b/textures/ui_misc_form.png index e74a605..2d6ad01 100644 Binary files a/textures/ui_misc_form.png and b/textures/ui_misc_form.png differ diff --git a/textures/ui_moon_icon.png b/textures/ui_moon_icon.png index b2d7b44..cec7009 100644 Binary files a/textures/ui_moon_icon.png and b/textures/ui_moon_icon.png differ diff --git a/textures/ui_off_icon.png b/textures/ui_off_icon.png index 319fc6e..187e59a 100644 Binary files a/textures/ui_off_icon.png and b/textures/ui_off_icon.png differ diff --git a/textures/ui_ok_icon.png b/textures/ui_ok_icon.png index dcbda1d..4073899 100644 Binary files a/textures/ui_ok_icon.png and b/textures/ui_ok_icon.png differ diff --git a/textures/ui_on_icon.png b/textures/ui_on_icon.png index a9884cf..0f5c48f 100644 Binary files a/textures/ui_on_icon.png and b/textures/ui_on_icon.png differ diff --git a/textures/ui_pencil_icon.png b/textures/ui_pencil_icon.png index a73b740..dfcc19b 100644 Binary files a/textures/ui_pencil_icon.png and b/textures/ui_pencil_icon.png differ diff --git a/textures/ui_red_icon_background.png b/textures/ui_red_icon_background.png index 67f5dcc..8d4d807 100644 Binary files a/textures/ui_red_icon_background.png and b/textures/ui_red_icon_background.png differ diff --git a/textures/ui_reset_icon.png b/textures/ui_reset_icon.png index ec9ef62..e966685 100644 Binary files a/textures/ui_reset_icon.png and b/textures/ui_reset_icon.png differ diff --git a/textures/ui_right_icon.png b/textures/ui_right_icon.png index 1f11868..cbdab76 100644 Binary files a/textures/ui_right_icon.png and b/textures/ui_right_icon.png differ diff --git a/textures/ui_search_icon.png b/textures/ui_search_icon.png index b529e43..2934bdc 100644 Binary files a/textures/ui_search_icon.png and b/textures/ui_search_icon.png differ diff --git a/textures/ui_sethome_icon.png b/textures/ui_sethome_icon.png index 5c56d64..4c0f6e5 100644 Binary files a/textures/ui_sethome_icon.png and b/textures/ui_sethome_icon.png differ diff --git a/textures/ui_single_slot.png b/textures/ui_single_slot.png index ef2a246..63da98d 100644 Binary files a/textures/ui_single_slot.png and b/textures/ui_single_slot.png differ diff --git a/textures/ui_skip_backward_icon.png b/textures/ui_skip_backward_icon.png index fde4fea..eac6e4c 100644 Binary files a/textures/ui_skip_backward_icon.png and b/textures/ui_skip_backward_icon.png differ diff --git a/textures/ui_skip_forward_icon.png b/textures/ui_skip_forward_icon.png index 182e7ed..3f85a9f 100644 Binary files a/textures/ui_skip_forward_icon.png and b/textures/ui_skip_forward_icon.png differ diff --git a/textures/ui_sun_icon.png b/textures/ui_sun_icon.png index 262b1f3..11c7eef 100644 Binary files a/textures/ui_sun_icon.png and b/textures/ui_sun_icon.png differ diff --git a/textures/ui_trash_icon.png b/textures/ui_trash_icon.png index 081bac7..c5ac97c 100644 Binary files a/textures/ui_trash_icon.png and b/textures/ui_trash_icon.png differ diff --git a/textures/ui_waypoint_set_icon.png b/textures/ui_waypoint_set_icon.png index 6eb9d19..4649a4d 100644 Binary files a/textures/ui_waypoint_set_icon.png and b/textures/ui_waypoint_set_icon.png differ diff --git a/textures/ui_waypoints_icon.png b/textures/ui_waypoints_icon.png index 530c1d7..91d6e3b 100644 Binary files a/textures/ui_waypoints_icon.png and b/textures/ui_waypoints_icon.png differ diff --git a/textures/ui_xyz_icon.png b/textures/ui_xyz_icon.png index 9b48acb..003ea63 100644 Binary files a/textures/ui_xyz_icon.png and b/textures/ui_xyz_icon.png differ diff --git a/textures/ui_xyz_on_icon.png b/textures/ui_xyz_on_icon.png index 9b48acb..003ea63 100644 Binary files a/textures/ui_xyz_on_icon.png and b/textures/ui_xyz_on_icon.png differ diff --git a/waypoints.lua b/waypoints.lua index 3f9ee58..b6b729c 100644 --- a/waypoints.lua +++ b/waypoints.lua @@ -174,7 +174,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields["set_waypoint"..i] then hit = true - local pos = player:getpos() + local pos = player:get_pos() pos.x = math.floor(pos.x) pos.y = math.floor(pos.y) pos.z = math.floor(pos.z)