diff options
Diffstat (limited to 'mods/vzxv_itemstacks/init.lua')
-rw-r--r-- | mods/vzxv_itemstacks/init.lua | 27 |
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 |