mods that hopefully work for a TechAge-based pack
This commit is contained in:
1 parent
4e6b08d194
commit
c27db2a537
6234 files changed
+375578
No files matched your search
@@ -0,0 +1,118 @@
|
||||
--[[
|
||||
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2020 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Configured inventory lib
|
||||
Assuming the inventory has the name "conf"
|
||||
Otherwise the name has to be provided as argument
|
||||
|
||||
]]--
|
||||
|
||||
local StackName = ... or "conf"
|
||||
|
||||
-- for lazy programmers
|
||||
local M = minetest.get_meta
|
||||
|
||||
local inv_lib = {}
|
||||
|
||||
function inv_lib.preassigned_stacks(pos, xsize, ysize)
|
||||
local inv = M(pos):get_inventory()
|
||||
local tbl = {}
|
||||
for idx = 1, xsize * ysize do
|
||||
local item_name = inv:get_stack(StackName, idx):get_name()
|
||||
if item_name ~= "" then
|
||||
local x = (idx - 1) % xsize
|
||||
local y = math.floor((idx - 1) / xsize)
|
||||
tbl[#tbl+1] = "item_image["..x..","..y..";1,1;"..item_name.."]"
|
||||
end
|
||||
end
|
||||
return table.concat(tbl, "")
|
||||
end
|
||||
|
||||
function inv_lib.item_filter(pos, size)
|
||||
local inv = M(pos):get_inventory()
|
||||
local filter = {}
|
||||
for idx = 1, size do
|
||||
local item_name = inv:get_stack(StackName, idx):get_name()
|
||||
if item_name == "" then item_name = "unconfigured" end
|
||||
if not filter[item_name] then
|
||||
filter[item_name] = {}
|
||||
end
|
||||
table.insert(filter[item_name], idx)
|
||||
end
|
||||
return filter
|
||||
end
|
||||
|
||||
function inv_lib.allow_conf_inv_put(pos, listname, index, stack, player)
|
||||
local inv = M(pos):get_inventory()
|
||||
local list = inv:get_list(listname)
|
||||
|
||||
if list[index]:get_count() == 0 then
|
||||
stack:set_count(1)
|
||||
inv:set_stack(listname, index, stack)
|
||||
return 0
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function inv_lib.allow_conf_inv_take(pos, listname, index, stack, player)
|
||||
local inv = M(pos):get_inventory()
|
||||
inv:set_stack(listname, index, nil)
|
||||
return 0
|
||||
end
|
||||
|
||||
function inv_lib.allow_conf_inv_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
local stack = inv:get_stack(to_list, to_index)
|
||||
|
||||
if stack:get_count() == 0 then
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
function inv_lib.put_items(pos, inv, listname, item, stacks, idx)
|
||||
local name = item:get_name()
|
||||
local count = item:get_count()
|
||||
for _, i in ipairs(stacks or {}) do
|
||||
if not idx or idx == i then
|
||||
local stack = inv:get_stack(listname, i)
|
||||
local leftover = stack:add_item({name = name, count = count})
|
||||
count = leftover:get_count()
|
||||
inv:set_stack(listname, i, stack)
|
||||
if count == 0 then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
if count > 0 then
|
||||
return ItemStack({name = name, count = count})
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function inv_lib.take_item(pos, inv, listname, num, stacks)
|
||||
local mem = techage.get_mem(pos)
|
||||
mem.ta_startpos = mem.ta_startpos or 1
|
||||
local size = #(stacks or {})
|
||||
for i = 1, size do
|
||||
local idx = stacks[((i + mem.ta_startpos) % size) + 1]
|
||||
local stack = inv:get_stack(listname, idx)
|
||||
local taken = stack:take_item(num)
|
||||
if taken:get_count() > 0 then
|
||||
inv:set_stack(listname, idx, stack)
|
||||
mem.ta_startpos = mem.ta_startpos + i
|
||||
return taken
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
return inv_lib
|
||||
Reference in new issue
Block a user