mirror of
https://github.com/joe7575/lumberjack.git
synced 2024-11-22 06:53:46 +01:00
initial commit
This commit is contained in:
parent
12d6a961a2
commit
ca091f57af
13
LICENSE.txt
Normal file
13
LICENSE.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
19
README.md
Normal file
19
README.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Lumberjack
|
||||||
|
|
||||||
|
A simple mod based on ideas from the mods TreeCapitator, Timber, and New Timber.
|
||||||
|
This mod allows to hit the bottom of the tree and the whole tree (wood) is harvested
|
||||||
|
and moved to the players inventory.
|
||||||
|
To distinguish between "grown" trees and playes tree nodes, the 'node.param1'
|
||||||
|
is used to identify placed nodes.
|
||||||
|
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
default
|
||||||
|
|
||||||
|
# License
|
||||||
|
Copyright (C) 2018 Joachim Stolberg
|
||||||
|
Code: Licensed under the GNU LGPL version 2.1 or later. See LICENSE.txt and http://www.gnu.org/licenses/lgpl-2.1.txt
|
||||||
|
Sound is taken from Hybrid Dog (TreeCapitator)
|
||||||
|
|
||||||
|
# History
|
||||||
|
V0.1 07/Apr/2018 mod initial created
|
10
depends.txt
Normal file
10
depends.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
default
|
||||||
|
unifieddyes
|
||||||
|
stairs?
|
||||||
|
moreblocks?
|
||||||
|
moreores?
|
||||||
|
building_blocks?
|
||||||
|
homedecor?
|
||||||
|
|
||||||
|
|
||||||
|
|
2
description.txt
Normal file
2
description.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
This mod allows to dig the bottom of the tree and the whole tree is moved into the inventory.
|
||||||
|
|
129
init.lua
Normal file
129
init.lua
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
--[[
|
||||||
|
|
||||||
|
lumberjack
|
||||||
|
==========
|
||||||
|
|
||||||
|
Copyright (C) 2018 Joachim Stolberg
|
||||||
|
|
||||||
|
LGPLv2.1+
|
||||||
|
See LICENSE.txt for more information
|
||||||
|
|
||||||
|
This mod allows to hit the bottom of the tree and the whole tree is harvested
|
||||||
|
and moved to the players inventory.
|
||||||
|
To distinguish between "grown" trees and playes tree nodes, the 'node.param1'
|
||||||
|
is used to identify placed nodes.
|
||||||
|
|
||||||
|
]]--
|
||||||
|
|
||||||
|
lumberjack = {}
|
||||||
|
|
||||||
|
local MY_PARAM1_VAL = 7 -- to identify placed nodes
|
||||||
|
|
||||||
|
local lTrees = {} -- List od registered tree items
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Register the tree node to the lumberjack mod.
|
||||||
|
-- 'radius' the the range (+x/-x/+z/-z), where all available tree nodes will be removed-
|
||||||
|
-- 'stem_height_min' is the minimum number of tree nodes, to be a valid stem (and not the a root)-
|
||||||
|
--
|
||||||
|
function lumberjack.register_tree(name, radius, stem_height_min)
|
||||||
|
local data = minetest.registered_nodes[name]
|
||||||
|
if data == nil then
|
||||||
|
error("[lumberjack] "..name.." is no valid item")
|
||||||
|
end
|
||||||
|
if data.after_dig_node == nil then
|
||||||
|
minetest.override_item(name, {
|
||||||
|
after_dig_node = after_dig_node,
|
||||||
|
on_construct = on_construct,
|
||||||
|
})
|
||||||
|
else
|
||||||
|
error("[lumberjack] "..name.." has already an 'after_dig_node' function")
|
||||||
|
end
|
||||||
|
lTrees[name] = {radius=radius, height_min=stem_height_min}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Remove all treen nodes in the given range
|
||||||
|
--
|
||||||
|
local function remove_level(pos1, pos2, name)
|
||||||
|
local cnt = 0
|
||||||
|
for _,pos in ipairs(minetest.find_nodes_in_area(pos1, pos2, name)) do
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
cnt = cnt + 1
|
||||||
|
end
|
||||||
|
return cnt
|
||||||
|
end
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Remove the complete tree and return the number of removed items
|
||||||
|
--
|
||||||
|
local function remove_tree(pos, radius, name)
|
||||||
|
local level = 1
|
||||||
|
local num_nodes = 0
|
||||||
|
while true do
|
||||||
|
local pos1 = {x=pos.x-radius, y=pos.y+level, z=pos.z-radius}
|
||||||
|
local pos2 = {x=pos.x+radius, y=pos.y+level, z=pos.z+radius}
|
||||||
|
local cnt = remove_level(pos1, pos2, name)
|
||||||
|
if cnt == 0 then break end
|
||||||
|
num_nodes = num_nodes + cnt
|
||||||
|
level = level + 1
|
||||||
|
end
|
||||||
|
return num_nodes
|
||||||
|
end
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Add tree items to the players inventory
|
||||||
|
--
|
||||||
|
local function add_to_inventory(digger, name, len)
|
||||||
|
local inv = digger:get_inventory()
|
||||||
|
local items = ItemStack(name .. " " .. len)
|
||||||
|
if inv and items and inv:room_for_item("main", items) then
|
||||||
|
inv:add_item("main", items)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Remove the complete tree if the digged node belongs to a tree
|
||||||
|
--
|
||||||
|
local function after_dig_node(pos, oldnode, oldmetadata, digger)
|
||||||
|
if not digger or digger:get_player_control().sneak then return end
|
||||||
|
-- not a player placed node?
|
||||||
|
if oldnode.param1 == MY_PARAM1_VAL then return end
|
||||||
|
-- not root nodes?
|
||||||
|
local height_min = lTrees[oldnode.name].height_min or 3
|
||||||
|
local test_pos = {x=pos.x, y=pos.y+height_min-1, z=pos.z}
|
||||||
|
if minetest.get_node(test_pos).name ~= oldnode.name then return end
|
||||||
|
-- OK, cut tree
|
||||||
|
local radius = lTrees[oldnode.name].radius or 0
|
||||||
|
local num_nodes = remove_tree(pos, radius, oldnode.name)
|
||||||
|
add_to_inventory(digger, oldnode.name, num_nodes)
|
||||||
|
minetest.sound_play("tree_falling", {pos = pos, max_hear_distance = 16})
|
||||||
|
end
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Mark node as "used placed"
|
||||||
|
--
|
||||||
|
local function on_construct(pos)
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
if node then
|
||||||
|
minetest.swap_node(pos, {name=node.name, param1=MY_PARAM1_VAL, param2=node.param2})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
lumberjack.register_tree("default:jungletree", 1, 5)
|
||||||
|
lumberjack.register_tree("default:acacia_tree", 2, 3)
|
||||||
|
lumberjack.register_tree("default:aspen_tree", 0, 5)
|
||||||
|
lumberjack.register_tree("default:tree", 1, 2)
|
||||||
|
lumberjack.register_tree("default:pine_tree", 0, 3)
|
||||||
|
|
||||||
|
if minetest.get_modpath("ethereal") and ethereal ~= nil then
|
||||||
|
lumberjack.register_tree("ethereal:palm_trunk", 1, 3)
|
||||||
|
lumberjack.register_tree("ethereal:mushroom_trunk", 1, 3)
|
||||||
|
lumberjack.register_tree("ethereal:birch_trunk", 0, 3)
|
||||||
|
lumberjack.register_tree("ethereal:banana_trunk", 1, 3)
|
||||||
|
lumberjack.register_tree("ethereal:willow_trunk", 4, 3)
|
||||||
|
lumberjack.register_tree("ethereal:frost_tree", 1, 3)
|
||||||
|
end
|
1
mod.conf
Normal file
1
mod.conf
Normal file
@ -0,0 +1 @@
|
|||||||
|
name=lumberjack
|
BIN
sounds/tree_falling.ogg
Normal file
BIN
sounds/tree_falling.ogg
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user