change nether trees
195
nether/init.lua
@ -296,6 +296,23 @@ NETHER_PORTAL = {
|
|||||||
|
|
||||||
--== END OF EDITABLE OPTIONS ==--
|
--== END OF EDITABLE OPTIONS ==--
|
||||||
|
|
||||||
|
local function r_area(manip, width, height, pos)
|
||||||
|
local emerged_pos1, emerged_pos2 = manip:read_from_map(
|
||||||
|
{x=pos.x-width, y=pos.y, z=pos.z-width},
|
||||||
|
{x=pos.x+width, y=pos.y+height, z=pos.z+width}
|
||||||
|
)
|
||||||
|
return VoxelArea:new({MinEdge=emerged_pos1, MaxEdge=emerged_pos2})
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_vm_data(manip, nodes, pos, t1, name)
|
||||||
|
manip:set_data(nodes)
|
||||||
|
manip:write_to_map()
|
||||||
|
print(string.format("[nether] "..name.." grew at ("..pos.x.."|"..pos.y.."|"..pos.z..") after ca. %.2fs", os.clock() - t1))
|
||||||
|
local t1 = os.clock()
|
||||||
|
manip:update_map()
|
||||||
|
print(string.format("[nether] map updated after ca. %.2fs", os.clock() - t1))
|
||||||
|
end
|
||||||
|
|
||||||
-- Generated variables
|
-- Generated variables
|
||||||
NETHER_BOTTOM = (NETHER_DEPTH - NETHER_HEIGHT)
|
NETHER_BOTTOM = (NETHER_DEPTH - NETHER_HEIGHT)
|
||||||
NETHER_ROOF_ABS = (NETHER_DEPTH - NETHER_RANDOM)
|
NETHER_ROOF_ABS = (NETHER_DEPTH - NETHER_RANDOM)
|
||||||
@ -372,7 +389,7 @@ function nether:inside_nether(pos)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Nether Lava
|
--[[ Nether Lava
|
||||||
minetest.register_node("nether:lava_flowing", {
|
minetest.register_node("nether:lava_flowing", {
|
||||||
description = "Nether Lava (flowing)",
|
description = "Nether Lava (flowing)",
|
||||||
inventory_image = minetest.inventorycube("default_lava.png"),
|
inventory_image = minetest.inventorycube("default_lava.png"),
|
||||||
@ -419,22 +436,43 @@ minetest.register_node("nether:lava_source", {
|
|||||||
{image="default_lava.png", backface_culling=false},
|
{image="default_lava.png", backface_culling=false},
|
||||||
},
|
},
|
||||||
groups = {lava=3, liquid=2, hot=3},
|
groups = {lava=3, liquid=2, hot=3},
|
||||||
})
|
})]]
|
||||||
|
|
||||||
-- Netherrack
|
-- Netherrack
|
||||||
minetest.register_node("nether:netherrack", {
|
minetest.register_node("nether:netherrack", {
|
||||||
description = "Netherrack",
|
description = "Netherrack",
|
||||||
tiles = {"nether_netherrack.png"},
|
tiles = {"nether_netherrack.png"},
|
||||||
groups = {cracky=3, oddly_breakable_by_hand=3},
|
groups = {cracky=3, oddly_breakable_by_hand=3},
|
||||||
drop = "nether:netherrack",
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Netherbrick
|
||||||
|
minetest.register_node("nether:netherrack_brick", {
|
||||||
|
description = "Netherrack Brick",
|
||||||
|
tiles = {"nether_netherrack.png^nether_brick_shadow.png"},
|
||||||
|
groups = {cracky=3, oddly_breakable_by_hand=3},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Nether tree
|
-- Nether tree
|
||||||
minetest.register_node("nether:tree", {
|
minetest.register_node("nether:blood", {
|
||||||
description = "Nether Tree",
|
description = "Nether Blood",
|
||||||
tiles = {"nether_tree_top.png", "nether_tree_top.png", "nether_tree.png"},
|
tiles = {"nether_blood.png"},
|
||||||
groups = {tree=1, snappy=2, choppy=2, oddly_breakable_by_hand=1},
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=1},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("nether:blood_top", {
|
||||||
|
description = "Nether Blood",
|
||||||
|
tiles = {"nether_blood_top.png", "nether_blood.png", "nether_blood.png^nether_blood_side.png"},
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=1},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("nether:blood_stem", {
|
||||||
|
description = "Nether Blood Stem",
|
||||||
|
tiles = {"nether_blood_stem_top.png", "nether_blood_stem_top.png", "nether_blood_stem.png"},
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=1},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -453,7 +491,6 @@ minetest.register_node("nether:leaves", {
|
|||||||
minetest.register_node("nether:apple", {
|
minetest.register_node("nether:apple", {
|
||||||
description = "Nether Apple",
|
description = "Nether Apple",
|
||||||
drawtype = "plantlike",
|
drawtype = "plantlike",
|
||||||
visual_scale = 1.0,
|
|
||||||
tiles = {"nether_apple.png"},
|
tiles = {"nether_apple.png"},
|
||||||
inventory_image = "nether_apple.png",
|
inventory_image = "nether_apple.png",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
@ -479,8 +516,8 @@ minetest.register_node("nether:vine", {
|
|||||||
after_dig_node = function(pos)
|
after_dig_node = function(pos)
|
||||||
local p = {x=pos.x, y=pos.y-1, z=pos.z}
|
local p = {x=pos.x, y=pos.y-1, z=pos.z}
|
||||||
local vine = "nether:vine"
|
local vine = "nether:vine"
|
||||||
while minetest.env:get_node(p).name == vine do
|
while minetest.get_node(p).name == vine do
|
||||||
minetest.env:remove_node(p)
|
minetest.remove_node(p)
|
||||||
p.y = p.y-1
|
p.y = p.y-1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -670,7 +707,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||||||
-- Notice I did not put a -1 for the beginning. This is because we don't want the throne to float
|
-- Notice I did not put a -1 for the beginning. This is because we don't want the throne to float
|
||||||
for y=HADES_THRONE_STARTPOS_ABS.y, (HADES_THRONE_ENDPOS_ABS.y + 1), 1 do
|
for y=HADES_THRONE_STARTPOS_ABS.y, (HADES_THRONE_ENDPOS_ABS.y + 1), 1 do
|
||||||
addpos = {x=x, y=y, z=z}
|
addpos = {x=x, y=y, z=z}
|
||||||
minetest.env:add_node(addpos, {name="air"})
|
minetest.add_node(addpos, {name="air"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -681,7 +718,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||||||
nether:save_portal_from_nether(v.pos)
|
nether:save_portal_from_nether(v.pos)
|
||||||
nether:createportal(v.pos)
|
nether:createportal(v.pos)
|
||||||
else
|
else
|
||||||
minetest.env:add_node(v.pos, {name=v.block})
|
minetest.add_node(v.pos, {name=v.block})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
nether:touch(HADES_THRONE_GENERATED)
|
nether:touch(HADES_THRONE_GENERATED)
|
||||||
@ -734,7 +771,7 @@ end)]]
|
|||||||
|
|
||||||
-- Return the name of the node below a position
|
-- Return the name of the node below a position
|
||||||
function nether:nodebelow(pos)
|
function nether:nodebelow(pos)
|
||||||
return minetest.env:get_node({x=pos.x, y=(pos.y-1), z=pos.z}).name
|
return minetest.get_node({x=pos.x, y=(pos.y-1), z=pos.z}).name
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Check if we can add a "sticky" node (i.e. it has to stick to something else, or else it won't be added)
|
-- Check if we can add a "sticky" node (i.e. it has to stick to something else, or else it won't be added)
|
||||||
@ -745,7 +782,7 @@ function nether:can_add_sticky_node(pos)
|
|||||||
for y = -1, 1 do
|
for y = -1, 1 do
|
||||||
for z = -1, 1 do
|
for z = -1, 1 do
|
||||||
local p = {x=pos.x+x, y=pos.y+y, z=pos.z+z}
|
local p = {x=pos.x+x, y=pos.y+y, z=pos.z+z}
|
||||||
local n = minetest.env:get_node(p)
|
local n = minetest.get_node(p)
|
||||||
objname = n.name
|
objname = n.name
|
||||||
if minetest.registered_nodes[objname].walkable == true then
|
if minetest.registered_nodes[objname].walkable == true then
|
||||||
return true
|
return true
|
||||||
@ -759,21 +796,73 @@ end
|
|||||||
-- Add a "sticky" node
|
-- Add a "sticky" node
|
||||||
function nether:add_sticky_node(pos, opts)
|
function nether:add_sticky_node(pos, opts)
|
||||||
if nether:can_add_sticky_node(pos) == true then
|
if nether:can_add_sticky_node(pos) == true then
|
||||||
minetest.env:add_node(pos, opts)
|
minetest.add_node(pos, opts)
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Create a nether tree
|
|
||||||
|
local nether_c_blood = minetest.get_content_id("nether:blood")
|
||||||
|
local nether_c_blood_top = minetest.get_content_id("nether:blood_top")
|
||||||
|
local nether_c_blood_stem = minetest.get_content_id("nether:blood_stem")
|
||||||
|
local nether_c_apple = minetest.get_content_id("default:apple")
|
||||||
|
local nether_c_nether_apple = minetest.get_content_id("nether:apple")
|
||||||
|
|
||||||
|
function nether:grow_nethertree(pos)
|
||||||
|
local t1 = os.clock()
|
||||||
|
local height = 6
|
||||||
|
local manip = minetest.get_voxel_manip()
|
||||||
|
local area = r_area(manip, 2, height, pos)
|
||||||
|
local nodes = manip:get_data()
|
||||||
|
|
||||||
|
for i = 0, height-1 do
|
||||||
|
nodes[area:index(pos.x, pos.y+i, pos.z)] = nether_c_blood_stem
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = -1,1 do
|
||||||
|
for j = -1,1 do
|
||||||
|
nodes[area:index(pos.x+i, pos.y+height, pos.z+j)] = nether_c_blood_top
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for k = -1, 1, 2 do
|
||||||
|
for l = -2+1, 2 do
|
||||||
|
local p1 = {pos.x+2*k, pos.y+height, pos.z-l*k}
|
||||||
|
local p2 = {pos.x+l*k, pos.y+height, pos.z+2*k}
|
||||||
|
local udat = nether_c_blood_top
|
||||||
|
if math.random(2) == 1 then
|
||||||
|
nodes[area:index(p1[1], p1[2], p1[3])] = nether_c_blood_top
|
||||||
|
nodes[area:index(p2[1], p2[2], p2[3])] = nether_c_blood_top
|
||||||
|
udat = nether_c_blood
|
||||||
|
end
|
||||||
|
nodes[area:index(p1[1], p1[2]-1, p1[3])] = udat
|
||||||
|
nodes[area:index(p2[1], p2[2]-1, p2[3])] = udat
|
||||||
|
end
|
||||||
|
for l = 0, 1 do
|
||||||
|
for _,p in ipairs({
|
||||||
|
{pos.x+k, pos.y+height-1, pos.z-l*k},
|
||||||
|
{pos.x+l*k, pos.y+height-1, pos.z+k},
|
||||||
|
}) do
|
||||||
|
if math.random(2) == 1 then
|
||||||
|
nodes[area:index(p[1], p[2], p[3])] = nether_c_nether_apple
|
||||||
|
elseif math.random(10) == 1 then
|
||||||
|
nodes[area:index(p[1], p[2], p[3])] = nether_c_apple
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
set_vm_data(manip, nodes, pos, t1, "blood")
|
||||||
|
end
|
||||||
|
--[[ Create a nether tree
|
||||||
function nether:grow_nethertree(pos)
|
function nether:grow_nethertree(pos)
|
||||||
--TRUNK
|
--TRUNK
|
||||||
pos.y=pos.y+1
|
pos.y=pos.y+1
|
||||||
local trunkpos={x=pos.x, z=pos.z}
|
local trunkpos={x=pos.x, z=pos.z}
|
||||||
for y=pos.y, pos.y+4+math.random(2) do
|
for y=pos.y, pos.y+4+math.random(2) do
|
||||||
trunkpos.y=y
|
trunkpos.y=y
|
||||||
minetest.env:add_node(trunkpos, {name="nether:tree"})
|
minetest.add_node(trunkpos, {name="nether:tree"})
|
||||||
end
|
end
|
||||||
--LEAVES
|
--LEAVES
|
||||||
local leafpos={}
|
local leafpos={}
|
||||||
@ -785,22 +874,22 @@ function nether:grow_nethertree(pos)
|
|||||||
+(z-trunkpos.z)*(z-trunkpos.z)
|
+(z-trunkpos.z)*(z-trunkpos.z)
|
||||||
<= NETHER_TREESIZE*NETHER_TREESIZE + NETHER_TREESIZE then
|
<= NETHER_TREESIZE*NETHER_TREESIZE + NETHER_TREESIZE then
|
||||||
leafpos={x=x, y=y, z=z}
|
leafpos={x=x, y=y, z=z}
|
||||||
if minetest.env:get_node(leafpos).name=="air" then
|
if minetest.get_node(leafpos).name=="air" then
|
||||||
if math.random(NETHER_APPLE_FREQ) == 1 then
|
if math.random(NETHER_APPLE_FREQ) == 1 then
|
||||||
if math.random(NETHER_HEAL_APPLE_FREQ) == 1 then
|
if math.random(NETHER_HEAL_APPLE_FREQ) == 1 then
|
||||||
minetest.env:add_node(leafpos, {name="default:apple"})
|
minetest.add_node(leafpos, {name="default:apple"})
|
||||||
else
|
else
|
||||||
minetest.env:add_node(leafpos, {name="nether:apple"})
|
minetest.add_node(leafpos, {name="nether:apple"})
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
minetest.env:add_node(leafpos, {name="nether:leaves"})
|
minetest.add_node(leafpos, {name="nether:leaves"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end]]
|
||||||
|
|
||||||
-- == PORTAL RELATED STUFF ==
|
-- == PORTAL RELATED STUFF ==
|
||||||
NETHER_PORTALS_TO_NETHER = {}
|
NETHER_PORTALS_TO_NETHER = {}
|
||||||
@ -1028,7 +1117,7 @@ function nether:createportal(pos)
|
|||||||
curry = v.pos.y + pos.y
|
curry = v.pos.y + pos.y
|
||||||
currz = v.pos.z + pos.z
|
currz = v.pos.z + pos.z
|
||||||
currpos = {x=currx, y=curry, z=currz}
|
currpos = {x=currx, y=curry, z=currz}
|
||||||
minetest.env:add_node(currpos, {name=v.block})
|
minetest.add_node(currpos, {name=v.block})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1054,7 +1143,7 @@ end)
|
|||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
nodenames = "nether:portal_creator",
|
nodenames = "nether:portal_creator",
|
||||||
interval = 1.0,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos)
|
action = function(pos)
|
||||||
nether:createportal(pos)
|
nether:createportal(pos)
|
||||||
@ -1071,32 +1160,68 @@ minetest.register_node("nether:portal", {
|
|||||||
light_source = LIGHT_MAX - 2,
|
light_source = LIGHT_MAX - 2,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
|
use_texture_alpha = true,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
groups = {choppy=2,dig_immediate=3},
|
digable = false,
|
||||||
|
pointable = false,
|
||||||
legacy_wallmounted = false,
|
legacy_wallmounted = false,
|
||||||
buildable_to = true,
|
-- buildable_to = true,
|
||||||
post_effect_color = {a=64, r=150, g=100, b=200},
|
drop = "",
|
||||||
|
groups = {not_in_creative_inventory=1},
|
||||||
|
post_effect_color = {a=200, r=50, g=0, b=60},
|
||||||
metadata_name = "generic"
|
metadata_name = "generic"
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
nodenames = {"nether:portal"},
|
nodenames = {"nether:portal"},
|
||||||
interval = 1.0,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
local nodemeta = minetest.env:get_meta(pos)
|
minetest.add_particlespawner(
|
||||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
32, --amount
|
||||||
|
4, --time
|
||||||
|
{x=pos.x-0.47, y=pos.y-0.5, z=pos.z-1}, --minpos
|
||||||
|
{x=pos.x+0.47, y=pos.y+0.34, z=pos.z+1}, --maxpos
|
||||||
|
{x=0, y=1, z=0}, --minvel
|
||||||
|
{x=0, y=2, z=0}, --maxvel
|
||||||
|
{x=-0.5,y=-3,z=-0.3}, --minacc
|
||||||
|
{x=0.5,y=-0.4,z=0.3}, --maxacc
|
||||||
|
1, --minexptime
|
||||||
|
2, --maxexptime
|
||||||
|
0.4, --minsize
|
||||||
|
3, --maxsize
|
||||||
|
true, --collisiondetection
|
||||||
|
"nether_portal_particle.png" --texture
|
||||||
|
)
|
||||||
|
local objs = minetest.get_objects_inside_radius(pos, 1)
|
||||||
if objs[1] ~= nil then
|
if objs[1] ~= nil then
|
||||||
for k, obj in pairs(objs) do
|
local nodemeta = minetest.get_meta(pos)
|
||||||
|
for _,obj in pairs(objs) do
|
||||||
local objpos = obj:getpos()
|
local objpos = obj:getpos()
|
||||||
local objmeta = minetest.env:get_meta(objpos)
|
local objmeta = minetest.get_meta(objpos)
|
||||||
if objpos.y>pos.y-1 and objpos.y<pos.y and obj:get_player_name() ~= nil and obj:get_player_name() ~= "" then
|
local objplayername = obj:get_player_name()
|
||||||
|
if objpos.y > pos.y-1
|
||||||
|
and objpos.y < pos.y
|
||||||
|
and objplayername ~= nil
|
||||||
|
and objplayername ~= "" then
|
||||||
local innether = nether:inside_nether(obj:getpos())
|
local innether = nether:inside_nether(obj:getpos())
|
||||||
if innether == true and (objmeta:get_string("teleportingfromnether") == "" or objmeta:get_string("teleportingfromnether") == nil) then
|
local objstring1 = objmeta:get_string("teleportingfromnether")
|
||||||
|
if innether
|
||||||
|
and (
|
||||||
|
objstring1 == ""
|
||||||
|
or objstring1 == nil
|
||||||
|
) then
|
||||||
objmeta:set_string("teleportingfromnether", "true")
|
objmeta:set_string("teleportingfromnether", "true")
|
||||||
objmeta:set_string("teleportingtonether", "")
|
objmeta:set_string("teleportingtonether", "")
|
||||||
nether:teleport_player(innether, obj)
|
nether:teleport_player(innether, obj)
|
||||||
elseif innether == false and (objmeta:get_string("teleportingtonether") == "" or objmeta:get_string("teleportingtonether") == nil) then
|
return
|
||||||
|
end
|
||||||
|
local objstring2 = objmeta:get_string("teleportingtonether")
|
||||||
|
if not innether
|
||||||
|
and (
|
||||||
|
objstring2 == ""
|
||||||
|
or objstring2 == nil
|
||||||
|
) then
|
||||||
objmeta:set_string("teleportingtonether", "true")
|
objmeta:set_string("teleportingtonether", "true")
|
||||||
objmeta:set_string("teleportingfromnether", "")
|
objmeta:set_string("teleportingfromnether", "")
|
||||||
nether:teleport_player(innether, obj)
|
nether:teleport_player(innether, obj)
|
||||||
|
BIN
nether/textures/nether_blood.png
Normal file
After Width: | Height: | Size: 448 B |
BIN
nether/textures/nether_blood_side.png
Normal file
After Width: | Height: | Size: 525 B |
BIN
nether/textures/nether_blood_stem.png
Normal file
After Width: | Height: | Size: 446 B |
BIN
nether/textures/nether_blood_stem_top.png
Normal file
After Width: | Height: | Size: 442 B |
BIN
nether/textures/nether_blood_top.png
Normal file
After Width: | Height: | Size: 463 B |
BIN
nether/textures/nether_brick_shadow.png
Normal file
After Width: | Height: | Size: 196 B |
BIN
nether/textures/nether_portal_particle.png
Normal file
After Width: | Height: | Size: 368 B |
Before Width: | Height: | Size: 497 B After Width: | Height: | Size: 678 B |