Compare commits
5 Commits
cb6fd7c2a0
...
dac9c4b624
Author | SHA1 | Date |
---|---|---|
BlockMen | dac9c4b624 | |
BlockMen | 26d6b4c183 | |
BlockMen | 39a4452317 | |
BlockMen | 6887def4e2 | |
BlockMen | 673527fd2b |
61
init.lua
61
init.lua
|
@ -4,21 +4,31 @@ minetest.register_node("landscape:full_grass_block", {
|
|||
description = "Dirt with Grass",
|
||||
tiles = {"default_grass.png"},
|
||||
is_ground_content = true,
|
||||
groups = {crumbly=3},
|
||||
groups = {crumbly=3, not_in_creative=1},
|
||||
drop = 'default:dirt',
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name="default_grass_footstep", gain=0.4},
|
||||
}),
|
||||
})
|
||||
|
||||
function check_reg(set, key)
|
||||
return set[key] ~= nil
|
||||
end
|
||||
|
||||
local function get_type(pos) --1 for left, 2 for right, 3 for behind, 4 for front
|
||||
if minetest.registered_nodes[minetest.env:get_node({x=pos.x+1, y=pos.y, z=pos.z}).name].walkable == false then
|
||||
local l1 = minetest.env:get_node({x=pos.x+1, y=pos.y, z=pos.z}).name
|
||||
local l2 = minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z+1}).name
|
||||
local r1 = minetest.env:get_node({x=pos.x-1, y=pos.y, z=pos.z}).name
|
||||
local r2 = minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z-1}).name
|
||||
if l1 == nil or l2 == nil or r1 == nil or r2 == nil then return end
|
||||
if not check_reg(minetest.registered_nodes, l1) or not check_reg(minetest.registered_nodes, r1) or not check_reg(minetest.registered_nodes, l2) or not check_reg(minetest.registered_nodes, r2) then return end
|
||||
if l1 == "air" or not minetest.registered_nodes[l1].walkable then
|
||||
return 1
|
||||
elseif minetest.registered_nodes[minetest.env:get_node({x=pos.x-1, y=pos.y, z=pos.z}).name].walkable == false then
|
||||
elseif r1 == "air" or not minetest.registered_nodes[r1].walkable then
|
||||
return 2
|
||||
elseif minetest.registered_nodes[minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z+1}).name].walkable == false then
|
||||
elseif l2 == "air" or not minetest.registered_nodes[l2].walkable then
|
||||
return 3
|
||||
elseif minetest.registered_nodes[minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z-1}).name].walkable == false then
|
||||
elseif r2 == "air" or not minetest.registered_nodes[r2].walkable then
|
||||
return 4
|
||||
else
|
||||
return 0
|
||||
|
@ -26,17 +36,19 @@ local function get_type(pos) --1 for left, 2 for right, 3 for behind, 4 for fro
|
|||
end
|
||||
|
||||
local function is_edge(pos)
|
||||
local l1 = {x=pos.x-1, y=pos.y, z=pos.z}
|
||||
local l2 = {x=pos.x, y=pos.y, z=pos.z-1}
|
||||
local r1 = {x=pos.x+1, y=pos.y, z=pos.z}
|
||||
local r2 = {x=pos.x, y=pos.y, z=pos.z+1}
|
||||
if minetest.registered_nodes[minetest.env:get_node(l1).name].walkable == false or
|
||||
minetest.registered_nodes[minetest.env:get_node(l2).name].walkable == false or
|
||||
minetest.registered_nodes[minetest.env:get_node(r1).name].walkable == false or
|
||||
minetest.registered_nodes[minetest.env:get_node(r2).name].walkable == false then
|
||||
local l1 = minetest.env:get_node({x=pos.x-1, y=pos.y, z=pos.z}).name
|
||||
local l2 = minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z-1}).name
|
||||
local r1 = minetest.env:get_node({x=pos.x+1, y=pos.y, z=pos.z}).name
|
||||
local r2 = minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z+1}).name
|
||||
if l1 == nil or l2 == nil or r1 == nil or r2 == nil then return end
|
||||
if not check_reg(minetest.registered_nodes, l1) or not check_reg(minetest.registered_nodes, r1) or not check_reg(minetest.registered_nodes, l2) or not check_reg(minetest.registered_nodes, r2) then return end
|
||||
if l1 == "air" or not minetest.registered_nodes[l1] or
|
||||
l2 == "air" or not minetest.registered_nodes[l2].walkable or
|
||||
l3 == "air" or not minetest.registered_nodes[r1].walkable or
|
||||
l4 == "air" or not minetest.registered_nodes[r2].walkable then
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
local function check(pos)
|
||||
|
@ -61,7 +73,10 @@ if remove_full_grass == false then
|
|||
local under_front2 = {x=pos.x, y=pos.y-1, z=pos.z+1}
|
||||
local under_back = {x=pos.x-1, y=pos.y-1, z=pos.z}
|
||||
local under_back2 = {x=pos.x, y=pos.y-1, z=pos.z-1}
|
||||
if minetest.registered_nodes[minetest.env:get_node(above).name].walkable == false then
|
||||
local n = minetest.env:get_node(above).name
|
||||
if n == nil then return end
|
||||
if not check_reg(minetest.registered_nodes, n) then return end
|
||||
if n == "air" or not minetest.registered_nodes[n].walkable then
|
||||
if get_type(pos) ~= 0 then
|
||||
local typ = get_type(pos)
|
||||
local ok = false
|
||||
|
@ -78,17 +93,15 @@ if remove_full_grass == false then
|
|||
if minetest.env:get_node(under).name == "default:dirt" then
|
||||
if not is_edge(under) then
|
||||
--IF GRAS UNTEN-DAVOR tthen....
|
||||
local tmp_node3 = {name="landscape:full_grass_block"}
|
||||
minetest.env:set_node(pos, tmp_node3)
|
||||
minetest.env:set_node(pos, {name="landscape:full_grass_block"})
|
||||
end
|
||||
else
|
||||
local tmp_node3 = {name="landscape:full_grass_block"}
|
||||
minetest.env:set_node(pos, tmp_node3)
|
||||
minetest.env:set_node(pos, {name="landscape:full_grass_block"})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
})
|
||||
|
||||
|
@ -98,9 +111,11 @@ if remove_full_grass == false then
|
|||
interval = 2.0,
|
||||
chance = 20,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
if minetest.registered_nodes[minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}).name].walkable == true then
|
||||
local tmp_node3 = {name="default:dirt"}
|
||||
minetest.env:set_node(pos, tmp_node3)
|
||||
local n = minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}).name
|
||||
if n == nil then return end
|
||||
if not check_reg(minetest.registered_nodes, n) then return end
|
||||
if n ~= "air" or minetest.registered_nodes[n].walkable then
|
||||
minetest.env:set_node(pos, {name="default:dirt"})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue