aestivalserver-mods/illuna_aestival/src/nodes.lua

369 lines
9.9 KiB
Lua
Executable File

-- overrides inspired by https://github.com/ThorfinnS/xocean/commit/f8627aa49abc76f271a9711d9647b0336cf0e8dd
minetest.override_item("xocean:horn", {
drop = "xocean:horn",
after_destruct = function(pos, oldnode)
minetest.set_node(pos, {name = "default:coral_brown"})
end,
})
minetest.override_item("xocean:skeleton_horn", {
drop = "xocean:skeleton_horn",
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" or not placer then
return itemstack
end
local player_name = placer:get_player_name()
local pos_under = pointed_thing.under
local pos_above = pointed_thing.above
if minetest.get_node(pos_under).name ~= "default:coral_skeleton" or
minetest.get_node(pos_above).name ~= "default:water_source" then
return itemstack
end
if minetest.is_protected(pos_under, player_name) or
minetest.is_protected(pos_above, player_name) then
minetest.chat_send_player(player_name, "Node is protected")
minetest.record_protection_violation(pos_under, player_name)
return itemstack
end
minetest.set_node(pos_under, {name = "xocean:skeleton_horn"})
if not (creative and creative.is_enabled_for(player_name)) then
itemstack:take_item()
end
return itemstack
end,
after_destruct = function(pos, oldnode)
minetest.set_node(pos, {name = "default:coral_skeleton"})
end,
})
minetest.register_node(":illuna_ethereal:douglasie_leaves", {
description = "Douglasie Leaves",
drawtype = "allfaces_optional",
visual_scale = 1,
waving = 1,
tiles = {"douglasie_leaves.png"},
drop = {
max_items = 1,
items = {
{items = {"illuna_ethereal:douglasie_sapling"}, rarity = 25},
{items = {"illuna_ethereal:douglasie_leaves"}},
}
},
paramtype = "light",
is_ground_content = false,
walkable = false,
climbable = true,
groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves
})
minetest.register_node(":illuna_ethereal:douglasie_trunk", {
description = "Douglasie Trunk",
tiles = {"douglasie_trunk_top.png", "douglasie_trunk_top.png", "douglasie_trunk.png"},
is_ground_content = false,
paramtype2 = "facedir",
on_place = minetest.rotate_node,
groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}
})
minetest.register_node(":illuna_ethereal:douglasie_wood", {
description = "Douglasie Wood Planks",
tiles = {"douglasie_wood.png"},
is_ground_content = false,
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1},
})
default.register_leafdecay({
trunks = {"illuna_ethereal:douglasie_trunk"},
leaves = {"illuna_ethereal:douglasie_leaves"},
radius = 3
})
minetest.override_item("default:dirt_with_grass", {groups = {crumbly = 3, soil = 1, grass = 1}})
local dirts = {
"Mesa", "Grove", "Jungle"
}
for n = 1, #dirts do
local desc = dirts[n]
local name = desc:lower()
minetest.register_node(":ethereal:"..name.."_dirt", {
description = desc.." Dirt",
tiles = {
"ethereal_grass_"..name.."_top.png",
"default_dirt.png",
"default_dirt.png^ethereal_grass_"..name.."_side.png"
},
is_ground_content = true,
groups = {crumbly = 3, soil = 1, ethereal_grass = 1},
soil = {
base = "ethereal:"..name.."_dirt",
dry = "farming:soil",
wet = "farming:soil_wet"
},
drop = "default:dirt",
sounds = default.node_sound_dirt_defaults({
footstep = {name = "default_grass_footstep", gain = 0.25},
}),
})
end
dirts = { "ethereal:jungle_dirt", "ethereal:grove_dirt", "default:dirt_with_dry_grass", "default:dirt_with_grass", "ethereal:mesa_dirt" }
-- check surrounding grass and change dirt to same colour
local grass_spread = function(pos, node)
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
-- not enough light
if (minetest.get_node_light(above) or 0) < 13 then
return
end
local name = minetest.get_node(above).name
local def = minetest.registered_nodes[name]
-- water above grass
if name == "ignore" or not def or def.liquidtype ~= "none" then
return
end
local curr_max, curr_type, num = 0, ""
-- find all default and ethereal grasses in area around dirt
local positions, grasses = minetest.find_nodes_in_area(
{x = pos.x - 1, y = pos.y - 2, z = pos.z - 1},
{x = pos.x + 1, y = pos.y + 2, z = pos.z + 1}, dirts)
-- count new grass nodes
for n = 1, #dirts do
num = grasses[ dirts[n] ] or 0
if num > curr_max then
curr_max = num
curr_type = dirts[n]
end
end
-- no grass nearby, keep as dirt
if curr_type == "" then
return
end
minetest.swap_node(pos, {name = curr_type})
end
-- any grass with a block above will turn into dirt
local grass_devoid = function(pos, node)
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
local name = minetest.get_node(above).name
local nodedef = minetest.registered_nodes[name]
if name ~= "ignore" and nodedef and not ((nodedef.sunlight_propagates or
nodedef.paramtype == "light") and
nodedef.liquidtype == "none") then
minetest.swap_node(pos, {name = "default:dirt"})
end
end
-- redwood trunk
minetest.register_node(":ethereal:redwood_trunk", {
description = "Redwood Trunk",
tiles = {
"redwood_trunk_top.png",
"redwood_trunk_top.png",
"redwood_trunk.png"
},
groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
sounds = default.node_sound_wood_defaults(),
paramtype2 = "facedir",
on_place = minetest.rotate_node,
})
-- redwood wood
minetest.register_node(":ethereal:redwood_wood", {
description = "Redwood Wood",
tiles = {"redwood_wood.png"},
is_ground_content = false,
groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node(":ethereal:redwood_leaves", {
description = "Redwood Leaves",
tiles = {"redwood_leaves.png"},
inventory_image = "redwood_leaves.png",
wield_image = "redwood_leaves.png",
drawtype = "allfaces_optional",
visual_scale = 1,
paramtype = "light",
walkable = false,
climbable = true,
waving = 1,
groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2},
drop = {
max_items = 1,
items = {
{items = {"ethereal:redwood_sapling"}, rarity = 50},
{items = {"default:stick"}, rarity = 30},
{items = {"ethereal:redwood_leaves"}}
}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves,
})
default.register_leafdecay({
trunks = {"ethereal:redwood_trunk"},
leaves = {"ethereal:redwood_leaves"},
radius = 3
})
minetest.override_item("default:lava_source", {
on_construct = function(pos)
if pos.y >= 0 then
minetest.env:remove_node(pos)
end
end
})
minetest.override_item("default:water_source", {
on_construct = function(pos)
if (pos.y <= -4900 and pos.y >= -11000) then
minetest.env:remove_node(pos)
end
end
})
minetest.override_item("default:river_water_source", {
on_construct = function(pos)
if (pos.y <= -4900 and pos.y >= -11000) then
minetest.env:remove_node(pos)
end
end
})
local leaves = {
"default:leaves",
"default:jungleleaves",
"default:pine_needles",
"default:acacia_leaves",
"default:aspen_leaves",
"moretrees:apple_tree_leaves",
"moretrees:apple_blossoms",
"moretrees:beech_leaves",
"moretrees:oak_leaves",
"moretrees:sequoia_leaves",
"moretrees:birch_leaves",
"moretrees:spruce_leaves",
"moretrees:cedar_leaves",
"moretrees:poplar_leaves",
"moretrees:willow_leaves",
"moretrees:rubber_tree_leaves",
"moretrees:fir_leaves",
"moretrees:fir_leaves_bright",
"moretrees:jungletree_leaves_red",
"moretrees:jungletree_leaves_yellow",
"cloudlands:leaves",
"cloudlands:leaves2",
"cloudlands:leaves3",
"cloudlands:blossom_white1",
"cloudlands:blossom_white2",
"cloudlands:blossom_whitepink",
"cloudlands:blossom_whitepink_glow",
"cloudlands:blossom_red",
"cloudlands:blossom_red_glow",
"cloudlands:blossom_pink",
"cloudlands:blossom_wisteria1",
"cloudlands:blossom_wisteria2",
"cloudlands:blossom_wisteria2_glow"
}
for i = 1,33 do
local leaves = leaves[i]
minetest.override_item(leaves, {
walkable = false,
climbable = true
})
end
illuna = {}
function illuna.wikiconstruct(pos)
local meta = minetest.get_meta(pos)
minetest.add_entity({x=pos.x, y=pos.y+0.96, z=pos.z}, "illuna:wikitop")
local timer = minetest.get_node_timer(pos)
timer:start(5.0)
end
function illuna.wikidestruct(pos)
for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0.96)) do
if obj and obj:get_luaentity() and
obj:get_luaentity().name == "illuna:wikitop" then
obj:remove()
break
end
end
end
minetest.override_item("wiki:wiki", {
tiles= {
"illuna_wiki_top.png",
"illuna_wiki_bottom.png",
"illuna_wiki_side.png",
"illuna_wiki_side.png",
"illuna_wiki_side.png",
"illuna_wiki_side.png",
},
on_construct = illuna.wikiconstruct,
on_destruct = illuna.wikidestruct,
light_source = 3,
})
minetest.register_entity(":illuna:wikitop", {
visual = "wielditem",
visual_size = {x=0.4, y=0.4},
collisionbox = {0},
physical = false,
automatic_rotate = math.pi * 0.15,
nametag = "Illuna Wiki",
nametag_color = "#6893c4",
textures = {"illuna:wikitop"},
glow = 6,
on_activate = function(self)
local pos = self.object:getpos()
local pos_under = {x=pos.x, y=pos.y-1, z=pos.z}
if minetest.get_node(pos_under).name ~= "wiki:wiki" then
self.object:remove()
end
end
})
minetest.register_craftitem(":illuna:wikitop", {
inventory_image = "illuna_wikitop.png",
})
minetest.register_node(":illuna:astroportal_block", {
description = "Ancient Astro Portal Block",
tiles = {"illuna_astroportal_block.png"},
is_ground_content = false,
groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_alias("wardrobe:wardrobe", "homedecor:wardrobe")
minetest.register_alias("colored_eggs:node", "mobs:egg")