From 6e3a2b8da715d0d15c165e6df8791a55e0a961c8 Mon Sep 17 00:00:00 2001 From: heav-4 Date: Fri, 11 Mar 2022 23:00:45 +0000 Subject: improve vzxv.drop() --- mods/vzxv_itemstacks/init.lua | 27 +++++++++++++++++++-------- 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 = { -- cgit v1.2.3