summaryrefslogtreecommitdiff
path: root/mods/vzxv_itemstacks/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'mods/vzxv_itemstacks/init.lua')
-rw-r--r--mods/vzxv_itemstacks/init.lua27
1 files changed, 19 insertions, 8 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