diff --git a/README.txt b/README.txt old mode 100644 new mode 100755 index 76745d6..8566052 --- a/README.txt +++ b/README.txt @@ -1,6 +1,6 @@ Minetest mod "Inventory Tweaks" =============================== -version: 2.0.1 +version: 2.0 License of source code: WTFPL ----------------------------- diff --git a/depends.txt b/depends.txt old mode 100644 new mode 100755 diff --git a/init.lua b/init.lua old mode 100644 new mode 100755 index b022be1..565c01f --- a/init.lua +++ b/init.lua @@ -5,16 +5,17 @@ tweak.formspec = {} tweak.buttons = { --sort_asc -"0.55,0.6;sort_asc;^]".."tooltip[sort_asc;sort Items asc.;#30434C;#FFF]", +"0.8,0.6;sort_asc;^]".."tooltip[sort_asc;sort Items asc.;#30434C;#FFF]", --sort_desc -"0.55,0.6;sort_desc;v]".."tooltip[sort_desc;sort Items desc.;#30434C;#FFF]", +"0.8,0.6;sort_desc;v]".."tooltip[sort_desc;sort Items desc.;#30434C;#FFF]", --concatenate -"0.65,0.6;sort;›•]".."tooltip[sort;stack Items and sort asc.;#30434C;#FFF]" +"0.8,0.6;sort;·»]".."tooltip[sort;stack Items and sort asc.;#30434C;#FFF]" } local function get_formspec_size(formspec) local w = 8 local h = 7.5 + if not formspec then return end local sstring = string.find(formspec,"size[",1,true) if sstring ~= nil then sstring = string.sub(formspec, sstring+5) @@ -38,7 +39,7 @@ local function add_buttons(player, formspec) return end for i=1,#tweak.buttons do - formspec = formspec .. "button["..w-2+(i*0.5)..",-0.2;" .. tweak.buttons[i] + formspec = formspec .. "button["..w-(0.8+(i*0.8))..",0.2;" .. tweak.buttons[i] end player:set_inventory_formspec(formspec) return formspec @@ -158,7 +159,7 @@ tweak.sort = function(player, mode, con) if inv then local list = inv:get_list("main") local tmp_list = {} - + --write whole list as table for _,stack in ipairs(list) do local tbl_stack = stack:to_table() @@ -191,13 +192,17 @@ end -- tool break sound + autorefill function refill(player, stck_name, index) local inv = player:get_inventory() - for i,stack in ipairs(inv:get_list("main")) do - if stack:get_name() == stck_name then - inv:set_stack("main", index, stack) - stack:clear() - inv:set_stack("main", i, stack) - minetest.log("action", "Inventory Tweaks: refilled stack("..stck_name..") of " .. player:get_player_name() ) - return + local old_stack = inv:get_stack("main", index) + if old_stack:get_name() == stck_name then return end + if inv:get_list("main") then + for i,stack in ipairs(inv:get_list("main")) do + if i ~= index and stack:get_name() == stck_name then + inv:set_stack("main", index, stack) + stack:clear() + inv:set_stack("main", i, stack) + minetest.log("action", "Inventory Tweaks: refilled stack("..stck_name..") of " .. player:get_player_name() ) + return + end end end end @@ -208,7 +213,7 @@ if auto_refill == true then local index = placer:get_wield_index() local cnt = placer:get_wielded_item():get_count()-1 if minetest.setting_getbool("creative_mode") then - return true + return else if cnt == 0 then minetest.after(0.01, refill, placer, newnode.name, index) @@ -218,73 +223,55 @@ if auto_refill == true then end local wielded = {} -wielded.name = {} -wielded.wear = {} +wielded["name"] = {} +wielded["wear"] = {} +wielded["index"] = {} minetest.register_on_punchnode(function(pos, node, puncher) if not puncher or minetest.setting_getbool("creative_mode") then return end local name = puncher:get_player_name() - + if not name then return end local item = puncher:get_wielded_item() + if not item then return end + local index = puncher:get_wield_index() local tname = item:get_name() local def = minetest.registered_tools[tname] - wielded.name[name] = tname - - if not item or not tname or tname == "" or not def then + if not tname or tname == "" or not def then -- if empty or not tools + wielded["name"][name] = "" return end + wielded["name"][name] = tname + wielded["index"][name] = index local typ = def.type - if not typ or typ ~= "tool" then - return + if not typ or typ ~= "tool" then --if tools, true + wielded["wear"][name] = false + else + wielded["wear"][name] = true end - wielded.wear[name] = item:get_wear() - -- TODO: re-add for custom tools like lighter end) minetest.register_on_dignode(function(pos, oldnode, digger) if not digger then return end - local name = digger:get_player_name() + if not name then return end local item = digger:get_wielded_item() + if not item then return end local index = digger:get_wield_index() local tname = item:get_name() - local def = minetest.registered_tools[tname] + if tname ~= "" then return end --new not empty, return + local old_name = wielded["name"][name] + if old_name == nil or old_name == "" then return end -- old empty, not replace - if not item then - return - end - if tname ~= "" then - if not def then - return - end - end - - local old_name = wielded.name[name] - if tname == old_name and tname == "" then - return - end - - local old = wielded.wear[name] - if not old and tname == "" then - old = 0 - end - local new = item:get_wear() - - if old ~= new then - if old > 0 and new == 0 then - wielded.wear[name] = new - minetest.sound_play("invtweak_tool_break", { - pos = digger:getpos(), - gain = 0.9, - max_hear_distance = 5 - }) - if auto_refill == true then - minetest.after(0.01, refill, digger, old_name, index) - end + local old_wear = wielded["wear"][name] + local old_index = wielded["index"][name] + if index == old_index and old_wear == true then -- if identical index and old is tools, replace + minetest.sound_play("invtweak_tool_break", {pos = digger:getpos(), gain = 0.9, max_hear_distance = 5}) + if auto_refill == true then + minetest.after(0.01, refill, digger, old_name, index) end end end) diff --git a/sounds/invtweak_tool_break.ogg b/sounds/invtweak_tool_break.ogg old mode 100644 new mode 100755 index c68522c..ea6a07d Binary files a/sounds/invtweak_tool_break.ogg and b/sounds/invtweak_tool_break.ogg differ