mirror of
https://github.com/Sokomine/replacer.git
synced 2025-07-04 17:10:44 +02:00
add support for taking from inventory in unified inventory bags
This commit is contained in:
@ -1,2 +1,3 @@
|
|||||||
default?
|
default?
|
||||||
dye?
|
dye?
|
||||||
|
unified_inventory?
|
||||||
|
65
init.lua
65
init.lua
@ -219,8 +219,13 @@ replacer.replace = function(itemstack, user, pointed_thing, mode)
|
|||||||
}))) then
|
}))) then
|
||||||
-- does the player carry at least one of the desired nodes with him?
|
-- does the player carry at least one of the desired nodes with him?
|
||||||
if (not (user:get_inventory():contains_item("main", daten[1]))) then
|
if (not (user:get_inventory():contains_item("main", daten[1]))) then
|
||||||
replacer.set_hud(name, "You have no further '" .. (daten[1] or "?") .. "'. Replacement failed.")
|
if not (replacer.remove_from_bags(user, daten[1])) then
|
||||||
return nil
|
replacer.set_hud(name, "You have no further '" .. (daten[1] or "?") .. "'. Replacement failed.")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- consume the item
|
||||||
|
user:get_inventory():remove_item("main", daten[1] .. " 1")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- give the player the item by simulating digging if possible
|
-- give the player the item by simulating digging if possible
|
||||||
@ -239,12 +244,7 @@ replacer.replace = function(itemstack, user, pointed_thing, mode)
|
|||||||
"' failed.\nUnable to remove old node.")
|
"' failed.\nUnable to remove old node.")
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- consume the item
|
|
||||||
user:get_inventory():remove_item("main", daten[1] .. " 1")
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.add_node(pos, {
|
minetest.add_node(pos, {
|
||||||
@ -300,6 +300,57 @@ replacer.node_is_owned = function(pos, placer)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Handle taking item from inventory or unified inventory bags
|
||||||
|
|
||||||
|
local save_bags_metadata = function(player, bags_inv)
|
||||||
|
local is_empty = true
|
||||||
|
local bags = {}
|
||||||
|
for i = 1, 4 do
|
||||||
|
local bag = "bag" .. i
|
||||||
|
if not bags_inv:is_empty(bag) then
|
||||||
|
-- Stack limit is 1, otherwise use stack:to_string()
|
||||||
|
bags[i] = bags_inv:get_stack(bag, 1):get_name()
|
||||||
|
is_empty = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local meta = player:get_meta()
|
||||||
|
if is_empty then
|
||||||
|
meta:set_string("unified_inventory:bags", nil)
|
||||||
|
else
|
||||||
|
meta:set_string("unified_inventory:bags",
|
||||||
|
minetest.serialize(bags))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function get_player_bag_stack(player, i)
|
||||||
|
return minetest.get_inventory({
|
||||||
|
type = "detached",
|
||||||
|
name = player:get_player_name() .. "_bags"
|
||||||
|
}):get_stack("bag" .. i, 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
replacer.remove_from_bags = function(user, item_name)
|
||||||
|
if not minetest.get_modpath("unified_inventory") then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
local inv = user:get_inventory()
|
||||||
|
for i = 1, 4 do
|
||||||
|
local def = get_player_bag_stack(user, i):get_definition()
|
||||||
|
if def.groups.bagslots then
|
||||||
|
local list_name = "bag" .. i .. "contents"
|
||||||
|
local size = inv:get_size(list_name)
|
||||||
|
for si = 1, size do
|
||||||
|
local stk = inv:get_stack(list_name, si)
|
||||||
|
if stk:get_name() == item_name then
|
||||||
|
inv:remove_item(list_name, item_name .. " 1")
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
-- Handle mode setting/getting
|
-- Handle mode setting/getting
|
||||||
replacer.set_mode = function(player, mode_name)
|
replacer.set_mode = function(player, mode_name)
|
||||||
if mode_name ~= "legacy" and mode_name ~= "paint" then
|
if mode_name ~= "legacy" and mode_name ~= "paint" then
|
||||||
|
Reference in New Issue
Block a user