mirror of
https://github.com/mt-mods/plantlife_modpack.git
synced 2024-11-09 20:00:48 +01:00
7931470ddb
(at the same rates as anywhere else) Slowed down overall berry regrowth and at the same time make it so that if a bush is planted on wet farming soil, it will re-grow its berries faster, provided the soil remains wet. On average, a wild bush will regrow its berries 50% slower than before, while a farmed bush will regrow its berries twice as fast as the wild ones did before (about 3x faster than wild ones do now).
202 lines
5.4 KiB
Lua
202 lines
5.4 KiB
Lua
|
|
|
|
|
|
plantlife_bushes = {}
|
|
|
|
-- TODO: add support for nodebreakers? those dig like mese picks
|
|
plantlife_bushes.after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
|
if( not( digger ) or not( pos ) or not (oldnode )) then
|
|
return nil;
|
|
end
|
|
|
|
-- find out which bush type we are dealing with
|
|
local bush_name = "";
|
|
local can_harvest = false;
|
|
|
|
if( oldnode.name == 'bushes:fruitless_bush' ) then
|
|
-- this bush has not grown fruits yet (but will eventually)
|
|
bush_name = oldmetadata[ 'fields' ][ 'bush_type' ];
|
|
-- no fruits to be found, so can_harvest stays false
|
|
else
|
|
local name_parts = oldnode.name:split( ":" );
|
|
if( #name_parts >= 2 and name_parts[2]~=nil ) then
|
|
|
|
name_parts = name_parts[2]:split( "_" );
|
|
|
|
if( #name_parts >= 2 and name_parts[1]~=nil ) then
|
|
bush_name = name_parts[1];
|
|
-- this bush really carries fruits
|
|
can_harvest = true;
|
|
end
|
|
end
|
|
end
|
|
|
|
-- find out which tool the digger was wielding (if any)
|
|
local toolstack = digger:get_wielded_item();
|
|
local capabilities = toolstack:get_tool_capabilities();
|
|
|
|
-- what the player will get
|
|
local harvested = "";
|
|
local amount = "";
|
|
|
|
-- failure to find out what the tool can do: destroy the bush and return nothing
|
|
if( not( capabilities["groupcaps"] )) then
|
|
return nil;
|
|
|
|
-- digging with the hand or something like that
|
|
elseif( capabilities["groupcaps"]["snappy"] ) then
|
|
|
|
-- plant a new bush without fruits
|
|
minetest.env:add_node(pos,{type='node',name='bushes:fruitless_bush'})
|
|
local meta = minetest.env:get_meta( pos );
|
|
meta:set_string( 'bush_type', bush_name );
|
|
|
|
-- construct the stack of fruits the player will get
|
|
-- only bushes that have grown fruits can actually give fruits
|
|
if( can_harvest == true ) then
|
|
amount = "4";
|
|
harvested = "bushes:"..bush_name.." "..amount;
|
|
end
|
|
|
|
-- something like a shovel
|
|
elseif( capabilities["groupcaps"]["crumbly"] ) then
|
|
|
|
-- with a chance of 1/3, return 2 bushes
|
|
if( math.random(1,3)==1 ) then
|
|
amount = "2";
|
|
else
|
|
amount = "1";
|
|
end
|
|
-- return the bush itself
|
|
harvested = "bushes:" .. bush_name .. "_bush "..amount;
|
|
|
|
-- something like an axe
|
|
elseif( capabilities["groupcaps"]["choppy"] ) then
|
|
|
|
-- the amount of sticks may vary
|
|
amount = math.random( 4, 20 );
|
|
-- return some sticks
|
|
harvested = "default:stick "..amount;
|
|
|
|
-- nothing known - destroy the plant
|
|
else
|
|
return nil;
|
|
end
|
|
|
|
-- give the harvested result to the player
|
|
if( harvested ~= "" ) then
|
|
--minetest.chat_send_player("singleplayer","you would now get "..tostring( harvested ) );
|
|
digger:get_inventory():add_item( "main", harvested );
|
|
end
|
|
end
|
|
|
|
|
|
|
|
plantlife_bushes.after_place_node = function(pos, placer, itemstack)
|
|
|
|
if( not( itemstack ) or not( pos )) then
|
|
return nil;
|
|
end
|
|
|
|
local name_parts = itemstack:get_name():split( ":" );
|
|
if( #name_parts <2 or name_parts[2]==nil ) then
|
|
return nil;
|
|
end
|
|
|
|
name_parts = name_parts[2]:split( "_" );
|
|
|
|
if( #name_parts <2 or name_parts[1]==nil ) then
|
|
return nil;
|
|
end
|
|
|
|
minetest.env:set_node( pos, {type='node',name='bushes:fruitless_bush'});
|
|
local meta = minetest.env:get_meta( pos );
|
|
meta:set_string( 'bush_type', name_parts[1] );
|
|
|
|
return nil;
|
|
end
|
|
|
|
|
|
|
|
-- regrow berries (uses a base abm instead of plants_lib because of the use of metadata).
|
|
|
|
minetest.register_abm({
|
|
nodenames = { "bushes:fruitless_bush" },
|
|
interval = 500,
|
|
chance = 5,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
|
|
local meta = minetest.env:get_meta( pos );
|
|
local bush_name = meta:get_string( 'bush_type' );
|
|
if( bush_name ~= nil and bush_name ~= '' ) then
|
|
local dirtpos = { x = pos.x, y = pos.y-1, z = pos.z }
|
|
local dirt = minetest.get_node(dirtpos)
|
|
if dirt.name == "farming:soil_wet" or math.random(1,3) == 1 then
|
|
minetest.env:set_node( pos, {type='node',name='bushes:'..bush_name..'_bush'})
|
|
end
|
|
end
|
|
end
|
|
})
|
|
|
|
-- Define the basket and bush nodes
|
|
|
|
for i, bush_name in ipairs(bushes_classic.bushes) do
|
|
|
|
local desc = bushes_classic.bushes_descriptions[i]
|
|
|
|
minetest.register_node(":bushes:basket_"..bush_name, {
|
|
description = "Basket with "..desc.." Pies",
|
|
tiles = {
|
|
"bushes_basket_"..bush_name.."_top.png",
|
|
"bushes_basket_bottom.png",
|
|
"bushes_basket_side.png"
|
|
},
|
|
on_use = minetest.item_eat(18),
|
|
groups = { dig_immediate = 3 },
|
|
})
|
|
|
|
if bush_name == "mixed_berry" then
|
|
bush_name = "fruitless";
|
|
desc = "currently fruitless";
|
|
end
|
|
|
|
minetest.register_node(":bushes:" .. bush_name .. "_bush", {
|
|
description = desc.." Bush",
|
|
drawtype = "plantlike",
|
|
visual_scale = 1.3,
|
|
tiles = { "bushes_" .. bush_name .. "_bush.png" },
|
|
inventory_image = "bushes_" .. bush_name .. "_bush.png",
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
walkable = false,
|
|
|
|
groups = { snappy = 3, bush = 1, flammable = 2},
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
drop = "",
|
|
after_dig_node = function( pos, oldnode, oldmetadata, digger )
|
|
return plantlife_bushes.after_dig_node(pos, oldnode, oldmetadata, digger);
|
|
end,
|
|
after_place_node = function( pos, placer, itemstack )
|
|
return plantlife_bushes.after_place_node(pos, placer, itemstack);
|
|
end,
|
|
})
|
|
|
|
-- do not spawn fruitless bushes
|
|
if bush_name ~= "fruitless" then
|
|
table.insert(bushes_classic.spawn_list, "bushes:"..bush_name.."_bush")
|
|
end
|
|
end
|
|
|
|
|
|
minetest.register_node(":bushes:basket_empty", {
|
|
description = "Basket",
|
|
tiles = {
|
|
"bushes_basket_empty_top.png",
|
|
"bushes_basket_bottom.png",
|
|
"bushes_basket_side.png"
|
|
},
|
|
groups = { dig_immediate = 3 },
|
|
})
|
|
|
|
|