2019-03-08 00:00:09 +01:00
local S = minetest.get_translator ( " mcl_farming " )
2019-12-14 23:42:17 +01:00
local mod_screwdriver = minetest.get_modpath ( " screwdriver " ) ~= nil
local on_rotate
if mod_screwdriver then
on_rotate = screwdriver.rotate_simple
end
2017-03-13 22:53:49 +01:00
-- Seeds
2017-02-10 17:00:29 +01:00
minetest.register_craftitem ( " mcl_farming:pumpkin_seeds " , {
2019-03-08 00:00:09 +01:00
description = S ( " Pumpkin Seeds " ) ,
2020-03-12 01:35:11 +01:00
_tt_help = S ( " Grows on farmland " ) ,
2019-03-15 03:41:24 +01:00
_doc_items_longdesc = S ( " Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds. " ) ,
_doc_items_usagehelp = S ( " Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds. " ) ,
2015-06-29 19:55:56 +02:00
stack_max = 64 ,
2019-02-05 04:06:28 +01:00
inventory_image = " mcl_farming_pumpkin_seeds.png " ,
2017-01-20 11:24:39 +01:00
groups = { craftitem = 1 } ,
2015-06-29 19:55:56 +02:00
on_place = function ( itemstack , placer , pointed_thing )
2017-02-10 18:57:32 +01:00
return mcl_farming : place_seed ( itemstack , placer , pointed_thing , " mcl_farming:pumpkin_1 " )
2015-06-29 19:55:56 +02:00
end
} )
2017-03-14 04:17:35 +01:00
local stem_drop = {
2017-02-22 15:13:17 +01:00
max_items = 1 ,
2019-10-16 08:33:22 +02:00
-- The probabilities are slightly off from the original.
2017-02-22 15:13:17 +01:00
-- Update this drop list when the Minetest drop probability system
-- is more powerful.
items = {
-- 1 seed: Approximation to 20/125 chance
-- 20/125 = 0.16
-- Approximation: 1/6 = ca. 0.166666666666667
{ items = { " mcl_farming:pumpkin_seeds 1 " } , rarity = 6 } ,
-- 2 seeds: Approximation to 4/125 chance
-- 4/125 = 0.032
-- Approximation: 1/31 = ca. 0.032258064516129
{ items = { " mcl_farming:pumpkin_seeds 2 " } , rarity = 31 } ,
-- 3 seeds: 1/125 chance
{ items = { " mcl_farming:pumkin_seeds 3 " } , rarity = 125 } ,
} ,
}
2017-03-14 02:37:42 +01:00
-- Unconnected immature stem
2017-03-13 22:30:37 +01:00
2017-07-21 19:47:20 +02:00
local startcolor = { r = 0x2E , g = 0x9D , b = 0x2E }
local endcolor = { r = 0xFF , g = 0xA8 , b = 0x00 }
2017-03-14 02:37:42 +01:00
for s = 1 , 7 do
local h = s / 8
2017-03-14 05:46:57 +01:00
local doc = s == 1
local longdesc , entry_name
if doc then
2019-03-08 00:00:09 +01:00
entry_name = S ( " Premature Pumpkin Stem " )
longdesc = S ( " Pumpkin stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature pumpkin stems are able to grow pumpkins. " )
2017-03-14 05:46:57 +01:00
end
2017-07-21 19:47:20 +02:00
local colorstring = mcl_farming : stem_color ( startcolor , endcolor , s , 8 )
2018-10-24 18:16:39 +02:00
local texture = " ([combine:16x16:0, " .. ( ( 8 - s ) * 2 ) .. " =mcl_farming_pumpkin_stem_disconnected.png)^[colorize: " .. colorstring .. " :127 "
2017-03-14 02:37:42 +01:00
minetest.register_node ( " mcl_farming:pumpkin_ " .. s , {
2019-03-08 00:00:09 +01:00
description = S ( " Premature Pumpkin Stem (Stage @1) " , s ) ,
2017-03-14 05:46:57 +01:00
_doc_items_entry_name = entry_name ,
_doc_items_create_entry = doc ,
_doc_items_longdesc = longdesc ,
2017-03-14 02:37:42 +01:00
paramtype = " light " ,
walkable = false ,
drawtype = " plantlike " ,
sunlight_propagates = true ,
2017-03-14 04:17:35 +01:00
drop = stem_drop ,
2018-10-24 18:16:39 +02:00
tiles = { texture } ,
inventory_image = texture ,
wield_image = texture ,
2017-03-14 02:37:42 +01:00
selection_box = {
type = " fixed " ,
fixed = {
{ - 0.15 , - 0.5 , - 0.15 , 0.15 , - 0.5 + h , 0.15 }
} ,
2015-06-29 19:55:56 +02:00
} ,
2017-05-20 04:11:14 +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 , } ,
2017-03-14 02:37:42 +01:00
sounds = mcl_sounds.node_sound_leaves_defaults ( ) ,
_mcl_blast_resistance = 0 ,
} )
end
2015-06-29 19:55:56 +02:00
2017-03-13 22:30:37 +01:00
-- Full stem (not connected)
2017-03-14 04:17:35 +01:00
local stem_def = {
2019-03-08 00:00:09 +01:00
description = S ( " Mature Pumpkin Stem " ) ,
_doc_items_longdesc = S ( " A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blocks. A pumpkin can only grow on top of farmland, dirt or a grass block. When a pumpkin is next to a pumpkin stem, the pumpkin stem immediately bends and connects to the pumpkin. A connected pumpkin stem can't grow another pumpkin. As soon all pumpkins around the stem have been removed, it loses the connection and is ready to grow another pumpkin. " ) ,
2017-07-21 19:47:20 +02:00
tiles = { " mcl_farming_pumpkin_stem_disconnected.png^[colorize:#FFA800:127 " } ,
2018-10-24 18:16:39 +02:00
wield_image = " mcl_farming_pumpkin_stem_disconnected.png^[colorize:#FFA800:127 " ,
inventory_image = " mcl_farming_pumpkin_stem_disconnected.png^[colorize:#FFA800:127 " ,
2017-03-14 04:17:35 +01:00
}
2015-06-29 19:55:56 +02:00
2017-03-13 22:30:37 +01:00
-- Template for pumpkin
local pumpkin_base_def = {
2019-03-08 00:00:09 +01:00
description = S ( " Faceless Pumpkin " ) ,
_doc_items_longdesc = S ( " A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds. " ) ,
2019-03-22 22:02:23 +01:00
_doc_items_usagehelp = S ( " To carve a face into the pumpkin, use the shears on the side you want to carve. " ) ,
2017-03-13 22:30:37 +01:00
stack_max = 64 ,
paramtype2 = " facedir " ,
2017-11-23 00:05:31 +01:00
tiles = { " farming_pumpkin_top.png " , " farming_pumpkin_top.png " , " farming_pumpkin_side.png " } ,
groups = { handy = 1 , axey = 1 , plant = 1 , building_block = 1 , dig_by_piston = 1 , enderman_takable = 1 } ,
2017-03-13 22:30:37 +01:00
sounds = mcl_sounds.node_sound_wood_defaults ( ) ,
2019-12-14 23:42:17 +01:00
on_rotate = on_rotate ,
2020-04-17 21:40:13 +02:00
_mcl_blast_resistance = 1 ,
2017-03-13 22:30:37 +01:00
_mcl_hardness = 1 ,
}
2017-11-27 12:40:07 +01:00
minetest.register_node ( " mcl_farming:pumpkin " , pumpkin_base_def )
2015-06-29 19:55:56 +02:00
2017-11-23 00:05:31 +01:00
local pumpkin_face_base_def = table.copy ( pumpkin_base_def )
2019-03-08 00:00:09 +01:00
pumpkin_face_base_def.description = S ( " Pumpkin " )
2020-02-18 22:17:52 +01:00
pumpkin_face_base_def._doc_items_longdesc = S ( " A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds. " )
2019-03-22 22:04:22 +01:00
pumpkin_face_base_def._doc_items_usagehelp = nil
2017-11-23 00:05:31 +01:00
pumpkin_face_base_def.tiles = { " farming_pumpkin_top.png " , " farming_pumpkin_top.png " , " farming_pumpkin_side.png " , " farming_pumpkin_side.png " , " farming_pumpkin_side.png " , " farming_pumpkin_face.png " }
2021-04-14 15:46:52 +02:00
pumpkin_face_base_def.groups . armor = 1
pumpkin_face_base_def.groups . non_combat_armor = 1
2017-11-23 00:05:31 +01:00
pumpkin_face_base_def.groups . armor_head = 1
2021-04-14 15:46:52 +02:00
pumpkin_face_base_def.groups . non_combat_armor_head = 1
2020-02-18 22:17:52 +01:00
pumpkin_face_base_def._mcl_armor_mob_range_factor = 0
pumpkin_face_base_def._mcl_armor_mob_range_mob = " mobs_mc:enderman "
2021-05-04 08:59:01 +02:00
pumpkin_face_base_def._mcl_armor_element = " head "
pumpkin_face_base_def._mcl_armor_texture = " mcl_farming_pumpkin_face.png "
pumpkin_face_base_def._mcl_armor_preview = " mcl_farming_pumpkin_face_preview.png "
2021-05-23 18:50:09 +02:00
2020-02-18 22:17:52 +01:00
if minetest.get_modpath ( " mcl_armor " ) then
2021-05-23 18:50:09 +02:00
local pumpkin_hud = { }
2021-05-24 13:09:47 +02:00
local function add_pumpkin_hud ( player )
2021-05-24 00:31:13 +02:00
local name = player : get_player_name ( )
pumpkin_hud [ name ] = {
pumpkin_blur = player : hud_add ( {
hud_elem_type = " image " ,
position = { x = 0.5 , y = 0.5 } ,
scale = { x = - 100 , y = - 100 } ,
text = " mcl_farming_pumpkin_hud.png " ,
z_index = - 200
} ) ,
--this is a fake crosshair, because hotbar and crosshair doesn't support z_index
--TODO: remove this and add correct z_index values
fake_crosshair = player : hud_add ( {
hud_elem_type = " image " ,
position = { x = 0.5 , y = 0.5 } ,
scale = { x = 1 , y = 1 } ,
text = " crosshair.png " ,
z_index = - 100
} )
}
2021-05-23 18:50:09 +02:00
end
2021-05-24 13:09:47 +02:00
local function remove_pumpkin_hud ( player )
2021-05-24 00:31:13 +02:00
local name = player : get_player_name ( )
if pumpkin_hud [ name ] then
player : hud_remove ( pumpkin_hud [ name ] . pumpkin_blur )
player : hud_remove ( pumpkin_hud [ name ] . fake_crosshair )
pumpkin_hud [ name ] = nil
2021-05-23 18:50:09 +02:00
end
end
2021-05-23 19:38:53 +02:00
2021-04-14 15:46:52 +02:00
pumpkin_face_base_def.on_secondary_use = mcl_armor.equip_on_use
2021-05-23 18:50:09 +02:00
pumpkin_face_base_def._on_equip = add_pumpkin_hud
pumpkin_face_base_def._on_unequip = remove_pumpkin_hud
minetest.register_on_joinplayer ( function ( player )
pumpkin_head = player : get_inventory ( ) : get_stack ( " armor " , 2 ) : get_name ( ) == " mcl_farming:pumpkin_face "
if pumpkin_head then
add_pumpkin_hud ( player )
end
end )
minetest.register_on_dieplayer ( function ( player )
remove_pumpkin_hud ( player )
end )
2021-05-24 00:31:13 +02:00
minetest.register_on_leaveplayer ( function ( player )
remove_pumpkin_hud ( player )
end )
2020-02-18 22:17:52 +01:00
end
2017-11-23 00:05:31 +01:00
2017-03-13 22:30:37 +01:00
-- Register stem growth
2017-04-01 03:54:58 +02:00
mcl_farming : add_plant ( " plant_pumpkin_stem " , " mcl_farming:pumpkintige_unconnect " , { " mcl_farming:pumpkin_1 " , " mcl_farming:pumpkin_2 " , " mcl_farming:pumpkin_3 " , " mcl_farming:pumpkin_4 " , " mcl_farming:pumpkin_5 " , " mcl_farming:pumpkin_6 " , " mcl_farming:pumpkin_7 " } , 30 , 5 )
2015-06-29 19:55:56 +02:00
2017-03-13 22:30:37 +01:00
-- Register actual pumpkin, connected stems and stem-to-pumpkin growth
2017-11-27 12:40:07 +01:00
mcl_farming : add_gourd ( " mcl_farming:pumpkintige_unconnect " , " mcl_farming:pumpkintige_linked " , " mcl_farming:pumpkintige_unconnect " , stem_def , stem_drop , " mcl_farming:pumpkin_face " , pumpkin_face_base_def , 30 , 15 , " mcl_farming_pumpkin_stem_connected.png^[colorize:#FFA800:127 " ,
2017-07-17 15:00:20 +02:00
function ( pos )
-- Attempt to spawn iron golem or snow golem
mobs_mc.tools . check_iron_golem_summon ( pos )
mobs_mc.tools . check_snow_golem_summon ( pos )
end )
2015-06-29 19:55:56 +02:00
2017-03-13 22:30:37 +01:00
-- Jack o'Lantern
2017-01-31 12:35:59 +01:00
minetest.register_node ( " mcl_farming:pumpkin_face_light " , {
2019-03-08 00:00:09 +01:00
description = S ( " Jack o'Lantern " ) ,
_doc_items_longdesc = S ( " A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly. " ) ,
2017-03-11 16:36:05 +01:00
is_ground_content = false ,
2015-06-29 19:55:56 +02:00
stack_max = 64 ,
2017-06-13 14:18:12 +02:00
paramtype = " light " ,
2015-06-29 19:55:56 +02:00
paramtype2 = " facedir " ,
2019-12-14 18:57:17 +01:00
light_source = minetest.LIGHT_MAX ,
2015-06-29 19:55:56 +02:00
tiles = { " farming_pumpkin_top.png " , " farming_pumpkin_top.png " , " farming_pumpkin_side.png " , " farming_pumpkin_side.png " , " farming_pumpkin_side.png " , " farming_pumpkin_face_light.png " } ,
2017-03-29 22:58:31 +02:00
groups = { handy = 1 , axey = 1 , building_block = 1 , dig_by_piston = 1 } ,
2017-02-11 18:46:23 +01:00
sounds = mcl_sounds.node_sound_wood_defaults ( ) ,
2017-07-05 19:13:00 +02:00
on_construct = function ( pos )
-- Attempt to spawn iron golem or snow golem
mobs_mc.tools . check_iron_golem_summon ( pos )
mobs_mc.tools . check_snow_golem_summon ( pos )
end ,
2019-12-14 23:42:17 +01:00
on_rotate = on_rotate ,
2020-04-17 21:40:13 +02:00
_mcl_blast_resistance = 1 ,
2017-02-27 01:26:07 +01:00
_mcl_hardness = 1 ,
2015-06-29 19:55:56 +02:00
} )
2017-03-13 22:30:37 +01:00
-- Crafting
2015-06-29 19:55:56 +02:00
minetest.register_craft ( {
2017-01-31 12:35:59 +01:00
output = " mcl_farming:pumpkin_face_light " ,
recipe = { { " mcl_farming:pumpkin_face " } ,
2017-02-10 14:41:36 +01:00
{ " mcl_torches:torch " } }
2015-06-29 19:55:56 +02:00
} )
minetest.register_craft ( {
2017-02-10 17:00:29 +01:00
output = " mcl_farming:pumpkin_seeds 4 " ,
2017-11-23 00:05:31 +01:00
recipe = { { " mcl_farming:pumpkin " } }
2015-06-29 19:55:56 +02:00
} )
2017-11-27 12:40:07 +01:00
minetest.register_craft ( {
output = " mcl_farming:pumpkin_seeds 4 " ,
recipe = { { " mcl_farming:pumpkin_face " } }
} )
2017-02-01 15:00:22 +01:00
minetest.register_craftitem ( " mcl_farming:pumpkin_pie " , {
2019-03-08 00:00:09 +01:00
description = S ( " Pumpkin Pie " ) ,
_doc_items_longdesc = S ( " A pumpkin pie is a tasty food item which can be eaten. " ) ,
2017-02-01 15:00:22 +01:00
stack_max = 64 ,
inventory_image = " mcl_farming_pumpkin_pie.png " ,
wield_image = " mcl_farming_pumpkin_pie.png " ,
2017-02-16 17:45:33 +01:00
on_place = minetest.item_eat ( 8 ) ,
on_secondary_use = minetest.item_eat ( 8 ) ,
2017-02-01 15:00:22 +01:00
groups = { food = 2 , eatable = 8 } ,
2017-05-20 17:45:04 +02:00
_mcl_saturation = 4.8 ,
2017-02-01 15:00:22 +01:00
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_farming:pumpkin_pie " ,
2017-11-23 00:05:31 +01:00
recipe = { " mcl_farming:pumpkin " , " mcl_core:sugar " , " mcl_throwing:egg " } ,
2017-02-01 15:00:22 +01:00
} )
2017-11-28 08:31:22 +01:00
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_farming:pumpkin_pie " ,
recipe = { " mcl_farming:pumpkin_face " , " mcl_core:sugar " , " mcl_throwing:egg " } ,
} )
2017-03-21 04:56:16 +01:00
if minetest.get_modpath ( " doc " ) then
for i = 2 , 8 do
doc.add_entry_alias ( " nodes " , " mcl_farming:pumpkin_1 " , " nodes " , " mcl_farming:pumpkin_ " .. i )
end
end