mirror of
https://github.com/SmallJoker/upgrade_packs.git
synced 2024-12-21 21:32:23 +01:00
Add craft recipes, save inventory to player meta
This commit is contained in:
parent
d948b64af4
commit
c53d45f7fe
33
api.lua
33
api.lua
@ -1,3 +1,36 @@
|
||||
function upgrade_packs.meta_to_inv(player)
|
||||
local meta = player:get_meta()
|
||||
local inv = player:get_inventory()
|
||||
local data = meta:get("upgrade_packs:ugpacks")
|
||||
|
||||
inv:set_size("ugpacks", 4)
|
||||
if not data then
|
||||
return -- List was empty or it's a new player
|
||||
end
|
||||
|
||||
local list = minetest.deserialize(data)
|
||||
if not list then
|
||||
-- This should not happen at all
|
||||
minetest.log("warning", "[upgrade_packs] Failed to deserialize "
|
||||
.. "player meta of player " .. player:get_player_name())
|
||||
else
|
||||
inv:set_list("ugpacks", list)
|
||||
end
|
||||
meta:set_string("upgrade_packs:ugpacks", "")
|
||||
end
|
||||
|
||||
-- Metadata cannot be accessed directly
|
||||
-- If this mod is disabled, the inventory list will be unavailable
|
||||
function upgrade_packs.inv_to_meta(player)
|
||||
local meta = player:get_meta()
|
||||
local inv = player:get_inventory()
|
||||
local list = inv:get_list("ugpacks")
|
||||
if list and not inv:is_empty("ugpacks") then
|
||||
meta:set_string("upgrade_packs:ugpacks", minetest.serialize(list))
|
||||
end
|
||||
inv:set_size("ugpacks", 0)
|
||||
end
|
||||
|
||||
function upgrade_packs.add_wear(player, pack, amount)
|
||||
local lookup = upgrade_packs[pack .. "_items"]
|
||||
|
||||
|
@ -3,10 +3,10 @@ sfinv.register_page("upgrade_packs:ugpacks", {
|
||||
get = function(self, player, context)
|
||||
local name = player:get_player_name()
|
||||
return sfinv.make_formspec(player, context,
|
||||
"label[3,0;Upgrade Packs]" ..
|
||||
"list[current_player;ugpacks;3,1;2,2;]" ..
|
||||
"list[current_player;main;0,5;8,4;]" ..
|
||||
"listring[]"
|
||||
, false)
|
||||
"label[3,0.7;Upgrade Packs]" ..
|
||||
"list[current_player;ugpacks;3,1.5;2,2;]" ..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[current_player;ugpacks]"
|
||||
, true)
|
||||
end
|
||||
})
|
@ -9,11 +9,12 @@ unified_inventory.register_page("ugpacks", {
|
||||
local y = perplayer_formspec.formspec_y
|
||||
|
||||
return { formspec = (
|
||||
"listcolors[#EEE;#EEE;#111]" ..
|
||||
"label[3," .. (y + 0.2) .. ";Upgrade Packs]" ..
|
||||
"list[current_player;ugpacks;3," .. (y + 1) .. ";2,2;]" ..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[current_player;ugpacks]"
|
||||
)}
|
||||
"no_prepend[]" ..
|
||||
"listcolors[#888;#AAA;#111]" ..
|
||||
"label[3," .. (y - 0.1) .. ";Upgrade Packs]" ..
|
||||
"list[current_player;ugpacks;3," .. (y + 0.7) .. ";2,2;]" ..
|
||||
"list[current_player;main;0," .. (y + 3.5) .. ";8,4;]" ..
|
||||
"listring[]"
|
||||
), draw_inventory = false}
|
||||
end
|
||||
})
|
17
init.lua
17
init.lua
@ -5,6 +5,7 @@ upgrade_packs.breath_items = {}
|
||||
local modpath = minetest.get_modpath("upgrade_packs")
|
||||
|
||||
dofile(modpath .. "/api.lua")
|
||||
dofile(modpath .. "/packs.lua")
|
||||
if minetest.get_modpath("unified_inventory")
|
||||
and not unified_inventory.sfinv_compat_layer then
|
||||
dofile(modpath .. "/gui_unified_inventory.lua")
|
||||
@ -14,17 +15,6 @@ else
|
||||
dofile(modpath .. "/gui_plain.lua")
|
||||
end
|
||||
|
||||
upgrade_packs.register_pack("upgrade_packs:hp_10", "health", {
|
||||
description = "+10 HP",
|
||||
strength = 10,
|
||||
image = "heart.png"
|
||||
})
|
||||
|
||||
upgrade_packs.register_pack("upgrade_packs:breath_5", "breath", {
|
||||
description = "+5 Breath",
|
||||
strength = 5,
|
||||
image = "bubble.png"
|
||||
})
|
||||
|
||||
-- Cache items which are interesting for this mod
|
||||
minetest.after(0, function()
|
||||
@ -49,11 +39,12 @@ end)
|
||||
|
||||
-- Hacky: Set the hp_max and breath_max value first
|
||||
table.insert(minetest.registered_on_joinplayers, 1, function(player)
|
||||
local inv = player:get_inventory()
|
||||
inv:set_size("ugpacks", 4)
|
||||
upgrade_packs.meta_to_inv(player)
|
||||
upgrade_packs.update_player(player)
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(upgrade_packs.inv_to_meta)
|
||||
|
||||
minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user)
|
||||
if hp_change == 0 then
|
||||
return
|
||||
|
2
mod.conf
2
mod.conf
@ -1,4 +1,4 @@
|
||||
name = upgrade_packs
|
||||
description = Provides craftable packs to players to increase their health and breath
|
||||
depends = default
|
||||
optional_depends = unified_inventory, sfinv
|
||||
optional_depends = unified_inventory, sfinv, vessels
|
43
packs.lua
Normal file
43
packs.lua
Normal file
@ -0,0 +1,43 @@
|
||||
upgrade_packs.register_pack("upgrade_packs:hp_10", "health", {
|
||||
description = "+10 HP",
|
||||
strength = 10,
|
||||
image = "heart.png"
|
||||
})
|
||||
|
||||
local gb = "vessels:glass_bottle"
|
||||
local ci = "default:copper_ingot"
|
||||
minetest.register_craft({
|
||||
output = "upgrade_packs:hp_10",
|
||||
recipe = {
|
||||
{ci, gb, ci},
|
||||
{gb, "", gb},
|
||||
{ci, gb, ci}
|
||||
}
|
||||
})
|
||||
|
||||
upgrade_packs.register_pack("upgrade_packs:breath_5", "breath", {
|
||||
description = "+5 Breath",
|
||||
strength = 5,
|
||||
image = "bubble.png"
|
||||
})
|
||||
|
||||
local sb = "vessels:steel_bottle"
|
||||
local ti = "default:tin_ingot"
|
||||
minetest.register_craft({
|
||||
output = "upgrade_packs:breath_5",
|
||||
recipe = {
|
||||
{ti, sb, ti},
|
||||
{sb, "", sb},
|
||||
{ti, sb, ti}
|
||||
}
|
||||
})
|
||||
|
||||
-- Take something else from the player. BLOOD AND AIR
|
||||
minetest.register_on_craft(function(itemstack, player)
|
||||
local name = itemstack:get_name()
|
||||
if name == "upgrade_packs:hp_10" then
|
||||
player:set_hp(player:get_hp() - 5)
|
||||
elseif name == "upgrade_packs:breath_5" then
|
||||
player:set_breath(player:get_breath() - 10)
|
||||
end
|
||||
end)
|
Loading…
Reference in New Issue
Block a user