Skip to content

Commit e36c872

Browse files
committed
Insert all from inv on rightclick with bare hand
1 parent 14f21a4 commit e36c872

File tree

1 file changed

+49
-9
lines changed

1 file changed

+49
-9
lines changed

lua/visual.lua

+49-9
Original file line numberDiff line numberDiff line change
@@ -153,19 +153,59 @@ core.register_entity("drawers:visual", {
153153
end,
154154

155155
on_rightclick = function(self, clicker)
156-
if core.is_protected(self.drawer_pos, clicker:get_player_name()) then
157-
core.record_protection_violation(self.drawer_pos, clicker:get_player_name())
158-
return
156+
if core.is_protected(self.drawer_pos, clicker:get_player_name()) then
157+
core.record_protection_violation(self.drawer_pos, clicker:get_player_name())
158+
return
159+
end
160+
161+
-- used to check if we need to play a sound in the end
162+
local inventoryChanged = false
163+
164+
-- When the player uses the drawer with their bare hand all
165+
-- stacks from the inventory will be added to the drawer.
166+
if self.itemName ~= "" and
167+
clicker:get_wielded_item():get_name() == "" and
168+
not clicker:get_player_control().sneak then
169+
-- try to insert all items from inventory
170+
local i = 0
171+
local inv = clicker:get_inventory()
172+
173+
while i < inv:get_size("main") do
174+
-- set current stack to leftover of insertion
175+
local leftover = self.try_insert_stack(
176+
self,
177+
inv:get_stack("main", i),
178+
true
179+
)
180+
181+
-- check if something was added
182+
if leftover:get_count() < inv:get_stack("main", i):get_count() then
183+
inventoryChanged = true
184+
end
185+
186+
-- set new stack
187+
inv:set_stack("main", i, leftover)
188+
i = i + 1
189+
end
190+
else
191+
-- try to insert wielded item only
192+
local leftover = self.try_insert_stack(
193+
self,
194+
clicker:get_wielded_item(),
195+
not clicker:get_player_control().sneak
196+
)
197+
198+
-- check if something was added
199+
if clicker:get_wielded_item():get_count() > leftover:get_count() then
200+
inventoryChanged = true
201+
end
202+
-- set the leftover as new wielded item for the player
203+
clicker:set_wielded_item(leftover)
159204
end
160-
local leftover = self.try_insert_stack(self, clicker:get_wielded_item(),
161-
not clicker:get_player_control().sneak)
162205

163-
-- if smth. was added play the interact sound
164-
if clicker:get_wielded_item():get_count() > leftover:get_count() then
206+
if inventoryChanged then
165207
self:play_interact_sound()
166208
end
167-
-- set the leftover as new wielded item for the player
168-
clicker:set_wielded_item(leftover)
169209
end,
170210

171211
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir)

0 commit comments

Comments
 (0)