add inventory.get_uses, inventory.use, item.uses & update base:bazalt_breaker
This commit is contained in:
parent
231fc7e0d0
commit
bbfc0dbf17
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"icon-type": "sprite",
|
"icon-type": "sprite",
|
||||||
"icon": "items:bazalt_breaker"
|
"icon": "items:bazalt_breaker",
|
||||||
|
"uses": 100
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
function on_block_break_by(x, y, z, p)
|
function on_block_break_by(x, y, z, pid)
|
||||||
block.set(x, y, z, 0, 0)
|
block.set(x, y, z, 0, 0)
|
||||||
|
inventory.use(player.get_inventory(pid))
|
||||||
end
|
end
|
||||||
|
|||||||
@ -497,3 +497,28 @@ end
|
|||||||
function file.prefix(path)
|
function file.prefix(path)
|
||||||
return path:match("^([^:]+)")
|
return path:match("^([^:]+)")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function inventory.get_uses(invid, slot)
|
||||||
|
local uses = inventory.get_data(invid, slot, "uses")
|
||||||
|
if uses == nil then
|
||||||
|
return item.uses(inventory.get(invid, slot))
|
||||||
|
end
|
||||||
|
return uses
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function inventory.use(invid, slot)
|
||||||
|
local itemid, count = inventory.get(invid, slot)
|
||||||
|
if itemid == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local item_uses = inventory.get_uses(invid, slot)
|
||||||
|
if item_uses == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if item_uses == 1 then
|
||||||
|
inventory.set(invid, slot, itemid, count - 1)
|
||||||
|
elseif item_uses > 1 then
|
||||||
|
inventory.set_data(invid, slot, "uses", item_uses - 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|||||||
@ -38,7 +38,7 @@ struct ItemDef {
|
|||||||
uint8_t emission[4] {0, 0, 0, 0};
|
uint8_t emission[4] {0, 0, 0, 0};
|
||||||
|
|
||||||
/// @brief Default item uses count
|
/// @brief Default item uses count
|
||||||
int16_t uses = 100;
|
int16_t uses = -1;
|
||||||
|
|
||||||
ItemIconType iconType = ItemIconType::SPRITE;
|
ItemIconType iconType = ItemIconType::SPRITE;
|
||||||
std::string icon = "blocks:notfound";
|
std::string icon = "blocks:notfound";
|
||||||
|
|||||||
@ -80,6 +80,13 @@ static int l_emission(lua::State* L) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int l_uses(lua::State* L) {
|
||||||
|
if (auto def = get_item_def(L, 1)) {
|
||||||
|
return lua::pushinteger(L, def->uses);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const luaL_Reg itemlib[] = {
|
const luaL_Reg itemlib[] = {
|
||||||
{"index", lua::wrap<l_index>},
|
{"index", lua::wrap<l_index>},
|
||||||
{"name", lua::wrap<l_name>},
|
{"name", lua::wrap<l_name>},
|
||||||
@ -90,4 +97,6 @@ const luaL_Reg itemlib[] = {
|
|||||||
{"placing_block", lua::wrap<l_placing_block>},
|
{"placing_block", lua::wrap<l_placing_block>},
|
||||||
{"model_name", lua::wrap<l_model_name>},
|
{"model_name", lua::wrap<l_model_name>},
|
||||||
{"emission", lua::wrap<l_emission>},
|
{"emission", lua::wrap<l_emission>},
|
||||||
{NULL, NULL}};
|
{"uses", lua::wrap<l_uses>},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user