mirror of
https://github.com/minetest/minetest.git
synced 2024-08-19 04:54:18 +02:00
[CSM] Add callback on open inventory (#5793)
This commit is contained in:
parent
b9fb3cea33
commit
4e19791cde
@ -73,3 +73,4 @@ core.registered_on_placenode, core.register_on_placenode = make_registration()
|
|||||||
core.registered_on_item_use, core.register_on_item_use = make_registration()
|
core.registered_on_item_use, core.register_on_item_use = make_registration()
|
||||||
core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration()
|
core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration()
|
||||||
core.registered_on_modchannel_signal, core.register_on_modchannel_signal = make_registration()
|
core.registered_on_modchannel_signal, core.register_on_modchannel_signal = make_registration()
|
||||||
|
core.registered_on_inventory_open, core.register_on_inventory_open = make_registration()
|
||||||
|
@ -38,6 +38,12 @@ core.register_on_modchannel_signal(function(channel, signal)
|
|||||||
.. channel)
|
.. channel)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
core.register_on_inventory_open(function(inventory)
|
||||||
|
print("INVENTORY OPEN")
|
||||||
|
print(dump(inventory))
|
||||||
|
return false
|
||||||
|
end)
|
||||||
|
|
||||||
core.register_on_placenode(function(pointed_thing, node)
|
core.register_on_placenode(function(pointed_thing, node)
|
||||||
print("The local player place a node!")
|
print("The local player place a node!")
|
||||||
print("pointed_thing :" .. dump(pointed_thing))
|
print("pointed_thing :" .. dump(pointed_thing))
|
||||||
|
@ -689,6 +689,10 @@ Call these functions only at load time!
|
|||||||
join request.
|
join request.
|
||||||
* If message comes from a server mod, `sender` field is an empty string.
|
* If message comes from a server mod, `sender` field is an empty string.
|
||||||
|
|
||||||
|
* `minetest.register_on_inventory_open(func(inventory))`
|
||||||
|
* Called when the local player open inventory
|
||||||
|
* Newest functions are called first
|
||||||
|
* If any function returns true, inventory doesn't open
|
||||||
### Sounds
|
### Sounds
|
||||||
* `minetest.sound_play(spec, parameters)`: returns a handle
|
* `minetest.sound_play(spec, parameters)`: returns a handle
|
||||||
* `spec` is a `SimpleSoundSpec`
|
* `spec` is a `SimpleSoundSpec`
|
||||||
|
13
src/game.cpp
13
src/game.cpp
@ -2671,14 +2671,17 @@ void Game::openInventory()
|
|||||||
infostream << "the_game: " << "Launching inventory" << std::endl;
|
infostream << "the_game: " << "Launching inventory" << std::endl;
|
||||||
|
|
||||||
PlayerInventoryFormSource *fs_src = new PlayerInventoryFormSource(client);
|
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;
|
InventoryLocation inventoryloc;
|
||||||
inventoryloc.setCurrentPlayer();
|
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);
|
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)
|
void ScriptApiClient::setEnv(ClientEnvironment *env)
|
||||||
{
|
{
|
||||||
ScriptApiBase::setEnv(env);
|
ScriptApiBase::setEnv(env);
|
||||||
|
@ -57,5 +57,7 @@ public:
|
|||||||
bool on_placenode(const PointedThing &pointed, const ItemDefinition &item);
|
bool on_placenode(const PointedThing &pointed, const ItemDefinition &item);
|
||||||
bool on_item_use(const ItemStack &item, const PointedThing &pointed);
|
bool on_item_use(const ItemStack &item, const PointedThing &pointed);
|
||||||
|
|
||||||
|
bool on_inventory_open(Inventory *inventory);
|
||||||
|
|
||||||
void setEnv(ClientEnvironment *env);
|
void setEnv(ClientEnvironment *env);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user