mirror of
				https://github.com/mt-mods/homedecor_modpack.git
				synced 2025-11-04 02:35:28 +01:00 
			
		
		
		
	abstract fake_fire node registration to reduce code size and make the code more maintainable
This commit is contained in:
		@@ -1,197 +1,91 @@
 | 
			
		||||
local cp = nil
 | 
			
		||||
 | 
			
		||||
-- FLAME TYPES
 | 
			
		||||
local function register_fake_fire(name, def)
 | 
			
		||||
	assert(name, "local registration called without name")
 | 
			
		||||
	assert(def, "local registration called without node definition")
 | 
			
		||||
 | 
			
		||||
-- SMOKEY FIRE (TRIGGERS SMOKE ABM)
 | 
			
		||||
minetest.register_node("fake_fire:fake_fire", {
 | 
			
		||||
	-- make sure shared definitions are set
 | 
			
		||||
	def.is_ground_content = true
 | 
			
		||||
	def.inventory_image = def.inventory_image or name.. ".png"
 | 
			
		||||
	def.drawtype = "plantlike"
 | 
			
		||||
	def.waving = 1 -- Waving wasn't an option when this mod was written. ~ LazyJ, 2014_03_13
 | 
			
		||||
	def.light_source = def.lightsource or 14
 | 
			
		||||
	-- Adding sunlight_propagtes and leaving comments as a future reference.
 | 
			
		||||
	-- If true, sunlight will go infinitely through this (no shadow is cast).
 | 
			
		||||
	-- Because fire produces light it should be "true" so fire *doesn't* have
 | 
			
		||||
	-- a shadow. 
 | 
			
		||||
	def.sunlight_propagates = true
 | 
			
		||||
	-- damage_per_second = 2*0.5, -- It's *fake* fire. PvP on our server has
 | 
			
		||||
	-- been disabled for a reason. I don't want griefers lighting players on
 | 
			
		||||
	-- fire or trapping them in blazes. ~ LazyJ, 2014_0_13
 | 
			
		||||
 | 
			
		||||
	def.groups = def.groups or {
 | 
			
		||||
		oddly_breakable_by_hand=3, dig_immediate=2,
 | 
			
		||||
		attached_node=1, not_in_creative_inventory=1
 | 
			
		||||
	}
 | 
			
		||||
	def.paramtype = "light"
 | 
			
		||||
	def.walkable = false
 | 
			
		||||
	def.drop = ""  -- So fire won't return to the inventory. ~ LazyJ
 | 
			
		||||
	def.sounds = def.sounds or minetest.sound_play("fire_small", {pos=cp, loop=true})
 | 
			
		||||
	def.buildable_to = true
 | 
			
		||||
 | 
			
		||||
	local swap_on_punch = def.swap_on_punch
 | 
			
		||||
	def.on_punch = def.on_punch or function (pos, node, puncher)
 | 
			
		||||
		-- A max_hear_distance of 20 may freak some players out by the "hiss"
 | 
			
		||||
		-- so I reduced it to 5.
 | 
			
		||||
		minetest.sound_play("fire_extinguish", {pos = pos, gain = 1.0, max_hear_distance = 5,})
 | 
			
		||||
		-- swap the node on_punch if def.swap_on_punch is set
 | 
			
		||||
		if swap_on_punch then
 | 
			
		||||
			minetest.set_node(pos, {name = swap_on_punch})
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- no need to add these to the global registration table
 | 
			
		||||
	def.swap_on_punch = nil
 | 
			
		||||
	def.smoking = nil
 | 
			
		||||
	minetest.register_node("fake_fire:" .. name, def)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- FLAME TYPES
 | 
			
		||||
register_fake_fire("fake_fire", {
 | 
			
		||||
	description = "Smokey, Fake Fire",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{name="fake_fire_animated.png", animation={type="vertical_frames",
 | 
			
		||||
		aspect_w=16, aspect_h=16, length=1.5}},
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
   	inventory_image = 'fake_fire.png',
 | 
			
		||||
	wield_image = {
 | 
			
		||||
		{name="fake_fire_animated.png", animation={type="vertical_frames",
 | 
			
		||||
		aspect_w=16, aspect_h=16, length=1.5}},
 | 
			
		||||
		},
 | 
			
		||||
	drawtype = "plantlike",
 | 
			
		||||
	 -- Waving wasn't an option when this mod was written. ~ LazyJ, 2014_03_13
 | 
			
		||||
	waving = 1,
 | 
			
		||||
	light_source = 14,
 | 
			
		||||
	-- Adding sunlight_propagtes and leaving comments as a future reference.
 | 
			
		||||
	-- If true, sunlight will go infinitely through this (no shadow is cast).
 | 
			
		||||
	-- Because fire produces light it should be "true" so fire *doesn't* have
 | 
			
		||||
	-- a shadow. 
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	-- damage_per_second = 2*0.5, -- It's *fake* fire. PvP on our server has
 | 
			
		||||
	-- been disabled for a reason. I don't want griefers lighting players on
 | 
			
		||||
	-- fire or trapping them in blazes. ~ LazyJ, 2014_0_13
 | 
			
		||||
	--groups = {dig_immediate=3,attached_node=1},
 | 
			
		||||
	groups = {
 | 
			
		||||
				oddly_breakable_by_hand=3, dig_immediate=2, attached_node=1,
 | 
			
		||||
				not_in_creative_inventory=1
 | 
			
		||||
			},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	buildable_to = true,
 | 
			
		||||
	drop = "",  -- So fire won't return to the inventory. ~ LazyJ
 | 
			
		||||
	sounds = minetest.sound_play("fire_small", {pos=cp, loop=true}),
 | 
			
		||||
	on_punch = function (pos,node,puncher)
 | 
			
		||||
		-- A max_hear_distance of 20 may freak some players out by the "hiss"
 | 
			
		||||
		-- so I reduced it to 5.
 | 
			
		||||
		minetest.sound_play("fire_extinguish", {pos = pos, gain = 1.0,
 | 
			
		||||
		max_hear_distance = 5,})
 | 
			
		||||
		-- This swaps the smoky version with the smokeless version. ~ LazyJ
 | 
			
		||||
		minetest.set_node(pos, {name = "fake_fire:smokeless_fire"})
 | 
			
		||||
	end
 | 
			
		||||
	swap_on_punch = "fake_fire:smokeless_fire",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- SMOKELESS FIRE (DOES NOT TRIGGER SMOKE ABM)
 | 
			
		||||
minetest.register_node("fake_fire:smokeless_fire", {
 | 
			
		||||
register_fake_fire("smokeless_fire", {
 | 
			
		||||
	description = "Smokeless, Fake Fire",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{name="fake_fire_animated.png", animation={type="vertical_frames",
 | 
			
		||||
		aspect_w=16, aspect_h=16, length=1.5}},
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	inventory_image = 'fake_fire.png',
 | 
			
		||||
	wield_image = {
 | 
			
		||||
		{name="fake_fire_animated.png", animation={type="vertical_frames",
 | 
			
		||||
		aspect_w=16, aspect_h=16, length=1.5}},
 | 
			
		||||
		},
 | 
			
		||||
	drawtype = "plantlike",
 | 
			
		||||
	 -- Waving wasn't an option when this mod was written. ~ LazyJ, 2014_03_13
 | 
			
		||||
	waving = 1,
 | 
			
		||||
	light_source = 14,
 | 
			
		||||
		-- Adding sunlight_propagtes and leaving comments as a future reference.
 | 
			
		||||
	-- If true, sunlight will go infinitely through this (no shadow is cast).
 | 
			
		||||
	-- Because fire produces light it should be "true" so fire *doesn't* have
 | 
			
		||||
	-- a shadow. 
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	-- damage_per_second = 2*0.5, -- It's *fake* fire. PvP on our server has
 | 
			
		||||
	-- been disabled for a reason. I don't want griefers lighting players on
 | 
			
		||||
	-- fire or trapping them in blazes. ~ LazyJ, 2014_0_13
 | 
			
		||||
	--groups = {dig_immediate=3,attached_node=1},
 | 
			
		||||
	groups = {
 | 
			
		||||
				oddly_breakable_by_hand=3, dig_immediate=2, attached_node=1,
 | 
			
		||||
				not_in_creative_inventory=1
 | 
			
		||||
			},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	buildable_to = true,
 | 
			
		||||
	drop = "",  -- So fire won't return to the inventory. ~ LazyJ
 | 
			
		||||
	sounds = minetest.sound_play("fire_small", {pos=cp, loop=true}),
 | 
			
		||||
	on_punch = function (pos,node,puncher)
 | 
			
		||||
		-- A max_hear_distance of 20 may freak some players out by the "hiss"
 | 
			
		||||
		-- so I reduced it to 5.
 | 
			
		||||
		minetest.sound_play("fire_extinguish", {pos = pos, gain = 1.0,
 | 
			
		||||
		max_hear_distance = 5,})
 | 
			
		||||
		-- This swaps the smokeless version with the smoky version. ~ LazyJ
 | 
			
		||||
		minetest.set_node(pos, {name = "fake_fire:fake_fire"})
 | 
			
		||||
	end
 | 
			
		||||
	swap_on_punch = "fake_fire:fake_fire",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- SMOKEY ICE FIRE (TRIGGERS SMOKE ABM)
 | 
			
		||||
minetest.register_node("fake_fire:ice_fire", {
 | 
			
		||||
register_fake_fire("ice_fire", {
 | 
			
		||||
	description = "Smoky, Fake, Ice Fire",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{name="ice_fire_animated.png", animation={type="vertical_frames",
 | 
			
		||||
		aspect_w=16, aspect_h=16, length=1.5}},
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
   	inventory_image = 'ice_fire.png',
 | 
			
		||||
	wield_image = {
 | 
			
		||||
		{name="ice_fire_animated.png", animation={type="vertical_frames",
 | 
			
		||||
		aspect_w=16, aspect_h=16, length=1.5}},
 | 
			
		||||
		},
 | 
			
		||||
	drawtype = "plantlike",
 | 
			
		||||
	 -- Waving wasn't an option when this mod was written. ~ LazyJ, 2014_03_13
 | 
			
		||||
	waving = 1,
 | 
			
		||||
	light_source = 14,
 | 
			
		||||
		-- Adding sunlight_propagtes and leaving comments as a future reference.
 | 
			
		||||
	-- If true, sunlight will go infinitely through this (no shadow is cast).
 | 
			
		||||
	-- Because fire produces light it should be "true" so fire *doesn't* have
 | 
			
		||||
	-- a shadow. 
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	-- damage_per_second = 2*0.5, -- It's *fake* fire. PvP on our server has
 | 
			
		||||
	-- been disabled for a reason. I don't want griefers lighting players on
 | 
			
		||||
	-- fire or trapping them in blazes. ~ LazyJ, 2014_0_13
 | 
			
		||||
	--groups = {dig_immediate=3,attached_node=1},
 | 
			
		||||
	groups = {
 | 
			
		||||
				oddly_breakable_by_hand=3, dig_immediate=2, attached_node=1,
 | 
			
		||||
				not_in_creative_inventory=1
 | 
			
		||||
			},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	buildable_to = true,
 | 
			
		||||
	drop = "",  -- So fire won't return to the inventory. ~ LazyJ
 | 
			
		||||
	sounds = minetest.sound_play("fire_small", {pos=cp, loop=true}),
 | 
			
		||||
	on_punch = function (pos,node,puncher)
 | 
			
		||||
		-- A max_hear_distance of 20 may freak some players out by the "hiss"
 | 
			
		||||
		-- so I reduced it to 5.
 | 
			
		||||
		minetest.sound_play("fire_extinguish", {pos = pos, gain = 1.0,
 | 
			
		||||
		max_hear_distance = 5,})
 | 
			
		||||
		-- This swaps the smoky version with the smokeless version. ~ LazyJ
 | 
			
		||||
		minetest.set_node(pos, {name = "fake_fire:smokeless_ice_fire"})
 | 
			
		||||
	end
 | 
			
		||||
	swap_on_punch = "fake_fire:smokeless_ice_fire",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- SMOKELESS ICE FIRE (DOES NOT TRIGGER SMOKE ABM)
 | 
			
		||||
minetest.register_node("fake_fire:smokeless_ice_fire", {
 | 
			
		||||
register_fake_fire("smokeless_ice_fire", {
 | 
			
		||||
	description = "Smokeless, Fake, Ice Fire",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{name="ice_fire_animated.png", animation={type="vertical_frames",
 | 
			
		||||
		aspect_w=16, aspect_h=16, length=1.5}},
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
   	inventory_image = 'ice_fire.png',
 | 
			
		||||
	wield_image = {
 | 
			
		||||
		{name="ice_fire_animated.png", animation={type="vertical_frames",
 | 
			
		||||
		aspect_w=16, aspect_h=16, length=1.5}},
 | 
			
		||||
		},
 | 
			
		||||
	drawtype = "plantlike",
 | 
			
		||||
	 -- Waving wasn't an option when this mod was written. ~ LazyJ, 2014_03_13
 | 
			
		||||
	waving = 1,
 | 
			
		||||
	light_source = 14,
 | 
			
		||||
		-- Adding sunlight_propagtes and leaving comments as a future reference.
 | 
			
		||||
	-- If true, sunlight will go infinitely through this (no shadow is cast).
 | 
			
		||||
	-- Because fire produces light it should be "true" so fire *doesn't* have
 | 
			
		||||
	-- a shadow. 
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	-- damage_per_second = 2*0.5, -- It's *fake* fire. PvP on our server has
 | 
			
		||||
	-- been disabled for a reason. I don't want griefers lighting players on
 | 
			
		||||
	-- fire or trapping them in blazes. ~ LazyJ, 2014_0_13
 | 
			
		||||
	--groups = {dig_immediate=3,attached_node=1},
 | 
			
		||||
	groups = {
 | 
			
		||||
				oddly_breakable_by_hand=3, dig_immediate=2, attached_node=1,
 | 
			
		||||
				not_in_creative_inventory=1
 | 
			
		||||
			},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	buildable_to = true,
 | 
			
		||||
	drop = "",  -- So fire won't return to the inventory. ~ LazyJ
 | 
			
		||||
	sounds = minetest.sound_play("fire_small", {pos=cp, loop=true}),
 | 
			
		||||
	on_punch = function (pos,node,puncher)
 | 
			
		||||
		-- A max_hear_distance of 20 may freak some players out by the "hiss"
 | 
			
		||||
		-- so I reduced it to 5.
 | 
			
		||||
		minetest.sound_play("fire_extinguish", {pos = pos, gain = 1.0,
 | 
			
		||||
		max_hear_distance = 5,})
 | 
			
		||||
		-- This swaps the smokeless version with the smoky version. ~ LazyJ
 | 
			
		||||
		minetest.set_node(pos, {name = "fake_fire:ice_fire"})
 | 
			
		||||
	end
 | 
			
		||||
	swap_on_punch = "fake_fire:ice_fire",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- FLINT and STEEL
 | 
			
		||||
 | 
			
		||||
minetest.register_tool("fake_fire:flint_and_steel", {
 | 
			
		||||
	description = "Flint and steel",
 | 
			
		||||
	inventory_image = "flint_and_steel.png",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user