1 -- mods/default/item_entity.lua
3 local builtin_item = minetest.registered_entities["__builtin:item"]
6 set_item = function(self, itemstring)
7 builtin_item.set_item(self, itemstring)
9 local stack = ItemStack(itemstring)
10 local itemdef = minetest.registered_items[stack:get_name()]
11 if itemdef and itemdef.groups.flammable ~= 0 then
12 self.flammable = itemdef.groups.flammable
16 burn_up = function(self)
17 -- disappear in a smoke puff
19 local p = self.object:getpos()
20 minetest.sound_play("default_item_smoke", {
22 max_hear_distance = 8,
24 minetest.add_particlespawner({
27 minpos = {x = p.x - 0.1, y = p.y + 0.1, z = p.z - 0.1 },
28 maxpos = {x = p.x + 0.1, y = p.y + 0.2, z = p.z + 0.1 },
29 minvel = {x = 0, y = 2.5, z = 0},
30 maxvel = {x = 0, y = 2.5, z = 0},
31 minacc = {x = -0.15, y = -0.02, z = -0.15},
32 maxacc = {x = 0.15, y = -0.01, z = 0.15},
37 collisiondetection = true,
38 texture = "default_item_smoke.png"
42 on_step = function(self, dtime)
43 builtin_item.on_step(self, dtime)
45 if self.flammable then
46 -- flammable, check for igniters
47 self.ignite_timer = (self.ignite_timer or 0) + dtime
48 if self.ignite_timer > 10 then
51 local node = minetest.get_node_or_nil(self.object:getpos())
56 -- Immediately burn up flammable items in lava
57 if minetest.get_item_group(node.name, "lava") > 0 then
60 -- otherwise there'll be a chance based on its igniter value
61 local burn_chance = self.flammable
62 * minetest.get_item_group(node.name, "igniter")
63 if burn_chance > 0 and math.random(0, burn_chance) ~= 0 then
72 -- set defined item as new __builtin:item, with the old one as fallback table
73 setmetatable(item, builtin_item)
74 minetest.register_entity(":__builtin:item", item)