From 1040a3a183842b8516720f344c72facafc9b9ede Mon Sep 17 00:00:00 2001 From: neveix Date: Fri, 14 Aug 2026 19:06:21 +0500 Subject: [PATCH] fix p.6 --- res/content/base/scripts/hud.lua | 21 +++++++++++++++++++++ src/graphics/ui/elements/InventoryView.cpp | 14 ++++---------- src/logic/scripting/scripting.hpp | 2 ++ src/logic/scripting/scripting_hud.cpp | 13 +++++++++++++ 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/res/content/base/scripts/hud.lua b/res/content/base/scripts/hud.lua index d0e3d1532..65d86118f 100644 --- a/res/content/base/scripts/hud.lua +++ b/res/content/base/scripts/hud.lua @@ -5,6 +5,27 @@ function on_hud_open() local invid = hud.get_exchange_inventory() base_util.drop_from_slot(invid, 0, mode) end) + + events.on("core:slot_middle_click", function(invid, slot) + if not player.is_infinite_items(hud.get_player()) then + return + end + local itemid = inventory.get(invid, slot) + local exc_invid = hud.get_exchange_inventory() + local exc_itemid = inventory.get(exc_invid, 0) + if itemid == 0 then + if exc_itemid ~= 0 then + local stack_size = item.stack_size(exc_itemid) + inventory.set(invid, slot, exc_itemid, stack_size) + end + else + if exc_itemid == 0 then + local stack_size = item.stack_size(itemid) + inventory.set(exc_invid, 0, itemid, stack_size) + end + end + end) + input.add_callback("player.drop", function() if hud.is_paused() or hud.is_inventory_open() then return diff --git a/src/graphics/ui/elements/InventoryView.cpp b/src/graphics/ui/elements/InventoryView.cpp index 0859cebac..f93a2a614 100644 --- a/src/graphics/ui/elements/InventoryView.cpp +++ b/src/graphics/ui/elements/InventoryView.cpp @@ -501,16 +501,10 @@ void SlotView::performRightClick(ItemStack& stack, ItemStack& grabbed) { } void SlotView::performMiddleClick(ItemStack& stack, ItemStack& grabbed) { - auto indices = *content->getIndices(); - if (!grabbed.isEmpty()) { - if (stack.isEmpty()) { - stack.set(grabbed); - stack.maximizeCount(indices); - } - return; - } - grabbed.set(stack); - grabbed.maximizeCount(indices); + scripting::on_slot_middle_click( + inventoryId, + layout.index + ); } void SlotView::clicked(Mousecode button) { diff --git a/src/logic/scripting/scripting.hpp b/src/logic/scripting/scripting.hpp index 0044213cd..064417995 100644 --- a/src/logic/scripting/scripting.hpp +++ b/src/logic/scripting/scripting.hpp @@ -110,6 +110,8 @@ namespace scripting { void on_inventory_closed(const Player* player, const Inventory& inventory); void on_inventory_interact(int invid, int slot, int action, int mode); + void on_slot_middle_click(int invid, int slot); + void on_player_tick(Player* player, int tps); /// @brief Called on RMB click with the item selected diff --git a/src/logic/scripting/scripting_hud.cpp b/src/logic/scripting/scripting_hud.cpp index 59b928d21..f3499ae71 100644 --- a/src/logic/scripting/scripting_hud.cpp +++ b/src/logic/scripting/scripting_hud.cpp @@ -110,6 +110,19 @@ void scripting::on_inventory_interact(int invid, int slot, int action, int mode) } } +void scripting::on_slot_middle_click(int invid, int slot) { + auto L = lua::get_main_state(); + lua::emit_event( + L, + "core:slot_middle_click", + [&](lua::State* L) { + lua::pushinteger(L, invid); + lua::pushinteger(L, slot); + return 2; + } + ); +} + void scripting::load_hud_script( const scriptenv& senv, const std::string& packid,