mirror of
https://github.com/SmallJoker/upgrade_packs.git
synced 2025-01-03 03:27:37 +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)
|
function upgrade_packs.add_wear(player, pack, amount)
|
||||||
local lookup = upgrade_packs[pack .. "_items"]
|
local lookup = upgrade_packs[pack .. "_items"]
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@ sfinv.register_page("upgrade_packs:ugpacks", {
|
|||||||
get = function(self, player, context)
|
get = function(self, player, context)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
return sfinv.make_formspec(player, context,
|
return sfinv.make_formspec(player, context,
|
||||||
"label[3,0;Upgrade Packs]" ..
|
"label[3,0.7;Upgrade Packs]" ..
|
||||||
"list[current_player;ugpacks;3,1;2,2;]" ..
|
"list[current_player;ugpacks;3,1.5;2,2;]" ..
|
||||||
"list[current_player;main;0,5;8,4;]" ..
|
"listring[current_player;main]" ..
|
||||||
"listring[]"
|
"listring[current_player;ugpacks]"
|
||||||
, false)
|
, true)
|
||||||
end
|
end
|
||||||
})
|
})
|
@ -9,11 +9,12 @@ unified_inventory.register_page("ugpacks", {
|
|||||||
local y = perplayer_formspec.formspec_y
|
local y = perplayer_formspec.formspec_y
|
||||||
|
|
||||||
return { formspec = (
|
return { formspec = (
|
||||||
"listcolors[#EEE;#EEE;#111]" ..
|
"no_prepend[]" ..
|
||||||
"label[3," .. (y + 0.2) .. ";Upgrade Packs]" ..
|
"listcolors[#888;#AAA;#111]" ..
|
||||||
"list[current_player;ugpacks;3," .. (y + 1) .. ";2,2;]" ..
|
"label[3," .. (y - 0.1) .. ";Upgrade Packs]" ..
|
||||||
"listring[current_player;main]" ..
|
"list[current_player;ugpacks;3," .. (y + 0.7) .. ";2,2;]" ..
|
||||||
"listring[current_player;ugpacks]"
|
"list[current_player;main;0," .. (y + 3.5) .. ";8,4;]" ..
|
||||||
)}
|
"listring[]"
|
||||||
|
), draw_inventory = false}
|
||||||
end
|
end
|
||||||
})
|
})
|
17
init.lua
17
init.lua
@ -5,6 +5,7 @@ upgrade_packs.breath_items = {}
|
|||||||
local modpath = minetest.get_modpath("upgrade_packs")
|
local modpath = minetest.get_modpath("upgrade_packs")
|
||||||
|
|
||||||
dofile(modpath .. "/api.lua")
|
dofile(modpath .. "/api.lua")
|
||||||
|
dofile(modpath .. "/packs.lua")
|
||||||
if minetest.get_modpath("unified_inventory")
|
if minetest.get_modpath("unified_inventory")
|
||||||
and not unified_inventory.sfinv_compat_layer then
|
and not unified_inventory.sfinv_compat_layer then
|
||||||
dofile(modpath .. "/gui_unified_inventory.lua")
|
dofile(modpath .. "/gui_unified_inventory.lua")
|
||||||
@ -14,17 +15,6 @@ else
|
|||||||
dofile(modpath .. "/gui_plain.lua")
|
dofile(modpath .. "/gui_plain.lua")
|
||||||
end
|
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
|
-- Cache items which are interesting for this mod
|
||||||
minetest.after(0, function()
|
minetest.after(0, function()
|
||||||
@ -49,11 +39,12 @@ end)
|
|||||||
|
|
||||||
-- Hacky: Set the hp_max and breath_max value first
|
-- Hacky: Set the hp_max and breath_max value first
|
||||||
table.insert(minetest.registered_on_joinplayers, 1, function(player)
|
table.insert(minetest.registered_on_joinplayers, 1, function(player)
|
||||||
local inv = player:get_inventory()
|
upgrade_packs.meta_to_inv(player)
|
||||||
inv:set_size("ugpacks", 4)
|
|
||||||
upgrade_packs.update_player(player)
|
upgrade_packs.update_player(player)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
minetest.register_on_leaveplayer(upgrade_packs.inv_to_meta)
|
||||||
|
|
||||||
minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user)
|
minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user)
|
||||||
if hp_change == 0 then
|
if hp_change == 0 then
|
||||||
return
|
return
|
||||||
|
2
mod.conf
2
mod.conf
@ -1,4 +1,4 @@
|
|||||||
name = upgrade_packs
|
name = upgrade_packs
|
||||||
description = Provides craftable packs to players to increase their health and breath
|
description = Provides craftable packs to players to increase their health and breath
|
||||||
depends = default
|
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