From 6621b33493466b2ff96e4f531a98d32e1e716fbe Mon Sep 17 00:00:00 2001 From: heav-4 Date: Fri, 11 Mar 2022 07:04:49 +0000 Subject: more --- mods/vzxv/utils.lua | 7 +++++++ mods/vzxv_itemstacks/container.lua | 10 ++++++++++ mods/vzxv_itemstacks/loose.lua | 37 +++++++++++++++++++++++++++++++++---- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/mods/vzxv/utils.lua b/mods/vzxv/utils.lua index 007c32e..c22f696 100644 --- a/mods/vzxv/utils.lua +++ b/mods/vzxv/utils.lua @@ -41,6 +41,13 @@ function vzxv.round_pos(pos) z = math.floor(pos.z+0.5), } end +function vzxv.floor_pos(pos) + return { + x = math.floor(pos.x), + y = math.floor(pos.y), + z = math.floor(pos.z), + } +end -- wrap metadata function vzxv.meta(pos) diff --git a/mods/vzxv_itemstacks/container.lua b/mods/vzxv_itemstacks/container.lua index 119789b..a8fb4d9 100644 --- a/mods/vzxv_itemstacks/container.lua +++ b/mods/vzxv_itemstacks/container.lua @@ -24,6 +24,16 @@ minetest.register_entity("vzxv_itemstacks:itemstack",{ local pos = vzxv.round_pos(ent:get_pos()) container_entities[minetest.hash_node_position(pos)] = ent end, + on_step = function(self,dt) + local ent = self.object + local pos = vzxv.round_pos(ent:get_pos()) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "air" then + pos.y = pos.y + 1 + vzxv.drop_loose(pos,vzxv.get_container_stack(pos)) + minetest.set_node(pos,{name="air"}) + end + end, on_deactivate = function(self) local ent = self.object local pos = vzxv.round_pos(ent:get_pos()) diff --git a/mods/vzxv_itemstacks/loose.lua b/mods/vzxv_itemstacks/loose.lua index 58952f8..48488de 100644 --- a/mods/vzxv_itemstacks/loose.lua +++ b/mods/vzxv_itemstacks/loose.lua @@ -1,9 +1,25 @@ +local surrounding = { + {0,0,0}, + {0,1,0}, + {0,-1,0}, + {1,0,0}, + {0,0,1}, + {-1,0,0}, + {0,0,-1} +} + minetest.register_entity("vzxv_itemstacks:loose_itemstack",{ initial_properties = { physical = true, pointable = false, visual = "wielditem", visual_size = {x = 0.4, y = 0.4}, + collision_box = { + type = "fixed", + fixed = { + {-0.001,-0.5,-0.001,0.001,0.10,0.001}, + }, + }, }, on_activate = function(self,staticdata) local luaent = self @@ -18,9 +34,18 @@ minetest.register_entity("vzxv_itemstacks:loose_itemstack",{ npos.y = npos.y - 1 if minetest.get_node(npos).name ~= "air" then npos.y = npos.y + 1 - if minetest.get_node(npos).name == "air" then - vzxv.drop(npos, ItemStack(self._stack)) - self.object:remove() + for i=1, #surrounding do + local s = surrounding[i] + local tpos = { + x=npos.x+s[1], + y=npos.y+s[2], + z=npos.z+s[3] + } + if minetest.get_node(tpos).name == "air" then + vzxv.drop(tpos, ItemStack(self._stack)) + self.object:remove() + break + end end end end, @@ -30,4 +55,8 @@ minetest.register_entity("vzxv_itemstacks:loose_itemstack",{ end }) -vzxv.register_gravity("vzxv_itemstacks:loose_itemstack") \ No newline at end of file +vzxv.register_gravity("vzxv_itemstacks:loose_itemstack") + +function vzxv.drop_loose(pos,stack) + minetest.add_entity(pos,"vzxv_itemstacks:loose_itemstack",stack:to_string()) +end \ No newline at end of file -- cgit v1.2.3