2021-05-29 16:12:33 +02:00
local S = minetest.get_translator ( minetest.get_current_modname ( ) )
local table = table
2019-03-15 09:50:32 +01:00
2022-01-22 01:09:50 +01:00
local interval = 35
local chance = 11
local max_interval = interval * chance
2017-02-10 04:15:14 +01:00
minetest.register_node ( " mcl_nether:nether_wart_0 " , {
2019-03-15 09:50:32 +01:00
description = S ( " Premature Nether Wart (Stage 1) " ) ,
_doc_items_longdesc = S ( " A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension. " ) ,
2017-02-10 04:15:14 +01:00
paramtype = " light " ,
2017-03-14 21:45:21 +01:00
paramtype2 = " meshoptions " ,
place_param2 = 3 ,
2017-02-10 04:15:14 +01:00
walkable = false ,
drawtype = " plantlike " ,
drop = " mcl_nether:nether_wart_item " ,
tiles = { " mcl_nether_nether_wart_stage_0.png " } ,
2018-10-24 18:16:39 +02:00
wield_image = " mcl_nether_nether_wart_stage_0.png " ,
inventory_image = " mcl_nether_nether_wart_stage_0.png " ,
2017-02-10 04:15:14 +01:00
selection_box = {
type = " fixed " ,
fixed = {
{ - 0.5 , - 0.5 , - 0.5 , 0.5 , - 0.125 , 0.5 }
} ,
} ,
2017-05-22 22:29:15 +02:00
groups = { 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 } ,
2017-02-11 18:46:23 +01:00
sounds = mcl_sounds.node_sound_leaves_defaults ( ) ,
2022-02-18 23:36:02 +01:00
on_construct = mcl_time.touch ,
2017-02-10 04:15:14 +01:00
} )
minetest.register_node ( " mcl_nether:nether_wart_1 " , {
2019-03-15 09:50:32 +01:00
description = S ( " Premature Nether Wart (Stage 2) " ) ,
2017-03-14 21:45:21 +01:00
_doc_items_create_entry = false ,
2017-02-10 04:15:14 +01:00
paramtype = " light " ,
2017-03-14 21:45:21 +01:00
paramtype2 = " meshoptions " ,
place_param2 = 3 ,
2017-02-10 04:15:14 +01:00
walkable = false ,
drawtype = " plantlike " ,
drop = " mcl_nether:nether_wart_item " ,
tiles = { " mcl_nether_nether_wart_stage_1.png " } ,
2018-10-24 18:16:39 +02:00
wield_image = " mcl_nether_nether_wart_stage_1.png " ,
inventory_image = " mcl_nether_nether_wart_stage_1.png " ,
2017-02-10 04:15:14 +01:00
selection_box = {
type = " fixed " ,
fixed = {
{ - 0.5 , - 0.5 , - 0.5 , 0.5 , 0.15 , 0.5 }
} ,
} ,
2017-05-22 22:29:15 +02:00
groups = { 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 } ,
2017-02-11 18:46:23 +01:00
sounds = mcl_sounds.node_sound_leaves_defaults ( ) ,
2022-02-18 23:36:02 +01:00
on_construct = mcl_time.touch ,
2017-02-10 04:15:14 +01:00
} )
minetest.register_node ( " mcl_nether:nether_wart_2 " , {
2019-03-15 09:50:32 +01:00
description = S ( " Premature Nether Wart (Stage 3) " ) ,
2017-03-11 19:26:32 +01:00
_doc_items_create_entry = false ,
2017-02-10 04:15:14 +01:00
paramtype = " light " ,
2017-03-14 21:45:21 +01:00
paramtype2 = " meshoptions " ,
place_param2 = 3 ,
2017-02-10 04:15:14 +01:00
walkable = false ,
drawtype = " plantlike " ,
drop = " mcl_nether:nether_wart_item " ,
tiles = { " mcl_nether_nether_wart_stage_1.png " } ,
2018-10-24 18:16:39 +02:00
wield_image = " mcl_nether_nether_wart_stage_1.png " ,
inventory_image = " mcl_nether_nether_wart_stage_1.png " ,
2017-02-10 04:15:14 +01:00
selection_box = {
type = " fixed " ,
fixed = {
{ - 0.5 , - 0.5 , - 0.5 , 0.5 , 0.15 , 0.5 }
} ,
} ,
2017-05-22 22:29:15 +02:00
groups = { 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 } ,
2017-02-11 18:46:23 +01:00
sounds = mcl_sounds.node_sound_leaves_defaults ( ) ,
2022-02-18 23:36:02 +01:00
on_construct = mcl_time.touch ,
2017-02-10 04:15:14 +01:00
} )
minetest.register_node ( " mcl_nether:nether_wart " , {
2019-03-15 09:50:32 +01:00
description = S ( " Mature Nether Wart " ) ,
_doc_items_longdesc = S ( " The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items. " ) ,
2017-02-10 04:15:14 +01:00
paramtype = " light " ,
2017-03-14 21:45:21 +01:00
paramtype2 = " meshoptions " ,
place_param2 = 3 ,
2017-02-10 04:15:14 +01:00
walkable = false ,
drawtype = " plantlike " ,
drop = {
max_items = 2 ,
items = {
{ items = { " mcl_nether:nether_wart_item 2 " } , rarity = 1 } ,
{ items = { " mcl_nether:nether_wart_item 2 " } , rarity = 3 } ,
{ items = { " mcl_nether:nether_wart_item 1 " } , rarity = 3 } ,
} ,
} ,
tiles = { " mcl_nether_nether_wart_stage_2.png " } ,
2018-10-24 18:16:39 +02:00
wield_image = " mcl_nether_nether_wart_stage_2.png " ,
inventory_image = " mcl_nether_nether_wart_stage_2.png " ,
2020-07-05 03:28:02 +02:00
selection_box = {
2017-02-10 04:15:14 +01:00
type = " fixed " ,
fixed = {
{ - 0.5 , - 0.5 , - 0.5 , 0.5 , 0.45 , 0.5 }
} ,
} ,
2017-05-22 22:29:15 +02:00
groups = { 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 } ,
2017-02-11 18:46:23 +01:00
sounds = mcl_sounds.node_sound_leaves_defaults ( ) ,
2020-11-06 13:46:52 +01:00
_mcl_fortune_drop = {
discrete_uniform_distribution = true ,
items = { " mcl_nether:nether_wart_item " } ,
min_count = 2 ,
max_count = 4 ,
}
2017-02-10 04:15:14 +01:00
} )
minetest.register_craftitem ( " mcl_nether:nether_wart_item " , {
2019-03-15 09:50:32 +01:00
description = S ( " Nether Wart " ) ,
2020-02-19 04:54:17 +01:00
_tt_help = S ( " Grows on soul sand " ) ,
2019-03-15 09:50:32 +01:00
_doc_items_longdesc = S ( " Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages. " ) ,
2019-03-25 12:05:57 +01:00
_doc_items_usagehelp = S ( " Place this item on soul sand to plant it and watch it grow. " ) ,
2017-02-10 04:15:14 +01:00
inventory_image = " mcl_nether_nether_wart.png " ,
wield_image = " mcl_nether_nether_wart.png " ,
on_place = function ( itemstack , placer , pointed_thing )
if pointed_thing.type ~= " node " then
return itemstack
end
2017-03-02 16:09:13 +01:00
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node ( pointed_thing.under )
if placer and not placer : get_player_control ( ) . sneak then
if minetest.registered_nodes [ node.name ] and minetest.registered_nodes [ node.name ] . on_rightclick then
return minetest.registered_nodes [ node.name ] . on_rightclick ( pointed_thing.under , node , placer , itemstack ) or itemstack
end
end
2017-02-10 04:26:06 +01:00
local placepos = pointed_thing.above
local soilpos = table.copy ( placepos )
soilpos.y = soilpos.y - 1
2017-02-10 04:15:14 +01:00
-- Check for correct soil type
2017-02-10 04:26:06 +01:00
local chk = minetest.get_item_group ( minetest.get_node ( soilpos ) . name , " soil_nether_wart " )
2021-05-29 16:12:33 +02:00
if chk and chk ~= 0 then
2017-02-10 04:15:14 +01:00
-- Check if node above soil node allows placement
2017-02-10 04:26:06 +01:00
if minetest.registered_items [ minetest.get_node ( placepos ) . name ] . buildable_to then
2017-02-10 04:20:25 +01:00
-- Place nether wart
2020-04-07 00:55:45 +02:00
minetest.sound_play ( { name = " default_place_node " , gain = 1.0 } , { pos = placepos } , true )
2017-03-14 21:45:21 +01:00
minetest.set_node ( placepos , { name = " mcl_nether:nether_wart_0 " , param2 = 3 } )
2017-02-10 04:20:25 +01:00
2020-07-10 16:08:40 +02:00
if not minetest.is_creative_enabled ( placer : get_player_name ( ) ) then
2017-02-10 04:15:14 +01:00
itemstack : take_item ( )
end
return itemstack
end
end
end ,
2022-03-20 00:07:42 +01:00
groups = { craftitem = 1 , brewitem = 1 , compostability = 30 } ,
2017-02-10 04:15:14 +01:00
} )
local names = { " mcl_nether:nether_wart_0 " , " mcl_nether:nether_wart_1 " , " mcl_nether:nether_wart_2 " }
2022-01-22 01:09:50 +01:00
local function grow ( pos , node )
local step = nil
2022-02-18 23:36:02 +01:00
local node = node or minetest.get_node ( pos )
2022-01-22 01:09:50 +01:00
for i , name in ipairs ( names ) do
if name == node.name then
step = i
break
end
end
if not step then return end
local new_node = { name = names [ step + 1 ] }
if not new_node.name then
new_node.name = " mcl_nether:nether_wart "
end
new_node.param = node.param
new_node.param2 = node.param2
minetest.set_node ( pos , new_node )
end
2017-02-10 04:15:14 +01:00
minetest.register_abm ( {
2017-05-15 00:45:54 +02:00
label = " Nether wart growth " ,
2017-02-10 04:15:14 +01:00
nodenames = { " mcl_nether:nether_wart_0 " , " mcl_nether:nether_wart_1 " , " mcl_nether:nether_wart_2 " } ,
neighbors = { " group:soil_nether_wart " } ,
2022-01-22 01:09:50 +01:00
interval = interval ,
2022-02-18 23:36:02 +01:00
chance = 1 ,
2017-02-10 04:15:14 +01:00
action = function ( pos , node )
pos.y = pos.y - 1
if minetest.get_item_group ( minetest.get_node ( pos ) . name , " soil_nether_wart " ) == 0 then
return
end
pos.y = pos.y + 1
2022-02-13 00:56:44 +01:00
2022-02-18 22:52:10 +01:00
for i = 1 , mcl_time.get_number_of_times_at_pos ( pos , interval , chance ) do
2022-02-18 23:36:02 +01:00
grow ( pos )
2022-02-13 00:56:44 +01:00
end
2022-01-22 01:09:50 +01:00
end
} )
minetest.register_lbm ( {
label = " Nether wart growth update " ,
name = " mcl_nether:growth_warts " ,
nodenames = { " mcl_nether:nether_wart_0 " , " mcl_nether:nether_wart_1 " , " mcl_nether:nether_wart_2 " } ,
run_at_every_load = true ,
action = function ( pos , node )
pos.y = pos.y - 1
if minetest.get_item_group ( minetest.get_node ( pos ) . name , " soil_nether_wart " ) == 0 then
2017-02-10 04:15:14 +01:00
return
end
2022-01-22 01:09:50 +01:00
pos.y = pos.y + 1
2022-02-13 00:56:44 +01:00
for i = 1 , mcl_time.get_number_of_times_at_pos ( pos , interval , chance ) do
2022-02-18 23:36:02 +01:00
grow ( pos )
2017-02-10 04:15:14 +01:00
end
end
} )
2017-03-21 04:58:38 +01:00
if minetest.get_modpath ( " doc " ) then
2022-02-13 00:56:44 +01:00
for i = 1 , 2 do
2017-03-21 04:58:38 +01:00
doc.add_entry_alias ( " nodes " , " mcl_nether:nether_wart_0 " , " nodes " , " mcl_nether:nether_wart_ " .. i )
end
end