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