334 lines
8.9 KiB
Lua
Executable File
334 lines
8.9 KiB
Lua
Executable File
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 = 6},
|
|
{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},
|
|
})
|
|
|
|
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_craft({
|
|
output = "ethereal:redwood_wood 4",
|
|
recipe = {{"ethereal:redwood_trunk"}},
|
|
})
|
|
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,
|
|
})
|
|
|
|
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"
|
|
}
|
|
|
|
for i = 1,17 do
|
|
local leaves = leaves[i]
|
|
minetest.override_item(leaves, {
|
|
walkable = false,
|
|
climbable = true
|
|
})
|
|
end
|
|
|
|
minetest.register_node(":nether_mobs:permanent_dragon_fire", {
|
|
description = "Permanent nether dragon fire",
|
|
drawtype = "firelike",
|
|
tiles = {{
|
|
name = "nether_dragon_fire_animated.png",
|
|
animation = {type = "vertical_frames",
|
|
aspect_w = 16, aspect_h = 16, length = 1},
|
|
}},
|
|
inventory_image = "nether_dragon_fire.png",
|
|
light_source = 15,
|
|
groups = {snappy=1},
|
|
walkable = false,
|
|
buildable_to = false,
|
|
damage_per_second = 4,
|
|
})
|
|
|
|
minetest.override_item("nether_mobs:dragon_scale_block", {
|
|
after_destruct = function(pos)
|
|
pos.y = pos.y + 1
|
|
if minetest.get_node(pos).name == "nether_mobs:permanent_dragon_fire" then
|
|
minetest.remove_node(pos)
|
|
end
|
|
end,
|
|
on_ignite = function(pos)
|
|
local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
if minetest.get_node(flame_pos).name == "air" then
|
|
minetest.set_node(flame_pos, {name = "nether_mobs:permanent_dragon_fire"})
|
|
end
|
|
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(),
|
|
})
|