summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorheav-4 <heavpoot@gmail.com>2022-03-11 07:04:49 +0000
committerheav-4 <heavpoot@gmail.com>2022-03-11 07:04:49 +0000
commit6621b33493466b2ff96e4f531a98d32e1e716fbe (patch)
tree83590054842fcab9f93981a8aa1b76cc0308623b
parent9d4a64cd9c26b9eb94ef1b0e773ba9b9e67bee7e (diff)
more
-rw-r--r--mods/vzxv/utils.lua7
-rw-r--r--mods/vzxv_itemstacks/container.lua10
-rw-r--r--mods/vzxv_itemstacks/loose.lua37
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