Make sure chainsaw drops will appear above ground

A fix for https://github.com/minetest-technic/technic/issues/137
Chainsaw drops are forced to pop above ground. Also, as asl suggested, they must not end up too high on a ledge or a pillar.
This commit is contained in:
Phvli
2014-05-04 19:59:37 +03:00
parent 67b709744f
commit a0b7e607a9

View File

@ -55,8 +55,6 @@ if( minetest.get_modpath("moretrees") ~= nil ) then
if chainsaw_leaves then if chainsaw_leaves then
timber_nodenames["moretrees:apple_tree_leaves"] = true timber_nodenames["moretrees:apple_tree_leaves"] = true
timber_nodenames["moretrees:oak_leaves"] = true timber_nodenames["moretrees:oak_leaves"] = true
timber_nodenames["moretrees:fir_leaves"] = true
timber_nodenames["moretrees:fir_leaves_bright"] = true
timber_nodenames["moretrees:sequoia_leaves"] = true timber_nodenames["moretrees:sequoia_leaves"] = true
timber_nodenames["moretrees:birch_leaves"] = true timber_nodenames["moretrees:birch_leaves"] = true
timber_nodenames["moretrees:birch_leaves"] = true timber_nodenames["moretrees:birch_leaves"] = true
@ -203,6 +201,22 @@ local function recursive_dig(pos, remaining_charge, player)
return remaining_charge return remaining_charge
end end
local function get_drop_pos(pos)
local p
repeat
p = {
x = pos.x + math.random() * 6 - 3,
y = pos.y - 1,
z = pos.z + math.random() * 6 - 3
}
repeat
p.y = p.y + 1
node = minetest.get_node(p).name
until node == "air" or node == "ignore" -- Make sure drops wont appear inside ground
until p.y < pos.y + 15 -- Make sure the drops dont end up on a high ledge or column
return p
end
-- Saw down trees entry point -- Saw down trees entry point
local function chainsaw_dig_it(pos, player,current_charge) local function chainsaw_dig_it(pos, player,current_charge)
if minetest.is_protected(pos, player:get_player_name()) then if minetest.is_protected(pos, player:get_player_name()) then
@ -231,18 +245,10 @@ local function chainsaw_dig_it(pos, player,current_charge)
for produced_item,number in pairs(produced) do for produced_item,number in pairs(produced) do
--print("ADDING ITEM: " .. produced_item .. " " .. number) --print("ADDING ITEM: " .. produced_item .. " " .. number)
-- Drop stacks of 99 or less -- Drop stacks of 99 or less
p = { p = get_drop_pos(pos)
x = pos.x + math.random()*4,
y = pos.y,
z = pos.z + math.random()*4
}
while number > 99 do while number > 99 do
minetest.env:add_item(p, produced_item .. " 99") minetest.env:add_item(p, produced_item .. " 99")
p = { p = get_drop_pos(pos)
x = pos.x + math.random()*4,
y = pos.y,
z = pos.z + math.random()*4
}
number = number - 99 number = number - 99
end end
minetest.env:add_item(p, produced_item .. " " .. number) minetest.env:add_item(p, produced_item .. " " .. number)
@ -255,8 +261,6 @@ minetest.register_tool("technic:chainsaw", {
description = S("Chainsaw"), description = S("Chainsaw"),
inventory_image = "technic_chainsaw.png", inventory_image = "technic_chainsaw.png",
stack_max = 1, stack_max = 1,
wear_represents = "technic_RE_charge",
on_refill = technic.refill_RE_charge,
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
if pointed_thing.type ~= "node" then if pointed_thing.type ~= "node" then
return itemstack return itemstack