plantlife_modpack/trunks/nodes.lua
Luke aka SwissalpS f629f54d43
Is ground content revision (#69)
* bushes ground content

minetest default game treats all bush parts as ground
content, so we do that here too. The baskets however are
player made and placed, so they aren't ground content

* cavestuff ground content

Pebbles are given to mapgen as decorations, so they have
been left as ground content.
The stalactites are not ground content

* user 'placed' nodes -> not ground content

* ground content revision
2024-03-15 17:54:16 +01:00

431 lines
14 KiB
Lua

-- Code by Mossmanikin & Neuromancer
-- support for i18n
local S = minetest.get_translator("trunks")
-----------------------------------------------------------------------------------------------
-- TWiGS
-----------------------------------------------------------------------------------------------
-- For compatibility with older stuff
minetest.register_alias("trunks:twig", "trunks:twig_1")
local flat_stick = {-1/2, -1/2, -1/2, 1/2, -7/16, 1/2}
local NoDe = { {1}, {2}, {3}, {4}, {5}, --[[{6},]] {7}, {8}, {9}, {10}, {11}, {12}, {13} }
for i in pairs(NoDe) do
local NR = NoDe[i][1]
local iNV = NR - 1
minetest.register_node("trunks:twig_"..NR, {
description = S("Twig"),
inventory_image = "trunks_twig_"..NR..".png",
wield_image = "trunks_twig_"..NR..".png",
drawtype = "nodebox",
tiles = {
"trunks_twig_"..NR..".png",
"trunks_twig_"..NR..".png^[transformFY", -- mirror
"trunks_twig_6.png" -- empty
},
use_texture_alpha = "clip",
paramtype = "light",
paramtype2 = "facedir",
walkable = false,
sunlight_propagates = true,
buildable_to = true,
node_box = {type = "fixed", fixed = flat_stick},
groups = {
choppy=2,
oddly_breakable_by_hand=2,
flammable=3,
attached_node=1,
not_in_creative_inventory=iNV
},
is_ground_content = false,
drop = "trunks:twig_1",
sounds = default.node_sound_leaves_defaults(),
liquids_pointable = true,
on_place = function(itemstack, placer, pointed_thing)
local pt = pointed_thing
if not placer then return end
local playername = placer:get_player_name()
if minetest.is_protected(pt.above, playername) then
minetest.record_protection_violation(pt.above, playername)
return
end
local direction = minetest.dir_to_facedir(placer:get_look_dir())
if minetest.get_node(pt.above).name=="air" then
minetest.swap_node(pt.above, {name="trunks:twig_"..math.random(1,4), param2=direction})
if not minetest.is_creative_enabled(playername) then
itemstack:take_item()
end
return itemstack
end
end,
})
end
-----------------------------------------------------------------------------------------------
-- MoSS
-----------------------------------------------------------------------------------------------
-- wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
-- wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
-- wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
-- was local flat_moss = {-1/2, -1/2, -1/2, 1/2, -15/32, 1/2}
local cbox = {
type = "wallmounted",
wall_top = {-1/2, 1/2, -1/2, 1/2, 15/32, 1/2},
wall_bottom = {-1/2, -1/2, -1/2, 1/2, -15/32, 1/2},
wall_side = {-1/2, -1/2, -1/2, -15/32, 1/2, 1/2}
}
for r = 0, 3 do
local xform = ""
if r > 0 then xform = "^[transformR"..r*90 end
minetest.register_node("trunks:moss_plain_"..r, {
description = S("Moss"),
drawtype = "nodebox",
tiles = {"trunks_moss.png"..xform},
use_texture_alpha = "clip",
inventory_image = "trunks_moss.png",
wield_image = "trunks_moss.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
node_box = cbox,
buildable_to = true,
groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r},
sounds = default.node_sound_leaves_defaults(),
drop = "trunks:moss_plain_0",
})
-----------------------------------------------------------------------------------------------
-- MoSS & FuNGuS
-----------------------------------------------------------------------------------------------
minetest.register_node("trunks:moss_with_fungus_"..r, {
description = S("Moss with Fungus"),
drawtype = "nodebox",
tiles = {"trunks_moss_fungus.png"..xform},
inventory_image = "trunks_moss_fungus.png",
wield_image = "trunks_moss_fungus.png",
use_texture_alpha = "clip",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
node_box = cbox,
buildable_to = true,
groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r},
sounds = default.node_sound_leaves_defaults(),
drop = "trunks:moss_with_fungus_0",
})
end
minetest.register_alias("trunks:moss_plain", "trunks:moss_plain_0")
minetest.register_alias("trunks:moss_with_fungus", "trunks:moss_with_fungus_0")
-----------------------------------------------------------------------------------------------
-- TWiGS BLoCK
-----------------------------------------------------------------------------------------------
minetest.register_alias("woodstuff:twigs", "trunks:twigs")
minetest.register_node("trunks:twigs", {
description = S("Twigs Block"),
paramtype2 = "facedir",
tiles = {"trunks_twigs.png"},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
})
-----------------------------------------------------------------------------------------------
-- TWiGS SLaB
-----------------------------------------------------------------------------------------------
minetest.register_alias("woodstuff:twigs_slab", "trunks:twigs_slab")
minetest.register_node("trunks:twigs_slab", {
description = S("Twigs Slab"),
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
tiles = {"trunks_twigs.png"},
node_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2},
},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
})
-----------------------------------------------------------------------------------------------
-- TWiGS RooF
-----------------------------------------------------------------------------------------------
minetest.register_alias("woodstuff:twigs_roof", "trunks:twigs_roof")
minetest.register_node("trunks:twigs_roof", {
description = S("Twigs Roof"),
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
tiles = {"trunks_twigs.png"},
node_box = {
type = "fixed",
-- { left, bottom, front, right, top, back }
fixed = {
{-1/2, 0, 0, 1/2, 1/2, 1/2},
{-1/2, -1/2, -1/2, 1/2, 0, 0},
}
},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
})
-----------------------------------------------------------------------------------------------
-- TWiGS RooF CoRNeR
-----------------------------------------------------------------------------------------------
minetest.register_alias("woodstuff:twigs_roof_corner", "trunks:twigs_roof_corner")
minetest.register_node("trunks:twigs_roof_corner", {
description = S("Twigs Roof Corner 1"),
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
tiles = {
"trunks_twigs_corner.png",
"trunks_twigs_corner.png",
"trunks_twigs.png"
},
node_box = {
type = "fixed",
-- { left, bottom, front, right, top, back }
fixed = {
{-1/2, 0, 0, 0, 1/2, 1/2},
{0, -1/2, 0, 1/2, 0, 1/2},
{-1/2, -1/2, -1/2, 0, 0, 0},
}
},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
})
-----------------------------------------------------------------------------------------------
-- TWiGS RooF CoRNeR 2
-----------------------------------------------------------------------------------------------
minetest.register_alias("woodstuff:twigs_roof_corner_2", "trunks:twigs_roof_corner_2")
minetest.register_node("trunks:twigs_roof_corner_2", {
description = S("Twigs Roof Corner 2"),
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
tiles = {
"trunks_twigs_corner.png",
"trunks_twigs_corner.png",
"trunks_twigs.png"
},
node_box = {
type = "fixed",
-- { left, bottom, front, right, top, back }
fixed = {
{-1/2, -1/2, 0, 0, 0, 1/2},
{0, 0, 0, 1/2, 1/2, 1/2},
{-1/2, 0, -1/2, 0, 1/2, 0},
}
},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
})
local roof = "trunks:twigs_roof"
local corner = "trunks:twigs_roof_corner"
local corner_2 = "trunks:twigs_roof_corner_2"
minetest.register_abm({
nodenames = {roof},
interval = 1,
chance = 1,
action = function(pos)
local node_east = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z })
local node_west = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z })
local node_north = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
local node_south = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
-- corner 1
if ((node_west.name == roof and node_west.param2 == 0)
or (node_west.name == corner and node_west.param2 == 1))
and ((node_north.name == roof and node_north.param2 == 3)
or (node_north.name == corner and node_north.param2 == 3))
then
minetest.swap_node(pos, {name=corner, param2=0})
end
if ((node_north.name == roof and node_north.param2 == 1)
or (node_north.name == corner and node_north.param2 == 2))
and ((node_east.name == roof and node_east.param2 == 0)
or (node_east.name == corner and node_east.param2 == 0))
then
minetest.swap_node(pos, {name=corner, param2=1})
end
if ((node_east.name == roof and node_east.param2 == 2)
or (node_east.name == corner and node_east.param2 == 3))
and ((node_south.name == roof and node_south.param2 == 1)
or (node_south.name == corner and node_south.param2 == 1))
then
minetest.swap_node(pos, {name=corner, param2=2})
end
if ((node_south.name == roof and node_south.param2 == 3)
or (node_south.name == corner and node_south.param2 == 0))
and ((node_west.name == roof and node_west.param2 == 2)
or (node_west.name == corner and node_west.param2 == 2))
then
minetest.swap_node(pos, {name=corner, param2=3})
end
-- corner 2
if ((node_west.name == roof and node_west.param2 == 2)
or (node_west.name == corner_2 and node_west.param2 == 1))
and ((node_north.name == roof and node_north.param2 == 1)
or (node_north.name == corner_2 and node_north.param2 == 3))
then
minetest.swap_node(pos, {name=corner_2, param2=0})
end
if ((node_north.name == roof and node_north.param2 == 3)
or (node_north.name == corner_2 and node_north.param2 == 2))
and ((node_east.name == roof and node_east.param2 == 2)
or (node_east.name == corner_2 and node_east.param2 == 0))
then
minetest.swap_node(pos, {name=corner_2, param2=1})
end
if ((node_east.name == roof and node_east.param2 == 0)
or (node_east.name == corner_2 and node_east.param2 == 3))
and ((node_south.name == roof and node_south.param2 == 3)
or (node_south.name == corner_2 and node_south.param2 == 1))
then
minetest.swap_node(pos, {name=corner_2, param2=2})
end
if ((node_south.name == roof and node_south.param2 == 1)
or (node_south.name == corner_2 and node_south.param2 == 0))
and ((node_west.name == roof and node_west.param2 == 0)
or (node_west.name == corner_2 and node_west.param2 == 2))
then
minetest.swap_node(pos, {name=corner_2, param2=3})
end
end,
})
-- MM: The following stuff is just for testing purposes for now; no generating of roots.
-- I'm not satisfied with this; they should be either bigger or a different drawtype.
-----------------------------------------------------------------------------------------------
-- RooTS
-----------------------------------------------------------------------------------------------
local roots_cube = {-2/16, -1/2, -3/16, 2/16, 1/16, 1/2}
local roots_sheet = {0, -1/2, -1/2, 0, 1/16, 1/2}
local TRuNKS = {
-- MoD TRuNK
{"default", "tree" },
{"default", "jungletree" },
{"default", "pine_tree" },
{"trees", "tree_conifer" },
{"trees", "tree_mangrove" },
{"trees", "tree_palm" },
{"moretrees", "apple_tree_trunk" },
{"moretrees", "beech_trunk" },
{"moretrees", "birch_trunk" },
{"moretrees", "fir_trunk" },
{"moretrees", "oak_trunk" },
{"moretrees", "palm_trunk" },
{"moretrees", "rubber_tree_trunk" },
{"moretrees", "rubber_tree_trunk_empty" },
{"moretrees", "sequoia_trunk" },
{"moretrees", "spruce_trunk" },
{"moretrees", "willow_trunk" },
}
for i in pairs(TRuNKS) do
local MoD = TRuNKS[i][1]
local TRuNK = TRuNKS[i][2]
if minetest.get_modpath(MoD) ~= nil then
local node = minetest.registered_nodes[MoD..":"..TRuNK]
if node then
local des = node.description
minetest.register_node("trunks:"..TRuNK.."root", {
description = S("@1 Root", des),
paramtype = "light",
paramtype2 = "facedir",
tiles = {
--[[top]] MoD.."_"..TRuNK..".png",
--[[bottom]] MoD.."_"..TRuNK..".png",
--[[right]] MoD.."_"..TRuNK..".png^trunks_root_mask.png^[makealpha:0,0,0",
--[[left]] MoD.."_"..TRuNK..".png^trunks_root_mask.png^[transformFX^[makealpha:0,0,0",
--[[back]] MoD.."_"..TRuNK..".png",
--[[front]] MoD.."_"..TRuNK..".png"
},
use_texture_alpha = "clip",
drawtype = "nodebox",
selection_box = {type = "fixed", fixed = roots_cube},
node_box = {type = "fixed", fixed = roots_sheet},
groups = {
tree=1,
snappy=1,
choppy=2,
oddly_breakable_by_hand=1,
flammable=2,
attached_node = 1
--not_in_creative_inventory=1 -- atm in inv for testing
},
is_ground_content = false,
--drop = "trunks:twig_1", -- not sure about this yet
sounds = default.node_sound_wood_defaults(),
})
else
minetest.log("error", string.format("[Trunks] warning: tree type '%s:%s' not found", MoD, TRuNK))
end
end
end
minetest.register_alias("trunks:pine_trunkroot", "trunks:pine_treeroot")
-- convert moss to wallmounted mode so that attached_node works properly.
local fdirtowall = {
[0] = 1,
[1] = 5,
[2] = 4,
[3] = 3,
[4] = 2,
}
minetest.register_lbm({
name = "trunks:convert_moss_wallmounted",
label = "Convert moss to wallmounted mode",
run_at_every_load = true,
nodenames = {"trunks:moss", "trunks:moss_fungus"},
action = function(pos, node)
local basedir = math.floor(node.param2 / 4)
local rot = node.param2 % 4
local newname = node.name == "trunks:moss_fungus" and "trunks:moss_with_fungus" or "trunks:moss_plain"
minetest.set_node(pos, {name = newname.."_"..rot, param2 = fdirtowall[basedir] })
end
})