--- /dev/null
+-- mods/default/item_entity.lua
+
+local builtin_item = minetest.registered_entities["__builtin:item"]
+
+local item = {
+ set_item = function(self, itemstring)
+ builtin_item.set_item(self, itemstring)
+
+ local stack = ItemStack(itemstring)
+ local itemdef = minetest.registered_items[stack:get_name()]
+ if itemdef and itemdef.groups.flammable ~= 0 then
+ self.flammable = itemdef.groups.flammable
+ end
+ end,
+
+ burn_up = function(self)
+ -- disappear in a smoke puff
+ self.object:remove()
+ local p = self.object:getpos()
+ minetest.sound_play("default_item_smoke", {
+ pos = p,
+ max_hear_distance = 8,
+ })
+ minetest.add_particlespawner({
+ amount = 3,
+ time = 0.1,
+ minpos = {x = p.x - 0.1, y = p.y + 0.1, z = p.z - 0.1 },
+ maxpos = {x = p.x + 0.1, y = p.y + 0.2, z = p.z + 0.1 },
+ minvel = {x = 0, y = 2.5, z = 0},
+ maxvel = {x = 0, y = 2.5, z = 0},
+ minacc = {x = -0.15, y = -0.02, z = -0.15},
+ maxacc = {x = 0.15, y = -0.01, z = 0.15},
+ minexptime = 4,
+ maxexptime = 6,
+ minsize = 5,
+ maxsize = 5,
+ collisiondetection = true,
+ texture = "default_item_smoke.png"
+ })
+ end,
+
+ on_step = function(self, dtime)
+ builtin_item.on_step(self, dtime)
+
+ if self.flammable then
+ -- flammable, check for igniters
+ self.ignite_timer = (self.ignite_timer or 0) + dtime
+ if self.ignite_timer > 10 then
+ self.ignite_timer = 0
+
+ local node = minetest.get_node_or_nil(self.object:getpos())
+ if not node then
+ return
+ end
+
+ -- Immediately burn up flammable items in lava
+ if minetest.get_item_group(node.name, "lava") > 0 then
+ self:burn_up()
+ else
+ -- otherwise there'll be a chance based on its igniter value
+ local burn_chance = self.flammable
+ * minetest.get_item_group(node.name, "igniter")
+ if burn_chance > 0 and math.random(0, burn_chance) ~= 0 then
+ self:burn_up()
+ end
+ end
+ end
+ end
+ end,
+}
+
+-- set defined item as new __builtin:item, with the old one as fallback table
+setmetatable(item, builtin_item)
+minetest.register_entity(":__builtin:item", item)