2021-06-21 02:58:18 +03:00
local S = minetest.get_translator ( minetest.get_current_modname ( ) )
2022-10-26 05:46:41 +03:00
local planton = { " mcl_core:dirt_with_grass " , " mcl_core:dirt " , " mcl_core:podzol " , " mcl_core:coarse_dirt " , " mcl_farming:soil " , " mcl_farming:soil_wet " , " mcl_moss:moss " }
2022-10-24 17:23:14 +03:00
2021-06-21 02:58:18 +03:00
for i = 0 , 3 do
local texture = " mcl_farming_sweet_berry_bush_ " .. i .. " .png "
local node_name = " mcl_farming:sweet_berry_bush_ " .. i
2022-10-24 17:32:40 +03:00
local groups = { sweet_berry = 1 , dig_immediate = 3 , not_in_creative_inventory = 1 , plant = 1 , attached_node = 1 , dig_by_water = 1 , destroy_by_lava_flow = 1 , dig_by_piston = 1 , flammable = 3 , fire_encouragement = 60 , fire_flammability = 20 , compostability = 30 }
if i > 0 then
groups.sweet_berry_thorny = 1
end
2021-06-21 02:58:18 +03:00
minetest.register_node ( node_name , {
drawtype = " plantlike " ,
tiles = { texture } ,
description = S ( " Sweet Berry Bush (Stage @1) " , i ) ,
paramtype = " light " ,
sunlight_propagates = true ,
paramtype2 = " meshoptions " ,
place_param2 = 3 ,
2022-10-24 17:03:48 +03:00
liquid_viscosity = 15 ,
liquidtype = " source " ,
liquid_alternative_flowing = node_name ,
liquid_alternative_source = node_name ,
liquid_renewable = false ,
liquid_range = 0 ,
2021-06-21 02:58:18 +03:00
walkable = false ,
2021-06-21 03:51:05 +03:00
drop = ( i >= 2 ) and ( " mcl_farming:sweet_berry " .. ( i == 3 and " 3 " or " " ) ) or " " ,
2021-06-21 02:58:18 +03:00
selection_box = {
type = " fixed " ,
2022-10-24 17:03:48 +03:00
fixed = { - 6 / 16 , - 0.5 , - 6 / 16 , 6 / 16 , ( - 0.30 + ( i * 0.25 ) ) , 6 / 16 } ,
2021-06-21 02:58:18 +03:00
} ,
inventory_image = texture ,
wield_image = texture ,
2022-10-24 17:32:40 +03:00
groups = groups ,
2021-06-21 02:58:18 +03:00
sounds = mcl_sounds.node_sound_leaves_defaults ( ) ,
_mcl_blast_resistance = 0 ,
2022-10-24 17:32:40 +03:00
_mcl_hardness = 0 ,
2022-11-16 03:58:15 +02:00
on_rightclick = function ( pos , node , clicker , itemstack , pointed_thing )
local stage
if node.name : find ( " _2 " ) then
stage = 2
elseif node.name : find ( " _3 " ) then
stage = 3
end
if stage then
for i = 1 , math.random ( stage ) do
minetest.add_item ( pos , " mcl_farming:sweet_berry " )
end
minetest.swap_node ( pos , { name = " mcl_farming:sweet_berry_bush_ " .. stage - 1 } )
end
end ,
2021-06-21 02:58:18 +03:00
} )
minetest.register_alias ( " mcl_sweet_berry:sweet_berry_bush_ " .. i , node_name )
end
minetest.register_craftitem ( " mcl_farming:sweet_berry " , {
description = S ( " Sweet Berry " ) ,
inventory_image = " mcl_farming_sweet_berry.png " ,
2022-10-24 17:35:47 +03:00
_mcl_saturation = 0.4 ,
2022-10-24 02:00:41 +03:00
groups = { food = 2 , eatable = 1 , compostability = 30 } ,
2021-06-21 02:58:18 +03:00
on_secondary_use = minetest.item_eat ( 1 ) ,
on_place = function ( itemstack , placer , pointed_thing )
2022-10-24 17:23:14 +03:00
if pointed_thing.type == " node " and table.indexof ( planton , minetest.get_node ( pointed_thing.under ) . name ) ~= - 1 and minetest.get_node ( pointed_thing.above ) . name == " air " then
minetest.set_node ( pointed_thing.above , { name = " mcl_farming:sweet_berry_bush_0 " } )
if not minetest.is_creative_enabled ( placer : get_player_name ( ) ) then
itemstack : take_item ( )
end
return itemstack
2021-06-21 02:58:18 +03:00
end
2022-10-24 17:23:14 +03:00
return minetest.do_item_eat ( 1 , nil , itemstack , placer , pointed_thing )
2021-06-21 02:58:18 +03:00
end ,
} )
minetest.register_alias ( " mcl_sweet_berry:sweet_berry " , " mcl_farming:sweet_berry " )
2022-06-18 18:41:22 +03:00
-- TODO: Find proper interval and chance values for sweet berry bushes. Current interval and chance values are copied from mcl_farming:beetroot which has similar growth stages.
2022-10-24 02:13:44 +03:00
mcl_farming : add_plant ( " plant_sweet_berry_bush " , " mcl_farming:sweet_berry_bush_3 " , { " mcl_farming:sweet_berry_bush_0 " , " mcl_farming:sweet_berry_bush_1 " , " mcl_farming:sweet_berry_bush_2 " } , 68 , 3 )
2022-10-24 17:03:24 +03:00
local function berry_damage_check ( obj )
local p = obj : get_pos ( )
if not p then return end
2022-10-24 17:32:40 +03:00
if not minetest.find_node_near ( p , 0.4 , { " group:sweet_berry_thorny " } , true ) then return end
2022-10-24 17:03:24 +03:00
local v = obj : get_velocity ( )
if v.x < 0.1 and v.y < 0.1 and v.z < 0.1 then return end
mcl_util.deal_damage ( obj , 0.5 , { type = " sweet_berry " } )
end
local etime = 0
minetest.register_globalstep ( function ( dtime )
etime = dtime + etime
if etime < 0.5 then return end
etime = 0
for _ , pl in pairs ( minetest.get_connected_players ( ) ) do
berry_damage_check ( pl )
end
for _ , ent in pairs ( minetest.luaentities ) do
if ent.is_mob then
berry_damage_check ( ent.object )
end
end
end )