forked from VoxeLibre/VoxeLibre
Put height into placed, base, bamboo stalk nodes so that height checks work properly.
Fix placing bamboo on top of other bamboo nodes, when it would go above the decided height. It now stops just before the endcap node placement.
This commit is contained in:
parent
04efa74115
commit
b07e6fccdc
|
@ -136,23 +136,21 @@ local bamboo_def = {
|
||||||
mcl_bamboo.mcl_log("node name: " .. nodename .. "\nbamboo_node: " .. bamboo_node)
|
mcl_bamboo.mcl_log("node name: " .. nodename .. "\nbamboo_node: " .. bamboo_node)
|
||||||
-- intentional use of nodename.
|
-- intentional use of nodename.
|
||||||
|
|
||||||
|
local rand_height
|
||||||
|
local BAMBOO_MAX_HEIGHT = 16 -- maximum height of 16, per wiki.
|
||||||
|
local first_shoot
|
||||||
|
local meta
|
||||||
|
|
||||||
if bamboo_node ~= -1 then
|
if bamboo_node ~= -1 then
|
||||||
place_item = ItemStack(mcl_bamboo.bamboo_index[bamboo_node])
|
place_item = ItemStack(mcl_bamboo.bamboo_index[bamboo_node])
|
||||||
else
|
|
||||||
local placed_type = pr:next(1, 4) -- randomly choose which one to place.
|
|
||||||
mcl_bamboo.mcl_log("Place_Bamboo_Shoot--Type: " .. placed_type)
|
|
||||||
place_item = ItemStack(mcl_bamboo.bamboo_index[placed_type])
|
|
||||||
end
|
|
||||||
|
|
||||||
-- height check for placing bamboo nodes. because... lmfao bamboo stalk to the sky.
|
-- height check for placing bamboo nodes. because... lmfao bamboo stalk to the sky.
|
||||||
-- variables used in more than one spot.
|
-- variables used in more than one spot.
|
||||||
local first_shoot
|
|
||||||
local chk_pos
|
local chk_pos
|
||||||
local soil_pos
|
local soil_pos
|
||||||
local node_name = ""
|
local node_name = ""
|
||||||
local dist = 0
|
local dist = 0
|
||||||
local height = -1
|
local height = -1
|
||||||
local BAMBOO_MAX_HEIGHT = 16 -- base height check.
|
|
||||||
|
|
||||||
local BAMBOO_SOIL_DIST = BAMBOO_MAX_HEIGHT * -1
|
local BAMBOO_SOIL_DIST = BAMBOO_MAX_HEIGHT * -1
|
||||||
-- -------------------
|
-- -------------------
|
||||||
|
@ -160,7 +158,7 @@ local bamboo_def = {
|
||||||
chk_pos = vector.offset(pos, 0, py, 0)
|
chk_pos = vector.offset(pos, 0, py, 0)
|
||||||
node_name = minetest.get_node(chk_pos).name
|
node_name = minetest.get_node(chk_pos).name
|
||||||
if mcl_bamboo.is_dirt(node_name) then
|
if mcl_bamboo.is_dirt(node_name) then
|
||||||
soil_pos = chk_pos
|
first_shoot = vector.offset(chk_pos, 0, 1, 0)
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
if mcl_bamboo.is_bamboo(node_name) == false then
|
if mcl_bamboo.is_bamboo(node_name) == false then
|
||||||
|
@ -169,32 +167,49 @@ local bamboo_def = {
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- requires knowing where the soil node is.
|
-- requires knowing where the soil node is.
|
||||||
if soil_pos == nil then
|
if first_shoot == nil then
|
||||||
return itemstack -- returning itemstack means don't place.
|
return
|
||||||
end
|
end
|
||||||
|
meta = minetest.get_meta(first_shoot)
|
||||||
first_shoot = vector.offset(soil_pos, 0, 1, 0)
|
|
||||||
local meta = minetest.get_meta(first_shoot)
|
|
||||||
|
|
||||||
if meta then
|
if meta then
|
||||||
height = meta:get_int("height", -1)
|
height = meta:get_int("height", -1)
|
||||||
end
|
end
|
||||||
|
|
||||||
dist = vector.distance(soil_pos, chk_pos)
|
dist = vector.distance(first_shoot, pos) + 1 -- +1 for the ground offset.
|
||||||
|
minetest.log("Distance: " .. dist .. " Height: " .. height .. " Bamboo to place: " .. mcl_bamboo.bamboo_index[bamboo_node])
|
||||||
-- okay, so don't go beyond max height...
|
-- okay, so don't go beyond max height...
|
||||||
if dist > 15 and height == -1 then
|
-- Height is determined when the first node grows.
|
||||||
-- height not found
|
-- here, it's not found, so let them do 4-5 nodes up. (should help it grow.)
|
||||||
return itemstack
|
if dist < 5 and height < 5 then
|
||||||
|
-- allow
|
||||||
|
else
|
||||||
|
-- else, it's complicated.
|
||||||
|
if dist > 5 and height < 5 then
|
||||||
|
return
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if dist + 1 > height - 1 then
|
if dist > height - 1 then
|
||||||
-- height found.
|
-- height found. here, we let them do it until they reach where the endcap will go.
|
||||||
return itemstack
|
return
|
||||||
|
end
|
||||||
|
else
|
||||||
|
local placed_type = pr:next(1, 4) -- randomly choose which one to place.
|
||||||
|
mcl_bamboo.mcl_log("Place_Bamboo_Shoot--Type: " .. placed_type)
|
||||||
|
place_item = ItemStack(mcl_bamboo.bamboo_index[placed_type])
|
||||||
|
rand_height = pr:next(BAMBOO_MAX_HEIGHT - 4, BAMBOO_MAX_HEIGHT)
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.item_place(place_item, placer, pointed_thing, fdir)
|
local _, position = minetest.item_place(place_item, placer, pointed_thing, fdir)
|
||||||
|
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
||||||
itemstack:take_item(1)
|
itemstack:take_item(1)
|
||||||
|
end
|
||||||
|
if rand_height and rand_height > 1 then
|
||||||
|
meta = minetest.get_meta(position)
|
||||||
|
if meta then
|
||||||
|
meta:set_int("height", rand_height)
|
||||||
|
end
|
||||||
|
end
|
||||||
return itemstack, pointed_thing.under
|
return itemstack, pointed_thing.under
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue