forked from VoxeLibre/VoxeLibre
Items dropped from nodes have no collection delay
This commit is contained in:
parent
7d6bfceeba
commit
9d5497b347
|
@ -5,9 +5,6 @@ item_drop_settings.radius_magnet = 2 --radius of item magnet
|
||||||
item_drop_settings.radius_collect = 0.2 --radius of collection
|
item_drop_settings.radius_collect = 0.2 --radius of collection
|
||||||
item_drop_settings.player_collect_height = 0.5 --added to their pos y value
|
item_drop_settings.player_collect_height = 0.5 --added to their pos y value
|
||||||
item_drop_settings.collection_safety = false --do this to prevent items from flying away on laggy servers
|
item_drop_settings.collection_safety = false --do this to prevent items from flying away on laggy servers
|
||||||
item_drop_settings.collect_by_default = true --make item entities automatically collect in the item entity code
|
|
||||||
--versus setting it in the item drop code, setting true might interfere with
|
|
||||||
--mods that use item entities (like pipeworks)
|
|
||||||
item_drop_settings.random_item_velocity = true --this sets random item velocity if velocity is 0
|
item_drop_settings.random_item_velocity = true --this sets random item velocity if velocity is 0
|
||||||
item_drop_settings.drop_single_item = false --if true, the drop control drops 1 item instead of the entire stack, and sneak+drop drops the stack
|
item_drop_settings.drop_single_item = false --if true, the drop control drops 1 item instead of the entire stack, and sneak+drop drops the stack
|
||||||
-- drop_single_item is disabled by default because it is annoying to throw away items from the intentory screen
|
-- drop_single_item is disabled by default because it is annoying to throw away items from the intentory screen
|
||||||
|
@ -41,7 +38,7 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
for _,object in ipairs(minetest.get_objects_inside_radius({x=pos.x,y=pos.y + item_drop_settings.player_collect_height,z=pos.z}, item_drop_settings.radius_collect)) do
|
for _,object in ipairs(minetest.get_objects_inside_radius({x=pos.x,y=pos.y + item_drop_settings.player_collect_height,z=pos.z}, item_drop_settings.radius_collect)) do
|
||||||
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
|
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
|
||||||
if object:get_luaentity().collect and object:get_luaentity().age > item_drop_settings.age then
|
if object:get_luaentity()._insta_collect or (object:get_luaentity().age > item_drop_settings.age) then
|
||||||
if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
|
if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
|
||||||
|
|
||||||
if object:get_luaentity().itemstring ~= "" then
|
if object:get_luaentity().itemstring ~= "" then
|
||||||
|
@ -65,7 +62,7 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
--magnet
|
--magnet
|
||||||
for _,object in ipairs(minetest.get_objects_inside_radius({x=pos.x,y=pos.y + item_drop_settings.player_collect_height,z=pos.z}, item_drop_settings.radius_magnet)) do
|
for _,object in ipairs(minetest.get_objects_inside_radius({x=pos.x,y=pos.y + item_drop_settings.player_collect_height,z=pos.z}, item_drop_settings.radius_magnet)) do
|
||||||
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" and object:get_luaentity().collect and object:get_luaentity().age > item_drop_settings.age then
|
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" and (object:get_luaentity()._insta_collect or (object:get_luaentity().age > item_drop_settings.age)) then
|
||||||
object:get_luaentity()._magnet_timer = object:get_luaentity()._magnet_timer + dtime
|
object:get_luaentity()._magnet_timer = object:get_luaentity()._magnet_timer + dtime
|
||||||
if object:get_luaentity()._magnet_timer > 0 and object:get_luaentity()._magnet_timer < item_drop_settings.magnet_time then
|
if object:get_luaentity()._magnet_timer > 0 and object:get_luaentity()._magnet_timer < item_drop_settings.magnet_time then
|
||||||
if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
|
if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
|
||||||
|
@ -166,7 +163,6 @@ function minetest.handle_node_drops(pos, drops, digger)
|
||||||
for i=1,count do
|
for i=1,count do
|
||||||
local obj = minetest.add_item(pos, name)
|
local obj = minetest.add_item(pos, name)
|
||||||
if obj ~= nil then
|
if obj ~= nil then
|
||||||
obj:get_luaentity().collect = true
|
|
||||||
local x = math.random(1, 5)
|
local x = math.random(1, 5)
|
||||||
if math.random(1,2) == 1 then
|
if math.random(1,2) == 1 then
|
||||||
x = -x
|
x = -x
|
||||||
|
@ -177,20 +173,20 @@ function minetest.handle_node_drops(pos, drops, digger)
|
||||||
end
|
end
|
||||||
obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z})
|
obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z})
|
||||||
obj:get_luaentity().age = 0.6
|
obj:get_luaentity().age = 0.6
|
||||||
|
obj:get_luaentity()._insta_collect = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if item_drop_settings.drop_single_item then
|
-- Drop single items by default
|
||||||
-- Drop single items by default
|
function minetest.item_drop(itemstack, dropper, pos)
|
||||||
function minetest.item_drop(itemstack, dropper, pos)
|
|
||||||
if dropper and dropper:is_player() then
|
if dropper and dropper:is_player() then
|
||||||
local v = dropper:get_look_dir()
|
local v = dropper:get_look_dir()
|
||||||
local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
|
local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
|
||||||
local cs = 1
|
local cs = itemstack:get_count()
|
||||||
if dropper:get_player_control().sneak then
|
if dropper:get_player_control().sneak then
|
||||||
cs = itemstack:get_count()
|
cs = 1
|
||||||
end
|
end
|
||||||
local item = itemstack:take_item(cs)
|
local item = itemstack:take_item(cs)
|
||||||
local obj = core.add_item(p, item)
|
local obj = core.add_item(p, item)
|
||||||
|
@ -199,11 +195,9 @@ if item_drop_settings.drop_single_item then
|
||||||
v.y = v.y*4 + 2
|
v.y = v.y*4 + 2
|
||||||
v.z = v.z*4
|
v.z = v.z*4
|
||||||
obj:setvelocity(v)
|
obj:setvelocity(v)
|
||||||
obj:get_luaentity().collect = true
|
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--modify builtin:item
|
--modify builtin:item
|
||||||
|
@ -266,9 +260,6 @@ core.register_entity(":__builtin:item", {
|
||||||
infotext = description,
|
infotext = description,
|
||||||
}
|
}
|
||||||
self.object:set_properties(prop)
|
self.object:set_properties(prop)
|
||||||
if item_drop_settings.collect_by_default then
|
|
||||||
self.collect = true
|
|
||||||
end
|
|
||||||
if item_drop_settings.random_item_velocity == true then
|
if item_drop_settings.random_item_velocity == true then
|
||||||
minetest.after(0, function(self)
|
minetest.after(0, function(self)
|
||||||
if not self or not self.object or not self.object:get_luaentity() then
|
if not self or not self.object or not self.object:get_luaentity() then
|
||||||
|
@ -298,7 +289,7 @@ core.register_entity(":__builtin:item", {
|
||||||
always_collect = self.always_collect,
|
always_collect = self.always_collect,
|
||||||
age = self.age,
|
age = self.age,
|
||||||
dropped_by = self.dropped_by,
|
dropped_by = self.dropped_by,
|
||||||
collect = self.collect
|
collect = self._collect
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
@ -314,8 +305,9 @@ core.register_entity(":__builtin:item", {
|
||||||
self.age = dtime_s
|
self.age = dtime_s
|
||||||
end
|
end
|
||||||
--remember collection data
|
--remember collection data
|
||||||
if data.collect then
|
if data._insta_collect then
|
||||||
self.collect = data.collect
|
-- If true, can collect item without delay
|
||||||
|
self._insta_collect = data._insta_collect
|
||||||
end
|
end
|
||||||
self.dropped_by = data.dropped_by
|
self.dropped_by = data.dropped_by
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue