mirror of
https://github.com/luanti-org/luanti.git
synced 2025-10-25 21:55:25 +02:00
[CSM] Add callback on open inventory (#5793)
This commit is contained in:
13
src/game.cpp
13
src/game.cpp
@@ -2671,14 +2671,17 @@ void Game::openInventory()
|
||||
infostream << "the_game: " << "Launching inventory" << std::endl;
|
||||
|
||||
PlayerInventoryFormSource *fs_src = new PlayerInventoryFormSource(client);
|
||||
TextDest *txt_dst = new TextDestPlayerInventory(client);
|
||||
|
||||
create_formspec_menu(¤t_formspec, client, &input->joystick, fs_src, txt_dst);
|
||||
cur_formname = "";
|
||||
|
||||
InventoryLocation inventoryloc;
|
||||
inventoryloc.setCurrentPlayer();
|
||||
current_formspec->setFormSpec(fs_src->getForm(), inventoryloc);
|
||||
|
||||
if (!client->moddingEnabled()
|
||||
|| !client->getScript()->on_inventory_open(fs_src->m_client->getInventory(inventoryloc))) {
|
||||
TextDest *txt_dst = new TextDestPlayerInventory(client);
|
||||
create_formspec_menu(¤t_formspec, client, &input->joystick, fs_src, txt_dst);
|
||||
cur_formname = "";
|
||||
current_formspec->setFormSpec(fs_src->getForm(), inventoryloc);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -224,6 +224,27 @@ bool ScriptApiClient::on_item_use(const ItemStack &item, const PointedThing &poi
|
||||
return lua_toboolean(L, -1);
|
||||
}
|
||||
|
||||
bool ScriptApiClient::on_inventory_open(Inventory *inventory)
|
||||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
|
||||
lua_getglobal(L, "core");
|
||||
lua_getfield(L, -1, "registered_on_inventory_open");
|
||||
|
||||
std::vector<const InventoryList*> lists = inventory->getLists();
|
||||
std::vector<const InventoryList*>::iterator iter = lists.begin();
|
||||
lua_createtable(L, 0, lists.size());
|
||||
for (; iter != lists.end(); iter++) {
|
||||
const char* name = (*iter)->getName().c_str();
|
||||
lua_pushstring(L, name);
|
||||
push_inventory_list(L, inventory, name);
|
||||
lua_rawset(L, -3);
|
||||
}
|
||||
|
||||
runCallbacks(1, RUN_CALLBACKS_MODE_OR);
|
||||
return lua_toboolean(L, -1);
|
||||
}
|
||||
|
||||
void ScriptApiClient::setEnv(ClientEnvironment *env)
|
||||
{
|
||||
ScriptApiBase::setEnv(env);
|
||||
|
||||
@@ -57,5 +57,7 @@ public:
|
||||
bool on_placenode(const PointedThing &pointed, const ItemDefinition &item);
|
||||
bool on_item_use(const ItemStack &item, const PointedThing &pointed);
|
||||
|
||||
bool on_inventory_open(Inventory *inventory);
|
||||
|
||||
void setEnv(ClientEnvironment *env);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user