summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorheav-4 <heavpoot@gmail.com>2022-03-11 23:00:45 +0000
committerheav-4 <heavpoot@gmail.com>2022-03-11 23:00:45 +0000
commit6e3a2b8da715d0d15c165e6df8791a55e0a961c8 (patch)
tree0c43769566968e7264e4a4243b8b80a98cb4abfe
parent6621b33493466b2ff96e4f531a98d32e1e716fbe (diff)
improve vzxv.drop()
-rw-r--r--mods/vzxv_itemstacks/init.lua27
-rw-r--r--mods/vzxv_itemstacks/loose.lua6
2 files changed, 21 insertions, 12 deletions
diff --git a/mods/vzxv_itemstacks/init.lua b/mods/vzxv_itemstacks/init.lua
index ee6c4dc..74d8e26 100644
--- a/mods/vzxv_itemstacks/init.lua
+++ b/mods/vzxv_itemstacks/init.lua
@@ -29,14 +29,25 @@ vzxv.mundane_block("vzxv_itemstacks:item","Item","apioform",{
end,
})
--- TODO: handle dropping into nonair block correctly
+vzxv.include "loose.lua"
+local itemnodetable = {} -- we can't rely on set_node to know if an item node
+-- was placed, so here's a temporary table that will be cleared every tick
+
+-- speaking of clearing it every tick,
+minetest.register_globalstep(function()
+ itemnodetable = {}
+end)
+
function vzxv.drop(pos, stack)
- local npos = {}
- npos.x = math.floor(pos.x)
- npos.y = math.floor(pos.y)
- npos.z = math.floor(pos.z)
- minetest.set_node(npos, {name="vzxv_itemstacks:item"})
- vzxv.set_container_stack(npos, stack)
+ local npos = vzxv.floor_pos(pos)
+ local node = minetest.get_node(npos)
+ local hash = minetest.hash_node_position(npos)
+ if not node.name == "air" or itemnodetable[hash] then
+ vzxv.drop_loose(npos, stack)
+ else
+ itemnodetable[hash] = true
+ minetest.set_node(npos, {name="vzxv_itemstacks:item"})
+ vzxv.set_container_stack(npos, stack)
+ end
end
-vzxv.include "loose.lua" \ No newline at end of file
diff --git a/mods/vzxv_itemstacks/loose.lua b/mods/vzxv_itemstacks/loose.lua
index 48488de..35a83ea 100644
--- a/mods/vzxv_itemstacks/loose.lua
+++ b/mods/vzxv_itemstacks/loose.lua
@@ -29,11 +29,9 @@ minetest.register_entity("vzxv_itemstacks:loose_itemstack",{
wield_item=ItemStack(luaent._stack):get_name()
}
end,
- on_step = function(self,dt)
+ on_step = function(self,dt,moveresult)
local npos = vzxv.round_pos(self.object:get_pos())
- npos.y = npos.y - 1
- if minetest.get_node(npos).name ~= "air" then
- npos.y = npos.y + 1
+ if moveresult.touching_ground then
for i=1, #surrounding do
local s = surrounding[i]
local tpos = {