mirror of
https://github.com/minetest-mods/i3.git
synced 2025-07-03 17:10:23 +02:00
Rename folder
This commit is contained in:
96
src/bags.lua
Normal file
96
src/bags.lua
Normal file
@ -0,0 +1,96 @@
|
||||
local S, fmt, msg, spawn_item = i3.get("S", "fmt", "msg", "spawn_item")
|
||||
|
||||
local function init_backpack(player)
|
||||
local name = player:get_player_name()
|
||||
local data = i3.data[name]
|
||||
local inv = player:get_inventory()
|
||||
|
||||
inv:set_size("main", data.bag_size and i3.BAG_SIZES[data.bag_size] or i3.INV_SIZE)
|
||||
|
||||
data.bag = core.create_detached_inventory(fmt("%s_backpack", name), {
|
||||
allow_put = function(_inv, listname, _, stack)
|
||||
local empty = _inv:get_stack(listname, 1):is_empty()
|
||||
local item_group = minetest.get_item_group(stack:get_name(), "bag")
|
||||
|
||||
if empty and item_group > 0 and item_group <= #i3.BAG_SIZES then
|
||||
return 1
|
||||
end
|
||||
|
||||
msg(name, S"This is not a backpack")
|
||||
|
||||
return 0
|
||||
end,
|
||||
|
||||
on_put = function(_, _, _, stack)
|
||||
local stackname = stack:get_name()
|
||||
data.bag_item = stackname
|
||||
data.bag_size = minetest.get_item_group(stackname, "bag")
|
||||
|
||||
inv:set_size("main", i3.BAG_SIZES[data.bag_size])
|
||||
i3.set_fs(player)
|
||||
end,
|
||||
|
||||
on_take = function()
|
||||
for i = i3.INV_SIZE + 1, i3.BAG_SIZES[data.bag_size] do
|
||||
local stack = inv:get_stack("main", i)
|
||||
|
||||
if not stack:is_empty() then
|
||||
spawn_item(player, stack)
|
||||
end
|
||||
end
|
||||
|
||||
data.bag_item = nil
|
||||
data.bag_size = nil
|
||||
|
||||
inv:set_size("main", i3.INV_SIZE)
|
||||
i3.set_fs(player)
|
||||
end,
|
||||
})
|
||||
|
||||
data.bag:set_size("main", 1)
|
||||
|
||||
if data.bag_item then
|
||||
data.bag:set_stack("main", 1, data.bag_item)
|
||||
end
|
||||
end
|
||||
|
||||
local bag_recipes = {
|
||||
small = {
|
||||
rcp = {
|
||||
{"", "farming:string", ""},
|
||||
{"group:wool", "group:wool", "group:wool"},
|
||||
{"group:wool", "group:wool", "group:wool"},
|
||||
},
|
||||
size = 1,
|
||||
},
|
||||
medium = {
|
||||
rcp = {
|
||||
{"farming:string", "i3:bag_small", "farming:string"},
|
||||
{"farming:string", "i3:bag_small", "farming:string"},
|
||||
},
|
||||
size = 2,
|
||||
},
|
||||
large = {
|
||||
rcp = {
|
||||
{"farming:string", "i3:bag_medium", "farming:string"},
|
||||
{"farming:string", "i3:bag_medium", "farming:string"},
|
||||
},
|
||||
size = 3,
|
||||
},
|
||||
}
|
||||
|
||||
for size, item in pairs(bag_recipes) do
|
||||
local bagname = fmt("i3:bag_%s", size)
|
||||
|
||||
core.register_craftitem(bagname, {
|
||||
description = fmt("%s Backpack", size:gsub("^%l", string.upper)),
|
||||
inventory_image = fmt("i3_bag_%s.png", size),
|
||||
stack_max = 1,
|
||||
groups = {bag = item.size}
|
||||
})
|
||||
|
||||
core.register_craft {output = bagname, recipe = item.rcp}
|
||||
core.register_craft {type = "fuel", recipe = bagname, burntime = 3}
|
||||
end
|
||||
|
||||
return init_backpack
|
Reference in New Issue
Block a user