forked from mtcontrib/plantlife_modpack
Waterlily and seagrass are now waving on top of water source
This commit is contained in:
parent
7aa9cef785
commit
4b291aabaf
@ -1,5 +1,6 @@
|
||||
-- support for i18n
|
||||
local S = minetest.get_translator("pl_seaweed")
|
||||
local random = math.random
|
||||
|
||||
local seaweed_rarity = minetest.settings:get("pl_seaweed.seaweed_rarity") or 0.06
|
||||
|
||||
@ -8,7 +9,15 @@ local function get_ndef(name)
|
||||
end
|
||||
|
||||
local algae_list = { {nil}, {2}, {3}, {4} }
|
||||
local seaweednames_list = {}
|
||||
|
||||
for i in ipairs(algae_list) do
|
||||
local num = ""
|
||||
if algae_list[i][1] ~= nil then
|
||||
num = "_"..algae_list[i][1]
|
||||
end
|
||||
table.insert(seaweednames_list, "flowers:seaweed"..num)
|
||||
end
|
||||
for i in ipairs(algae_list) do
|
||||
local num = ""
|
||||
local algae_groups = {snappy = 3,flammable=2,flower=1}
|
||||
@ -18,7 +27,7 @@ for i in ipairs(algae_list) do
|
||||
algae_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
|
||||
end
|
||||
|
||||
minetest.register_node(":flowers:seaweed"..num, {
|
||||
local seaweed_def = {
|
||||
description = S("Seaweed"),
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
@ -45,7 +54,6 @@ for i in ipairs(algae_list) do
|
||||
buildable_to = true,
|
||||
|
||||
liquids_pointable = true,
|
||||
drop = "flowers:seaweed",
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
if not itemstack or not placer or not pointed_thing then
|
||||
return
|
||||
@ -57,6 +65,7 @@ for i in ipairs(algae_list) do
|
||||
local place_pos = nil
|
||||
local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
|
||||
local under_node = minetest.get_node(pt.under)
|
||||
local def = minetest.registered_nodes[under_node.name]
|
||||
local above_node = minetest.get_node(pt.above)
|
||||
local top_node = minetest.get_node(top_pos)
|
||||
if get_ndef(under_node.name)["buildable_to"] then
|
||||
@ -78,8 +87,7 @@ for i in ipairs(algae_list) do
|
||||
local nodename = "default:cobble" -- :D
|
||||
|
||||
if not keys["sneak"] then
|
||||
--local node = minetest.get_node(pt.under)
|
||||
local seaweed = math.random(1,4)
|
||||
local seaweed = random(1,4)
|
||||
if seaweed == 1 then
|
||||
nodename = "flowers:seaweed"
|
||||
elseif seaweed == 2 then
|
||||
@ -89,10 +97,18 @@ for i in ipairs(algae_list) do
|
||||
elseif seaweed == 4 then
|
||||
nodename = "flowers:seaweed_4"
|
||||
end
|
||||
minetest.swap_node(place_pos, {name = nodename, param2 = math.random(0,3) })
|
||||
minetest.swap_node(
|
||||
place_pos, {
|
||||
name = nodename..(def.waving == 3 and "_waving" or ""),
|
||||
param2 = random(0,3)
|
||||
})
|
||||
else
|
||||
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||
minetest.swap_node(place_pos, {name = "flowers:seaweed", param2 = fdir})
|
||||
minetest.swap_node(
|
||||
place_pos, {
|
||||
name = "flowers:seaweed"..(def.waving == 3 and "_waving" or ""),
|
||||
param2 = fdir
|
||||
})
|
||||
end
|
||||
|
||||
if not minetest.is_creative_enabled(pname) then
|
||||
@ -100,12 +116,20 @@ for i in ipairs(algae_list) do
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
}
|
||||
|
||||
local seaweed_waving_def = table.copy(seaweed_def)
|
||||
seaweed_waving_def.waving = 3
|
||||
seaweed_waving_def.drop = "flowers:seaweed"
|
||||
seaweed_waving_def.groups.not_in_creative_inventory = 1
|
||||
|
||||
minetest.register_node(":flowers:seaweed"..num, seaweed_def)
|
||||
minetest.register_node(":flowers:seaweed"..num.."_waving", seaweed_waving_def)
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "flowers:seaweed"..num,
|
||||
decoration = {"flowers:seaweed"..num},
|
||||
decoration = {"flowers:seaweed"..num.."_waving"},
|
||||
place_on = {"default:water_source"},
|
||||
deco_type = "simple",
|
||||
flags = "liquid_surface",
|
||||
@ -132,6 +156,26 @@ for i in ipairs(algae_list) do
|
||||
})
|
||||
end
|
||||
|
||||
-- LBM to replace old seaweed definition to add waving
|
||||
core.register_lbm({
|
||||
label = "Seaweed waving version",
|
||||
name = "pl_seaweed:seaweed_waving_version",
|
||||
nodenames = seaweednames_list,
|
||||
run_at_every_load = false,
|
||||
action = function(pos, node)
|
||||
local node_under = core.get_node({x=pos.x, y=pos.y-1, z=pos.z})
|
||||
local def_node_under = core.registered_nodes[node_under.name]
|
||||
local is_node_under_waving = def_node_under.waving and def_node_under.waving == 3
|
||||
|
||||
local def_node = core.registered_nodes[node.name]
|
||||
local is_node_waving = def_node.waving and def_node.waving == 3
|
||||
|
||||
if not is_node_waving and is_node_under_waving then
|
||||
core.swap_node(pos, {name = node.name.."_waving"})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_alias("flowers:flower_seaweed", "flowers:seaweed")
|
||||
minetest.register_alias("along_shore:pondscum_1", "flowers:seaweed")
|
||||
minetest.register_alias("along_shore:seaweed_1", "flowers:seaweed")
|
||||
|
@ -1,5 +1,6 @@
|
||||
-- support for i18n
|
||||
local S = minetest.get_translator("pl_waterlilies")
|
||||
local random = math.random
|
||||
|
||||
local fill_ratio = minetest.settings:get("pl_waterlilies.waterlily_rarity") or 0.03
|
||||
|
||||
@ -38,7 +39,7 @@ for i in ipairs(lilies_list) do
|
||||
lily_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
|
||||
end
|
||||
|
||||
minetest.register_node(":flowers:waterlily"..deg1, {
|
||||
local waterlily_def = {
|
||||
description = S("Waterlily"),
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
@ -66,7 +67,6 @@ for i in ipairs(lilies_list) do
|
||||
node_placement_prediction = "",
|
||||
|
||||
liquids_pointable = true,
|
||||
drop = "flowers:waterlily",
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
if not itemstack or not placer or not pointed_thing then
|
||||
return
|
||||
@ -78,6 +78,7 @@ for i in ipairs(lilies_list) do
|
||||
local place_pos = nil
|
||||
local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
|
||||
local under_node = minetest.get_node(pt.under)
|
||||
local def = minetest.registered_nodes[under_node.name]
|
||||
local above_node = minetest.get_node(pt.above)
|
||||
local top_node = minetest.get_node(top_pos)
|
||||
|
||||
@ -99,7 +100,7 @@ for i in ipairs(lilies_list) do
|
||||
local nodename = "default:cobble" -- if this block appears, something went....wrong :-)
|
||||
|
||||
if not keys["sneak"] then
|
||||
local waterlily = math.random(1,8)
|
||||
local waterlily = random(1,8)
|
||||
if waterlily == 1 then
|
||||
nodename = "flowers:waterlily"
|
||||
elseif waterlily == 2 then
|
||||
@ -117,10 +118,18 @@ for i in ipairs(lilies_list) do
|
||||
elseif waterlily == 8 then
|
||||
nodename = "flowers:waterlily_s4"
|
||||
end
|
||||
minetest.swap_node(place_pos, {name = nodename, param2 = math.random(0,3) })
|
||||
minetest.swap_node(
|
||||
place_pos, {
|
||||
name = nodename..(def.waving == 3 and "_waving" or ""),
|
||||
param2 = random(0,3)
|
||||
})
|
||||
else
|
||||
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||
minetest.swap_node(place_pos, {name = "flowers:waterlily", param2 = fdir})
|
||||
minetest.swap_node(
|
||||
place_pos, {
|
||||
name = "flowers:waterlily"..(def.waving == 3 and "_waving" or ""),
|
||||
param2 = fdir
|
||||
})
|
||||
end
|
||||
|
||||
if not minetest.is_creative_enabled(pname) then
|
||||
@ -128,12 +137,20 @@ for i in ipairs(lilies_list) do
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
}
|
||||
|
||||
local waterlily_waving_def = table.copy(waterlily_def)
|
||||
waterlily_waving_def.waving = 3
|
||||
waterlily_waving_def.drop = "flowers:waterlily"
|
||||
waterlily_waving_def.groups.not_in_creative_inventory = 1
|
||||
|
||||
minetest.register_node(":flowers:waterlily"..deg1, waterlily_def)
|
||||
minetest.register_node(":flowers:waterlily"..deg1.."_waving", waterlily_waving_def)
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "flowers:waterlily"..deg1,
|
||||
decoration = {"flowers:waterlily"..deg1},
|
||||
decoration = {"flowers:waterlily"..deg1.."_waving"},
|
||||
place_on = {"default:water_source"},
|
||||
deco_type = "simple",
|
||||
flags = "liquid_surface",
|
||||
@ -147,7 +164,7 @@ for i in ipairs(lilies_list) do
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "flowers:waterlily"..deg1 .."_relative",
|
||||
decoration = {"flowers:waterlily"..deg1},
|
||||
decoration = {"flowers:waterlily"..deg1.."_waving"},
|
||||
place_on = {"default:water_source"},
|
||||
deco_type = "simple",
|
||||
flags = "liquid_surface",
|
||||
@ -161,7 +178,7 @@ for i in ipairs(lilies_list) do
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "flowers:waterlily"..deg1 .."_relative",
|
||||
decoration = {"flowers:waterlily"..deg1},
|
||||
decoration = {"flowers:waterlily"..deg1.."_waving"},
|
||||
place_on = {"default:water_source"},
|
||||
deco_type = "simple",
|
||||
flags = "liquid_surface",
|
||||
@ -174,6 +191,26 @@ for i in ipairs(lilies_list) do
|
||||
})
|
||||
end
|
||||
|
||||
-- LBM to replace old waterlily definition to add waving
|
||||
core.register_lbm({
|
||||
label = "Waterlily waving version",
|
||||
name = "pl_waterlilies:waterlily_waving_version",
|
||||
nodenames = lilynames_list,
|
||||
run_at_every_load = false,
|
||||
action = function(pos, node, s_dtime)
|
||||
local node_under = core.get_node({x=pos.x, y=pos.y-1, z=pos.z})
|
||||
local def_node_under = core.registered_nodes[node_under.name]
|
||||
local is_node_under_waving = def_node_under.waving and def_node_under.waving == 3
|
||||
|
||||
local def_node = core.registered_nodes[node.name]
|
||||
local is_node_waving = def_node.waving and def_node.waving == 3
|
||||
|
||||
if not is_node_waving and is_node_under_waving then
|
||||
core.swap_node(pos, {name = node.name.."_waving"})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_alias( "flowers:flower_waterlily", "flowers:waterlily")
|
||||
minetest.register_alias( "flowers:flower_waterlily_225", "flowers:waterlily_225")
|
||||
minetest.register_alias( "flowers:flower_waterlily_45", "flowers:waterlily_45")
|
||||
|
Loading…
x
Reference in New Issue
Block a user