diff options
author | heav-4 <heavpoot@gmail.com> | 2022-03-11 23:00:45 +0000 |
---|---|---|
committer | heav-4 <heavpoot@gmail.com> | 2022-03-11 23:00:45 +0000 |
commit | 6e3a2b8da715d0d15c165e6df8791a55e0a961c8 (patch) | |
tree | 0c43769566968e7264e4a4243b8b80a98cb4abfe | |
parent | 6621b33493466b2ff96e4f531a98d32e1e716fbe (diff) |
improve vzxv.drop()
-rw-r--r-- | mods/vzxv_itemstacks/init.lua | 27 | ||||
-rw-r--r-- | mods/vzxv_itemstacks/loose.lua | 6 |
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 = { |