78 lines
2.7 KiB
Lua
78 lines
2.7 KiB
Lua
local station = stairsplus.api.station
|
|
|
|
function invsaw.initialize_inventory(player)
|
|
local meta = player:get_meta()
|
|
local inv = player:get_inventory()
|
|
|
|
station.initialize_metadata(meta, inv, { "legacy" })
|
|
station.initialize_inventory(inv, { "legacy" })
|
|
end
|
|
|
|
function invsaw.drop_inventory(player)
|
|
local pos = player:get_pos()
|
|
local inv = player:get_inventory()
|
|
for _, listname in ipairs({ "stairsplus:input", "stairsplus:micro", "stairsplus:recycle" }) do
|
|
for i = 1, inv:get_size(listname) do
|
|
local item = inv:get_stack(listname, i)
|
|
if not item:is_empty() then
|
|
minetest.add_item(pos, item)
|
|
end
|
|
end
|
|
inv:set_size(listname, 0)
|
|
end
|
|
inv:set_size("stairsplus:output", 0)
|
|
end
|
|
|
|
local function is_stairsplus_inventory(listname)
|
|
return (
|
|
listname == "stairsplus:input"
|
|
or listname == "stairsplus:micro"
|
|
or listname == "stairsplus:recycle"
|
|
or listname == "stairsplus:output"
|
|
)
|
|
end
|
|
|
|
minetest.register_allow_player_inventory_action(function(player, action, inv, info)
|
|
local meta = player:get_meta()
|
|
if action == "move" then
|
|
local from_is_stairsplus = is_stairsplus_inventory(info.from_list)
|
|
local to_is_stairsplus = is_stairsplus_inventory(info.to_list)
|
|
if from_is_stairsplus and to_is_stairsplus then
|
|
return station.allow_inventory_move(
|
|
meta,
|
|
inv,
|
|
info.from_list,
|
|
info.from_index,
|
|
info.to_list,
|
|
info.to_index,
|
|
info.count,
|
|
player
|
|
)
|
|
elseif to_is_stairsplus then
|
|
local stack = inv:get_stack(info.from_list, info.from_index)
|
|
return station.allow_inventory_put(meta, inv, info.to_list, info.to_index, stack, player)
|
|
end
|
|
elseif action == "put" and is_stairsplus_inventory(info.listname) then
|
|
return station.allow_inventory_put(meta, inv, info.listname, info.index, info.stack, player)
|
|
end
|
|
end)
|
|
|
|
minetest.register_on_player_inventory_action(function(player, action, inv, info)
|
|
local meta = player:get_meta()
|
|
if action == "move" and is_stairsplus_inventory(info.from_list) and not is_stairsplus_inventory(info.to_list) then
|
|
local stack = inv:get_stack(info.to_list, info.to_index)
|
|
stack:set_count(info.count)
|
|
station.on_inventory_take(meta, inv, info.from_list, info.from_index, stack, player)
|
|
elseif
|
|
action == "move"
|
|
and not is_stairsplus_inventory(info.from_list)
|
|
and is_stairsplus_inventory(info.to_list)
|
|
then
|
|
local stack = inv:get_stack(info.from_list, info.from_index)
|
|
station.on_inventory_put(meta, inv, info.to_list, info.to_index, stack, player)
|
|
elseif action == "put" and is_stairsplus_inventory(info.listname) then
|
|
station.on_inventory_put(meta, inv, info.listname, info.index, info.stack, player)
|
|
elseif action == "take" and is_stairsplus_inventory(info.listname) then
|
|
station.on_inventory_take(meta, inv, info.listname, info.index, info.stack, player)
|
|
end
|
|
end)
|