mirror of
https://git.minetest.land/MineClone2/MineClone2.git
synced 2024-08-18 21:14:11 +02:00
Additional cleanup, impelemnt partial item stack pickup
This commit is contained in:
parent
0a294c55a1
commit
13ce4f9092
@ -116,47 +116,50 @@ end
|
|||||||
local function try_object_pickup(player, inv, object, checkpos)
|
local function try_object_pickup(player, inv, object, checkpos)
|
||||||
if not inv then return end
|
if not inv then return end
|
||||||
|
|
||||||
|
local le = object:get_luaentity()
|
||||||
|
|
||||||
-- Check magnet timer
|
-- Check magnet timer
|
||||||
if not (object:get_luaentity()._magnet_timer >= 0) then return end
|
if not (le._magnet_timer >= 0) then return end
|
||||||
if not (object:get_luaentity()._magnet_timer < item_drop_settings.magnet_time) then return end
|
if not (le._magnet_timer < item_drop_settings.magnet_time) then return end
|
||||||
|
|
||||||
-- Make sure we have room for the item
|
-- Don't try to collect again
|
||||||
local itemstack = ItemStack(object:get_luaentity().itemstring)
|
if le._removed then return end
|
||||||
if not inv:room_for_item("main", itemstack ) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Collection
|
|
||||||
if object:get_luaentity()._removed then return end
|
|
||||||
|
|
||||||
-- Ignore if itemstring is not set yet
|
-- Ignore if itemstring is not set yet
|
||||||
if object:get_luaentity().itemstring == "" then return end
|
if le.itemstring == "" then return end
|
||||||
|
|
||||||
inv:add_item("main", itemstack )
|
-- Add what we can to the inventory
|
||||||
|
local itemstack = ItemStack(le.itemstring)
|
||||||
|
local leftovers = inv:add_item("main", itemstack )
|
||||||
|
|
||||||
check_pickup_achievements(object, player)
|
check_pickup_achievements(object, player)
|
||||||
|
|
||||||
-- Destroy entity
|
if leftovers:is_empty() then
|
||||||
-- This just prevents this section to be run again because object:remove() doesn't remove the item immediately.
|
-- Destroy entity
|
||||||
object:get_luaentity().target = checkpos
|
-- This just prevents this section to be run again because object:remove() doesn't remove the item immediately.
|
||||||
object:get_luaentity()._removed = true
|
le.target = checkpos
|
||||||
|
le._removed = true
|
||||||
|
|
||||||
-- Stop the object
|
-- Stop the object
|
||||||
object:set_velocity(vector.zero())
|
object:set_velocity(vector.zero())
|
||||||
object:set_acceleration(vector.zero())
|
object:set_acceleration(vector.zero())
|
||||||
object:move_to(checkpos)
|
object:move_to(checkpos)
|
||||||
|
|
||||||
-- Update sound pool
|
-- Update sound pool
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
pool[name] = ( pool[name] or 0 ) + 1
|
pool[name] = ( pool[name] or 0 ) + 1
|
||||||
|
|
||||||
-- Make sure the object gets removed
|
-- Make sure the object gets removed
|
||||||
minetest.after(0.25, function()
|
minetest.after(0.25, function()
|
||||||
--safety check
|
--safety check
|
||||||
if object and object:get_luaentity() then
|
if object and object:get_luaentity() then
|
||||||
object:remove()
|
object:remove()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
else
|
||||||
|
-- Update entity itemstring
|
||||||
|
le.itemstring = leftovers:to_string()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_globalstep(function(_)
|
minetest.register_globalstep(function(_)
|
||||||
|
Loading…
Reference in New Issue
Block a user