add on_inventory_open and on_inventory_closed events
This commit is contained in:
parent
e1150f9e05
commit
80128a4190
@ -111,6 +111,8 @@ struct WorldFuncsSet {
|
||||
bool onplayertick;
|
||||
bool onchunkpresent;
|
||||
bool onchunkremove;
|
||||
bool oninventoryopen;
|
||||
bool oninventoryclosed;
|
||||
};
|
||||
|
||||
class ContentPackRuntime {
|
||||
|
||||
@ -447,6 +447,8 @@ void Hud::openInventory(
|
||||
blockPos = block;
|
||||
currentblockid = chunks.require(block.x, block.y, block.z).id;
|
||||
add(HudElement(hud_element_mode::inventory_bound, doc, blockUI, false));
|
||||
|
||||
scripting::on_inventory_open(&player, *blockinv);
|
||||
}
|
||||
|
||||
void Hud::showExchangeSlot() {
|
||||
@ -461,7 +463,6 @@ void Hud::showExchangeSlot() {
|
||||
exchangeSlot->setInteractive(false);
|
||||
exchangeSlot->setZIndex(1);
|
||||
gui.store(SlotView::EXCHANGE_SLOT_NAME, exchangeSlot);
|
||||
|
||||
}
|
||||
|
||||
void Hud::showOverlay(
|
||||
@ -517,13 +518,15 @@ void Hud::dropExchangeSlot() {
|
||||
}
|
||||
|
||||
void Hud::closeInventory() {
|
||||
if (blockUI) {
|
||||
scripting::on_inventory_closed(&player, *blockUI->getInventory());
|
||||
blockUI = nullptr;
|
||||
}
|
||||
dropExchangeSlot();
|
||||
gui.remove(SlotView::EXCHANGE_SLOT_NAME);
|
||||
exchangeSlot = nullptr;
|
||||
exchangeSlotInv = nullptr;
|
||||
inventoryOpen = false;
|
||||
inventoryView = nullptr;
|
||||
blockUI = nullptr;
|
||||
secondUI = nullptr;
|
||||
|
||||
for (auto& element : elements) {
|
||||
|
||||
@ -441,6 +441,36 @@ void scripting::on_chunk_remove(const Chunk& chunk) {
|
||||
}
|
||||
}
|
||||
|
||||
void scripting::on_inventory_open(const Player* player, const Inventory& inventory) {
|
||||
auto args = [player, &inventory](lua::State* L) {
|
||||
lua::pushinteger(L, inventory.getId());
|
||||
lua::pushinteger(L, player ? player->getId() : -1);
|
||||
return 2;
|
||||
};
|
||||
for (auto& [packid, pack] : content->getPacks()) {
|
||||
if (pack->worldfuncsset.oninventoryopen) {
|
||||
lua::emit_event(
|
||||
lua::get_main_state(), packid + ":.inventoryopen", args
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void scripting::on_inventory_closed(const Player* player, const Inventory& inventory) {
|
||||
auto args = [player, &inventory](lua::State* L) {
|
||||
lua::pushinteger(L, inventory.getId());
|
||||
lua::pushinteger(L, player ? player->getId() : -1);
|
||||
return 2;
|
||||
};
|
||||
for (auto& [packid, pack] : content->getPacks()) {
|
||||
if (pack->worldfuncsset.oninventoryclosed) {
|
||||
lua::emit_event(
|
||||
lua::get_main_state(), packid + ":.inventoryclosed", args
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void scripting::on_player_tick(Player* player, int tps) {
|
||||
auto args = [=](lua::State* L) {
|
||||
lua::pushinteger(L, player ? player->getId() : -1);
|
||||
@ -871,6 +901,10 @@ void scripting::load_world_script(
|
||||
register_event(env, "on_chunk_present", prefix + ":.chunkpresent");
|
||||
funcsset.onchunkremove =
|
||||
register_event(env, "on_chunk_remove", prefix + ":.chunkremove");
|
||||
funcsset.oninventoryopen =
|
||||
register_event(env, "on_inventory_open", prefix + ":.inventoryopen");
|
||||
funcsset.oninventoryclosed =
|
||||
register_event(env, "on_inventory_closed", prefix + ":.inventoryclosed");
|
||||
}
|
||||
|
||||
void scripting::load_layout_script(
|
||||
|
||||
@ -89,6 +89,9 @@ namespace scripting {
|
||||
void on_chunk_present(const Chunk& chunk, bool loaded);
|
||||
void on_chunk_remove(const Chunk& chunk);
|
||||
|
||||
void on_inventory_open(const Player* player, const Inventory& inventory);
|
||||
void on_inventory_closed(const Player* player, const Inventory& inventory);
|
||||
|
||||
void on_player_tick(Player* player, int tps);
|
||||
|
||||
/// @brief Called on RMB click with the item selected
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user