1
0
mirror of https://github.com/mt-mods/homedecor_modpack.git synced 2024-12-23 08:20:21 +01:00
homedecor_modpack/fake_fire/init.lua

249 lines
6.8 KiB
Lua
Raw Normal View History

2017-01-29 22:41:03 +01:00
local S = homedecor_i18n.gettext
2015-05-15 10:45:21 +02:00
screwdriver = screwdriver or {}
2015-05-03 13:03:14 +02:00
local function start_smoke(pos, node, clicker, chimney)
local this_spawner_meta = minetest.get_meta(pos)
local id = this_spawner_meta:get_int("smoky")
local s_handle = this_spawner_meta:get_int("sound")
local above = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name
if id ~= 0 then
if s_handle then
minetest.after(0, function(handle)
minetest.sound_stop(handle)
2015-05-03 13:03:14 +02:00
end, s_handle)
end
minetest.delete_particlespawner(id)
this_spawner_meta:set_int("smoky", nil)
this_spawner_meta:set_int("sound", nil)
return
end
if above == "air" and (not id or id == 0) then
id = minetest.add_particlespawner({
2015-05-23 15:14:47 +02:00
amount = 4, time = 0, collisiondetection = true,
2015-05-03 13:03:14 +02:00
minpos = {x=pos.x-0.25, y=pos.y+0.4, z=pos.z-0.25},
maxpos = {x=pos.x+0.25, y=pos.y+5, z=pos.z+0.25},
minvel = {x=-0.2, y=0.3, z=-0.2}, maxvel = {x=0.2, y=1, z=0.2},
minacc = {x=0,y=0,z=0}, maxacc = {x=0,y=0.5,z=0},
minexptime = 1, maxexptime = 3,
minsize = 4, maxsize = 8,
texture = "smoke_particle.png",
})
if chimney == 1 then
this_spawner_meta:set_int("smoky", id)
this_spawner_meta:set_int("sound", nil)
else
s_handle = minetest.sound_play("fire_small", {
pos = pos,
max_hear_distance = 5,
loop = true
})
this_spawner_meta:set_int("smoky", id)
this_spawner_meta:set_int("sound", s_handle)
2015-05-03 13:03:14 +02:00
end
end
2015-05-03 13:03:14 +02:00
end
local function stop_smoke(pos)
local this_spawner_meta = minetest.get_meta(pos)
local id = this_spawner_meta:get_int("smoky")
local s_handle = this_spawner_meta:get_int("sound")
if id ~= 0 then
minetest.delete_particlespawner(id)
end
if s_handle then
minetest.after(0, function(handle)
minetest.sound_stop(handle)
2015-05-03 13:03:14 +02:00
end, s_handle)
end
this_spawner_meta:set_int("smoky", nil)
this_spawner_meta:set_int("sound", nil)
end
-- FLAME TYPES
2017-01-29 22:41:03 +01:00
local flame_types = {
{ "fake", S("Fake fire") },
{ "ice", S("Ice fire") },
}
2015-05-03 13:03:14 +02:00
for _, f in ipairs(flame_types) do
2017-01-29 22:41:03 +01:00
local name, desc = unpack(f)
minetest.register_node("fake_fire:"..name.."_fire", {
inventory_image = name.."_fire_inv.png",
description = desc,
2015-05-03 13:03:14 +02:00
drawtype = "plantlike",
paramtype = "light",
paramtype2 = "facedir",
groups = {dig_immediate=3, not_in_creative_inventory=1},
sunlight_propagates = true,
buildable_to = true,
walkable = false,
light_source = 14,
waving = 1,
tiles = {
2017-01-29 22:41:03 +01:00
{name=name.."_fire_animated.png", animation={type="vertical_frames",
2015-05-03 13:03:14 +02:00
aspect_w=16, aspect_h=16, length=1.5}},
},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
2015-05-03 13:03:14 +02:00
start_smoke(pos, node, clicker)
return itemstack
2015-05-03 13:03:14 +02:00
end,
on_destruct = function (pos)
stop_smoke(pos)
minetest.sound_play("fire_extinguish", {
pos = pos, max_hear_distance = 5
})
end,
drop = ""
2015-05-03 13:03:14 +02:00
})
end
minetest.register_node("fake_fire:fancy_fire", {
inventory_image = "fancy_fire_inv.png",
2017-01-29 22:41:03 +01:00
description = S("Fancy Fire"),
2015-05-03 13:03:14 +02:00
drawtype = "mesh",
mesh = "fancy_fire.obj",
paramtype = "light",
paramtype2 = "facedir",
groups = {dig_immediate=3},
sunlight_propagates = true,
light_source = 14,
walkable = false,
damage_per_second = 4,
on_rotate = screwdriver.rotate_simple,
2015-05-03 13:03:14 +02:00
tiles = {
{name="fake_fire_animated.png",
2015-05-03 13:03:14 +02:00
animation={type='vertical_frames', aspect_w=16, aspect_h=16, length=1}}, {name='fake_fire_logs.png'}},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
2015-05-03 13:03:14 +02:00
start_smoke(pos, node, clicker)
return itemstack
2015-05-03 13:03:14 +02:00
end,
on_destruct = function (pos)
stop_smoke(pos)
minetest.sound_play("fire_extinguish", {
pos = pos, max_hear_distance = 5
})
end,
drop = {
max_items = 3,
items = {
{
items = { "default:torch", "default:torch", "building_blocks:sticks" },
rarity = 1,
}
}
}
2015-05-03 13:03:14 +02:00
})
-- EMBERS
minetest.register_node("fake_fire:embers", {
2017-01-29 22:41:03 +01:00
description = S("Glowing Embers"),
2015-05-03 13:03:14 +02:00
tiles = {
{name="embers_animated.png", animation={type="vertical_frames",
aspect_w=16, aspect_h=16, length=2}},
},
light_source = 9,
groups = {crumbly=3},
paramtype = "light",
sounds = default.node_sound_dirt_defaults(),
})
-- CHIMNEYS
2017-01-31 06:34:41 +01:00
local materials = {
{ "stone", S("Stone chimney top") },
{ "sandstone", S("Sandstone chimney top") },
}
2015-05-03 13:03:14 +02:00
2017-01-31 06:34:41 +01:00
for _, mat in ipairs(materials) do
local name, desc = unpack(mat)
minetest.register_node("fake_fire:chimney_top_"..name, {
description = desc,
tiles = {"default_"..name..".png^chimney_top.png", "default_"..name..".png"},
2015-05-03 13:03:14 +02:00
groups = {snappy=3},
paramtype = "light",
sounds = default.node_sound_stone_defaults(),
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
2015-05-03 13:03:14 +02:00
local chimney = 1
start_smoke(pos, node, clicker, chimney)
return itemstack
2015-05-03 13:03:14 +02:00
end,
on_destruct = function (pos)
stop_smoke(pos)
end
})
2015-05-03 13:03:14 +02:00
minetest.register_craft({
type = "shapeless",
2017-01-31 06:34:41 +01:00
output = 'fake_fire:chimney_top_'..name,
recipe = {"default:torch", "stairs:slab_"..name}
2015-05-03 13:03:14 +02:00
})
end
-- FLINT and STEEL
minetest.register_tool("fake_fire:flint_and_steel", {
2017-01-29 22:41:03 +01:00
description = S("Flint and steel"),
2015-05-03 13:03:14 +02:00
inventory_image = "flint_and_steel.png",
liquids_pointable = false,
stack_max = 1,
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level=0,
groupcaps={flamable = {uses=65, maxlevel=1}}
},
on_use = function(itemstack, user, pointed_thing)
if pointed_thing.type == "node" and minetest.get_node(pointed_thing.above).name == "air" then
if not minetest.is_protected(pointed_thing.above, user:get_player_name()) then
if string.find(minetest.get_node(pointed_thing.under).name, "ice") then
minetest.set_node(pointed_thing.above, {name="fake_fire:ice_fire"})
else
minetest.set_node(pointed_thing.above, {name="fake_fire:fake_fire"})
end
else
2017-01-31 06:34:41 +01:00
minetest.chat_send_player(user:get_player_name(), S("This area is protected!"))
2015-05-03 13:03:14 +02:00
end
else
return
end
itemstack:add_wear(65535/65)
return itemstack
end
})
-- CRAFTS
minetest.register_craft({
type = "shapeless",
output = 'fake_fire:flint_and_steel',
recipe = {"default:obsidian_shard", "default:steel_ingot"}
})
minetest.register_craft({
type = "shapeless",
output = 'fake_fire:embers',
recipe = {"default:torch", "group:wood", "default:torch"}
})
minetest.register_craft({
type = "shapeless",
output = 'fake_fire:fancy_fire',
recipe = {"default:torch", "building_blocks:sticks", "default:torch" }
2015-05-03 13:03:14 +02:00
})
-- ALIASES
minetest.register_alias("fake_fire:smokeless_fire", "fake_fire:fake_fire")
minetest.register_alias("fake_fire:smokeless_ice_fire", "fake_fire:ice_fire")
minetest.register_alias("fake_fire:smokeless_chimney_top_stone", "fake_fire:chimney_top_stone")
minetest.register_alias("fake_fire:smokeless_chimney_top_sandstone", "fake_fire:chimney_top_sandstone")
minetest.register_alias("fake_fire:flint", "fake_fire:flint_and_steel")