2015-06-29 19:55:56 +02:00
-- To make recipes that will work with any dye ever made by anybody, define
-- them based on groups.
-- You can select any group of groups, based on your need for amount of colors.
-- basecolor: 9, excolor: 17, unicolor: 89
--
-- Example of one shapeless recipe using a color group:
-- Note: As this uses basecolor_*, you'd need 9 of these.
-- minetest.register_craft({
-- type = "shapeless",
2021-05-29 16:12:33 +02:00
-- output = "<mod>:item_yellow",
-- recipe = {"<mod>:item_no_color", "group:basecolor_yellow"},
2015-06-29 19:55:56 +02:00
-- })
2017-02-14 18:20:54 +01:00
mcl_dye = { }
2018-05-31 05:45:57 +02:00
2021-05-29 16:12:33 +02:00
local S = minetest.get_translator ( minetest.get_current_modname ( ) )
local math = math
local string = string
2019-03-08 00:00:09 +01:00
2015-06-29 19:55:56 +02:00
-- Base color groups:
-- - basecolor_white
-- - basecolor_grey
-- - basecolor_black
-- - basecolor_red
-- - basecolor_yellow
-- - basecolor_green
-- - basecolor_cyan
-- - basecolor_blue
-- - basecolor_magenta
-- Extended color groups (* = equal to a base color):
-- * excolor_white
-- - excolor_lightgrey
-- * excolor_grey
-- - excolor_darkgrey
-- * excolor_black
-- * excolor_red
-- - excolor_orange
-- * excolor_yellow
-- - excolor_lime
-- * excolor_green
-- - excolor_aqua
-- * excolor_cyan
-- - excolor_sky_blue
-- * excolor_blue
-- - excolor_violet
-- * excolor_magenta
-- - excolor_red_violet
-- The whole unifieddyes palette as groups:
-- - unicolor_<excolor>
-- For the following, no white/grey/black is allowed:
-- - unicolor_medium_<excolor>
-- - unicolor_dark_<excolor>
-- - unicolor_light_<excolor>
-- - unicolor_<excolor>_s50
-- - unicolor_medium_<excolor>_s50
-- - unicolor_dark_<excolor>_s50
-- This collection of colors is partly a historic thing, partly something else.
2022-12-23 01:25:26 +01:00
local dyes = {
{ " white " , S ( " White Dye " ) , { basecolor_white = 1 , excolor_white = 1 , unicolor_white = 1 } } ,
{ " grey " , S ( " Light Grey Dye " ) , { basecolor_grey = 1 , excolor_grey = 1 , unicolor_grey = 1 } } ,
{ " dark_grey " , S ( " Grey Dye " ) , { basecolor_grey = 1 , excolor_darkgrey = 1 , unicolor_darkgrey = 1 } } ,
{ " black " , S ( " Black Dye " ) , { basecolor_black = 1 , excolor_black = 1 , unicolor_black = 1 } } ,
{ " violet " , S ( " Purple Dye " ) , { basecolor_magenta = 1 , excolor_violet = 1 , unicolor_violet = 1 } } ,
{ " blue " , S ( " Blue Dye " ) , { basecolor_blue = 1 , excolor_blue = 1 , unicolor_blue = 1 } } ,
{ " lightblue " , S ( " Light Blue Dye " ) , { basecolor_blue = 1 , excolor_blue = 1 , unicolor_light_blue = 1 } } ,
{ " cyan " , S ( " Cyan Dye " ) , { basecolor_cyan = 1 , excolor_cyan = 1 , unicolor_cyan = 1 } } ,
2023-03-11 09:16:25 +01:00
{ " dark_green " , S ( " Green Dye " ) , { basecolor_green = 1 , excolor_green = 1 , unicolor_dark_green = 1 } } ,
2022-12-23 01:25:26 +01:00
{ " green " , S ( " Lime Dye " ) , { basecolor_green = 1 , excolor_green = 1 , unicolor_green = 1 } } ,
2023-03-11 09:16:25 +01:00
{ " yellow " , S ( " Yellow Dye " ) , { basecolor_yellow = 1 , excolor_yellow = 1 , unicolor_yellow = 1 } } ,
2022-12-23 01:25:26 +01:00
{ " brown " , S ( " Brown Dye " ) , { basecolor_brown = 1 , excolor_orange = 1 , unicolor_dark_orange = 1 } } ,
{ " orange " , S ( " Orange Dye " ) , { basecolor_orange = 1 , excolor_orange = 1 , unicolor_orange = 1 } } ,
2023-03-11 09:16:25 +01:00
{ " red " , S ( " Red Dye " ) , { basecolor_red = 1 , excolor_red = 1 , unicolor_red = 1 } } ,
2022-12-23 01:25:26 +01:00
{ " magenta " , S ( " Magenta Dye " ) , { basecolor_magenta = 1 , excolor_red_violet = 1 , unicolor_red_violet = 1 } } ,
{ " pink " , S ( " Pink Dye " ) , { basecolor_red = 1 , excolor_red = 1 , unicolor_light_red = 1 } } ,
2015-06-29 19:55:56 +02:00
}
2022-12-23 01:25:26 +01:00
-- Other mods can use these for looping through available colors
mcl_dye.basecolors = { " white " , " grey " , " black " , " magenta " , " blue " , " cyan " , " green " , " yellow " , " orange " , " red " , " brown " }
mcl_dye.excolors = { " white " , " grey " , " darkgrey " , " black " , " violet " , " blue " , " cyan " , " green " , " yellow " , " orange " , " red " , " red_violet " }
2019-03-23 00:19:17 +01:00
2022-12-23 01:25:26 +01:00
local unicolor_to_dye_id = { }
for d = 1 , # dyes do
for k , _ in pairs ( dyes [ d ] [ 3 ] ) do
2018-05-31 05:45:57 +02:00
if string.sub ( k , 1 , 9 ) == " unicolor_ " then
2022-12-23 01:25:26 +01:00
unicolor_to_dye_id [ k ] = dyes [ d ] [ 1 ]
2018-05-31 05:45:57 +02:00
end
end
end
2022-12-23 01:25:26 +01:00
-- Takes an unicolor group name (e.g. “unicolor_white”) and returns a
-- corresponding dye name (if it exists), nil otherwise.
2021-05-29 16:12:33 +02:00
function mcl_dye . unicolor_to_dye ( unicolor_group )
2022-12-23 01:25:26 +01:00
local color = unicolor_to_dye_id [ unicolor_group ]
2019-03-15 00:10:07 +01:00
if color then
return " mcl_dye: " .. color
else
return nil
end
2018-05-31 05:45:57 +02:00
end
2022-12-23 01:25:26 +01:00
-- Define dye items.
--
for _ , row in pairs ( dyes ) do
local name , desc , grps = unpack ( row )
minetest.register_craftitem ( " mcl_dye: " .. name , {
inventory_image = " mcl_dye_ " .. name .. " .png " ,
description = desc ,
2022-12-22 22:44:21 +01:00
_doc_items_longdesc = S ( " This item is a dye which is used for dyeing and crafting. " ) ,
_doc_items_usagehelp = S ( " Rightclick on a sheep to dye its wool. Other things are dyed by crafting. " ) ,
2022-12-23 01:25:26 +01:00
groups = table.update ( { craftitem = 1 , dye = 1 } , grps )
2022-12-22 22:44:21 +01:00
} )
2015-06-29 19:55:56 +02:00
end
2022-12-23 01:25:26 +01:00
-- Bone meal code to be moved into its own mod.
--
2021-11-06 14:12:03 +01:00
function mcl_dye . add_bone_meal_particle ( pos , def )
if not def then
def = { }
end
2021-06-03 20:13:13 +02:00
minetest.add_particlespawner ( {
2021-11-06 14:12:03 +01:00
amount = def.amount or 10 ,
time = def.time or 0.1 ,
minpos = def.minpos or vector.subtract ( pos , 0.5 ) ,
maxpos = def.maxpos or vector.add ( pos , 0.5 ) ,
2021-11-12 16:41:09 +01:00
minvel = def.minvel or vector.new ( - 0.01 , 0.01 , - 0.01 ) ,
maxvel = def.maxvel or vector.new ( 0.01 , 0.01 , 0.01 ) ,
2021-11-06 14:12:03 +01:00
minacc = def.minacc or vector.new ( 0 , 0 , 0 ) ,
2021-11-08 14:16:20 +01:00
maxacc = def.maxacc or vector.new ( 0 , 0 , 0 ) ,
2021-11-06 14:12:03 +01:00
minexptime = def.minexptime or 1 ,
maxexptime = def.maxexptime or 4 ,
minsize = def.minsize or 0.7 ,
maxsize = def.maxsize or 2.4 ,
2021-06-03 20:13:13 +02:00
texture = " mcl_particles_bonemeal.png^[colorize:#00EE00:125 " , -- TODO: real MC color
2021-11-12 16:41:09 +01:00
glow = def.glow or 1 ,
2021-06-03 20:13:13 +02:00
} )
end
2017-02-11 19:03:26 +01:00
2021-11-06 14:12:03 +01:00
mcl_dye.bone_meal_callbacks = { }
function mcl_dye . register_on_bone_meal_apply ( func )
table.insert ( mcl_dye.bone_meal_callbacks , func )
end
2023-01-05 04:49:17 +01:00
local function apply_bone_meal ( pointed_thing , user )
2017-09-13 05:52:26 +02:00
-- Bone meal currently spawns all flowers found in the plains.
2019-03-23 00:19:17 +01:00
local flowers_table_plains = {
2017-02-11 19:03:26 +01:00
" mcl_flowers:dandelion " ,
2017-05-26 21:52:41 +02:00
" mcl_flowers:dandelion " ,
" mcl_flowers:poppy " ,
2017-02-11 19:03:26 +01:00
" mcl_flowers:oxeye_daisy " ,
" mcl_flowers:tulip_orange " ,
" mcl_flowers:tulip_red " ,
" mcl_flowers:tulip_white " ,
" mcl_flowers:tulip_pink " ,
" mcl_flowers:azure_bluet " ,
}
2019-03-23 00:19:17 +01:00
local flowers_table_simple = {
" mcl_flowers:dandelion " ,
" mcl_flowers:poppy " ,
}
local flowers_table_swampland = {
" mcl_flowers:blue_orchid " ,
}
local flowers_table_flower_forest = {
2017-11-14 23:52:03 +01:00
" mcl_flowers:dandelion " ,
" mcl_flowers:poppy " ,
2019-03-23 00:19:17 +01:00
" mcl_flowers:oxeye_daisy " ,
" mcl_flowers:tulip_orange " ,
" mcl_flowers:tulip_red " ,
" mcl_flowers:tulip_white " ,
" mcl_flowers:tulip_pink " ,
" mcl_flowers:azure_bluet " ,
" mcl_flowers:allium " ,
2017-11-14 23:52:03 +01:00
}
2017-02-11 19:03:26 +01:00
2017-09-13 06:12:56 +02:00
local pos = pointed_thing.under
local n = minetest.get_node ( pos )
2017-02-11 19:03:26 +01:00
if n.name == " " then return false end
2021-11-06 14:12:03 +01:00
2024-02-29 12:23:48 +01:00
if mcl_util.check_area_protection ( pos , pointed_thing.above , user ) then
return false
end
2021-11-06 14:12:03 +01:00
for _ , func in pairs ( mcl_dye.bone_meal_callbacks ) do
if func ( pointed_thing , user ) then
return true
end
end
2017-04-01 02:29:36 +02:00
if minetest.get_item_group ( n.name , " sapling " ) >= 1 then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-04-01 03:54:58 +02:00
-- Saplings: 45% chance to advance growth stage
2023-01-05 04:49:17 +01:00
if math.random ( 1 , 100 ) <= 45 then
2023-06-19 18:14:30 +02:00
if n.name == " mcl_cherry_blossom:cherrysapling " then
return mcl_cherry_blossom.generate_cherry_tree ( pos ) -- If cherry blossom sapling, run that callback instead.
else
return mcl_core.grow_sapling ( pos , n )
end
2017-04-01 02:29:36 +02:00
end
2017-08-03 18:58:35 +02:00
elseif minetest.get_item_group ( n.name , " mushroom " ) == 1 then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-08-03 18:58:35 +02:00
-- Try to grow huge mushroom
-- Must be on a dirt-type block
2023-01-05 04:49:17 +01:00
local below = minetest.get_node ( { x = pos.x , y = pos.y - 1 , z = pos.z } )
2017-11-14 23:44:53 +01:00
if below.name ~= " mcl_core:mycelium " and below.name ~= " mcl_core:dirt " and minetest.get_item_group ( below.name , " grass_block " ) ~= 1 and below.name ~= " mcl_core:coarse_dirt " and below.name ~= " mcl_core:podzol " then
2017-08-03 18:58:35 +02:00
return false
end
-- Select schematic
local schematic , offset , height
if n.name == " mcl_mushrooms:mushroom_brown " then
schematic = minetest.get_modpath ( " mcl_mushrooms " ) .. " /schematics/mcl_mushrooms_huge_brown.mts "
2017-09-08 22:17:03 +02:00
offset = { x = - 3 , y = - 1 , z = - 3 }
2017-08-03 18:58:35 +02:00
height = 8
elseif n.name == " mcl_mushrooms:mushroom_red " then
schematic = minetest.get_modpath ( " mcl_mushrooms " ) .. " /schematics/mcl_mushrooms_huge_red.mts "
2017-09-08 22:17:03 +02:00
offset = { x = - 2 , y = - 1 , z = - 2 }
2017-08-03 18:58:35 +02:00
height = 8
else
return false
end
-- 40% chance
2021-06-03 20:13:13 +02:00
if math.random ( 1 , 100 ) <= 40 then
2017-08-03 18:58:35 +02:00
-- Check space requirements
for i = 1 , 3 do
local cpos = vector.add ( pos , { x = 0 , y = i , z = 0 } )
if minetest.get_node ( cpos ) . name ~= " air " then
return false
end
end
local yoff = 3
local minp , maxp = { x = pos.x - 3 , y = pos.y + yoff , z = pos.z - 3 } , { x = pos.x + 3 , y = pos.y + yoff + ( height - 3 ) , z = pos.z + 3 }
local diff = vector.subtract ( maxp , minp )
diff = vector.add ( diff , { x = 1 , y = 1 , z = 1 } )
local totalnodes = diff.x * diff.y * diff.z
local goodnodes = minetest.find_nodes_in_area ( minp , maxp , { " air " , " group:leaves " } )
if # goodnodes < totalnodes then
return false
end
-- Place the huge mushroom
minetest.remove_node ( pos )
local place_pos = vector.add ( pos , offset )
local ok = minetest.place_schematic ( place_pos , schematic , 0 , nil , false )
return ok ~= nil
end
return false
2017-04-01 03:54:58 +02:00
-- Wheat, Potato, Carrot, Pumpkin Stem, Melon Stem: Advance by 2-5 stages
2021-05-29 16:12:33 +02:00
elseif string.find ( n.name , " mcl_farming:wheat_ " ) then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-04-01 03:54:58 +02:00
local stages = math.random ( 2 , 5 )
2019-02-08 05:36:43 +01:00
return mcl_farming : grow_plant ( " plant_wheat " , pos , n , stages , true )
2021-05-29 16:12:33 +02:00
elseif string.find ( n.name , " mcl_farming:potato_ " ) then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-04-01 03:54:58 +02:00
local stages = math.random ( 2 , 5 )
2019-02-08 05:36:43 +01:00
return mcl_farming : grow_plant ( " plant_potato " , pos , n , stages , true )
2021-05-29 16:12:33 +02:00
elseif string.find ( n.name , " mcl_farming:carrot_ " ) then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-04-01 03:54:58 +02:00
local stages = math.random ( 2 , 5 )
2019-02-08 05:36:43 +01:00
return mcl_farming : grow_plant ( " plant_carrot " , pos , n , stages , true )
2021-05-29 16:12:33 +02:00
elseif string.find ( n.name , " mcl_farming:pumpkin_ " ) then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-04-01 03:54:58 +02:00
local stages = math.random ( 2 , 5 )
2019-02-08 05:36:43 +01:00
return mcl_farming : grow_plant ( " plant_pumpkin_stem " , pos , n , stages , true )
2021-05-29 16:12:33 +02:00
elseif string.find ( n.name , " mcl_farming:melontige_ " ) then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-04-01 03:54:58 +02:00
local stages = math.random ( 2 , 5 )
2019-02-08 05:36:43 +01:00
return mcl_farming : grow_plant ( " plant_melon_stem " , pos , n , stages , true )
2021-05-29 16:12:33 +02:00
elseif string.find ( n.name , " mcl_farming:beetroot_ " ) then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-04-01 03:54:58 +02:00
-- Beetroot: 75% chance to advance to next stage
2021-05-29 16:12:33 +02:00
if math.random ( 1 , 100 ) <= 75 then
2019-02-08 05:36:43 +01:00
return mcl_farming : grow_plant ( " plant_beetroot " , pos , n , 1 , true )
2017-02-11 19:03:26 +01:00
end
2022-10-26 04:46:41 +02:00
elseif string.find ( n.name , " mcl_farming:sweet_berry_bush_ " ) then
mcl_dye.add_bone_meal_particle ( pos )
2022-10-27 00:19:38 +02:00
if n.name == " mcl_farming:sweet_berry_bush_3 " then
return minetest.add_item ( vector.offset ( pos , math.random ( ) - 0.5 , math.random ( ) - 0.5 , math.random ( ) - 0.5 ) , " mcl_farming:sweet_berry " )
else
2023-01-01 21:55:44 +01:00
return mcl_farming : grow_plant ( " plant_sweet_berry_bush " , pos , n , 0 , true )
2022-10-27 00:19:38 +02:00
end
2017-02-18 20:23:26 +01:00
elseif n.name == " mcl_cocoas:cocoa_1 " or n.name == " mcl_cocoas:cocoa_2 " then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-04-01 03:54:58 +02:00
-- Cocoa: Advance by 1 stage
2017-02-18 20:23:26 +01:00
mcl_cocoas.grow ( pos )
2017-02-18 19:25:34 +01:00
return true
2017-11-14 23:44:53 +01:00
elseif minetest.get_item_group ( n.name , " grass_block " ) == 1 then
2017-04-01 03:54:58 +02:00
-- Grass Block: Generate tall grass and random flowers all over the place
2021-11-10 18:15:27 +01:00
for i = - 7 , 7 do
for j = - 7 , 7 do
for y = - 1 , 1 do
pos = vector.offset ( pointed_thing.above , i , y , j )
n = minetest.get_node ( pos )
local n2 = minetest.get_node ( vector.offset ( pos , 0 , - 1 , 0 ) )
2017-02-11 19:03:26 +01:00
2021-11-10 18:15:27 +01:00
if n.name ~= " " and n.name == " air " and ( minetest.get_item_group ( n2.name , " grass_block_no_snow " ) == 1 ) then
-- Randomly generate flowers, tall grass or nothing
if math.random ( 1 , 100 ) <= 90 / ( ( math.abs ( i ) + math.abs ( j ) ) / 2 ) then
-- 90% tall grass, 10% flower
mcl_dye.add_bone_meal_particle ( pos , { amount = 4 } )
if math.random ( 1 , 100 ) <= 90 then
local col = n2.param2
minetest.add_node ( pos , { name = " mcl_flowers:tallgrass " , param2 = col } )
2017-11-14 23:52:03 +01:00
else
2021-11-10 18:15:27 +01:00
local flowers_table
if mg_name == " v6 " then
2019-03-23 00:19:17 +01:00
flowers_table = flowers_table_plains
else
2021-11-10 18:15:27 +01:00
local biome = minetest.get_biome_name ( minetest.get_biome_data ( pos ) . biome )
if biome == " Swampland " or biome == " Swampland_shore " or biome == " Swampland_ocean " or biome == " Swampland_deep_ocean " or biome == " Swampland_underground " then
flowers_table = flowers_table_swampland
elseif biome == " FlowerForest " or biome == " FlowerForest_beach " or biome == " FlowerForest_ocean " or biome == " FlowerForest_deep_ocean " or biome == " FlowerForest_underground " then
flowers_table = flowers_table_flower_forest
elseif biome == " Plains " or biome == " Plains_beach " or biome == " Plains_ocean " or biome == " Plains_deep_ocean " or biome == " Plains_underground " or biome == " SunflowerPlains " or biome == " SunflowerPlains_ocean " or biome == " SunflowerPlains_deep_ocean " or biome == " SunflowerPlains_underground " then
flowers_table = flowers_table_plains
else
flowers_table = flowers_table_simple
end
2019-03-23 00:19:17 +01:00
end
2021-11-10 18:15:27 +01:00
minetest.add_node ( pos , { name = flowers_table [ math.random ( 1 , # flowers_table ) ] } )
2017-11-14 23:52:03 +01:00
end
2017-05-26 21:52:41 +02:00
end
2017-02-11 19:03:26 +01:00
end
end
end
end
return true
2017-03-14 19:40:49 +01:00
-- Double flowers: Drop corresponding item
elseif n.name == " mcl_flowers:rose_bush " or n.name == " mcl_flowers:rose_bush_top " then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-03-14 19:40:49 +01:00
minetest.add_item ( pos , " mcl_flowers:rose_bush " )
return true
elseif n.name == " mcl_flowers:peony " or n.name == " mcl_flowers:peony_top " then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-03-14 19:40:49 +01:00
minetest.add_item ( pos , " mcl_flowers:peony " )
return true
elseif n.name == " mcl_flowers:lilac " or n.name == " mcl_flowers:lilac_top " then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-03-14 19:40:49 +01:00
minetest.add_item ( pos , " mcl_flowers:lilac " )
return true
elseif n.name == " mcl_flowers:sunflower " or n.name == " mcl_flowers:sunflower_top " then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-03-14 19:40:49 +01:00
minetest.add_item ( pos , " mcl_flowers:sunflower " )
return true
2017-03-14 20:05:07 +01:00
elseif n.name == " mcl_flowers:tallgrass " then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-04-01 03:54:58 +02:00
-- Tall Grass: Grow into double tallgrass
2017-03-14 19:35:37 +01:00
local toppos = { x = pos.x , y = pos.y + 1 , z = pos.z }
local topnode = minetest.get_node ( toppos )
if minetest.registered_nodes [ topnode.name ] . buildable_to then
2017-11-16 03:13:19 +01:00
minetest.set_node ( pos , { name = " mcl_flowers:double_grass " , param2 = n.param2 } )
minetest.set_node ( toppos , { name = " mcl_flowers:double_grass_top " , param2 = n.param2 } )
2017-11-14 23:44:53 +01:00
return true
end
2017-03-14 19:40:49 +01:00
2023-01-06 00:31:21 +01:00
--[[
Here for when Bonemeal becomes an api , there ' s code if needed for handling applying to bamboo.
-- Handle applying bonemeal to bamboo.
2023-01-05 04:49:17 +01:00
elseif mcl_bamboo.is_bamboo ( n.name ) then
local success = mcl_bamboo.grow_bamboo ( pos , true )
if success then
mcl_dye.add_bone_meal_particle ( pos )
end
return success
2023-01-06 00:31:21 +01:00
--]]
2017-03-14 19:35:37 +01:00
elseif n.name == " mcl_flowers:fern " then
2021-11-06 14:12:03 +01:00
mcl_dye.add_bone_meal_particle ( pos )
2017-04-01 03:54:58 +02:00
-- Fern: Grow into large fern
2017-03-14 19:35:37 +01:00
local toppos = { x = pos.x , y = pos.y + 1 , z = pos.z }
local topnode = minetest.get_node ( toppos )
if minetest.registered_nodes [ topnode.name ] . buildable_to then
2017-11-16 03:13:19 +01:00
minetest.set_node ( pos , { name = " mcl_flowers:double_fern " , param2 = n.param2 } )
minetest.set_node ( toppos , { name = " mcl_flowers:double_fern_top " , param2 = n.param2 } )
2017-11-14 23:44:53 +01:00
return true
end
2017-02-11 19:03:26 +01:00
end
2017-03-14 19:35:37 +01:00
return false
2017-02-11 19:03:26 +01:00
end
2022-11-16 17:24:05 +01:00
mcl_dye.apply_bone_meal = apply_bone_meal
2022-12-23 01:25:26 +01:00
-- Bone meal item registration.
--
-- To be moved into its own mod.
--
2022-12-22 22:44:21 +01:00
minetest.register_craftitem ( " :mcl_bone_meal:bone_meal " , {
inventory_image = " mcl_bone_meal_bone_meal.png " ,
2019-03-08 00:00:09 +01:00
description = S ( " Bone Meal " ) ,
2020-02-19 04:54:17 +01:00
_tt_help = S ( " Speeds up plant growth " ) ,
2019-03-08 00:00:09 +01:00
_doc_items_longdesc = S ( " Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants. " ) ,
_doc_items_usagehelp = S ( " Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place. " ) ,
2015-06-29 19:55:56 +02:00
stack_max = 64 ,
2021-05-23 00:01:53 +02:00
on_place = function ( itemstack , user , pointed_thing )
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 user and not user : 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 , user , itemstack ) or itemstack
end
end
-- Use the bone meal on the ground
2021-11-06 14:12:03 +01:00
if ( apply_bone_meal ( pointed_thing , user ) and ( not minetest.is_creative_enabled ( user : get_player_name ( ) ) ) ) then
2017-01-05 07:23:25 +01:00
itemstack : take_item ( )
end
return itemstack
2015-06-29 19:55:56 +02:00
end ,
2018-02-01 22:45:19 +01:00
_on_dispense = function ( stack , pos , droppos , dropnode , dropdir )
-- Apply bone meal, if possible
local pointed_thing
if dropnode.name == " air " then
pointed_thing = { above = droppos , under = { x = droppos.x , y = droppos.y - 1 , z = droppos.z } }
else
pointed_thing = { above = pos , under = droppos }
end
2021-11-06 14:12:03 +01:00
local success = apply_bone_meal ( pointed_thing , nil )
2018-02-01 22:45:19 +01:00
if success then
stack : take_item ( )
end
return stack
end ,
2021-03-08 10:56:43 +01:00
_dispense_into_walkable = true
2015-06-29 19:55:56 +02:00
} )
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2022-12-22 22:44:21 +01:00
output = " mcl_bone_meal:bone_meal 3 " ,
recipe = { { " mcl_mobitems:bone " } } ,
2017-03-15 00:51:11 +01:00
} )
2017-01-05 07:23:25 +01:00
2022-12-23 01:25:26 +01:00
-- Dye creation recipes.
--
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2022-12-22 22:44:21 +01:00
output = " mcl_dye:white " ,
recipe = { { " mcl_bone_meal:bone_meal " } } ,
2017-01-05 07:23:25 +01:00
} )
minetest.register_craft ( {
2022-12-22 17:26:13 +01:00
output = " mcl_dye:black " ,
recipe = { { " mcl_mobitems:ink_sac " } } ,
2017-01-05 07:23:25 +01:00
} )
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:yellow " ,
2017-01-31 23:32:56 +01:00
recipe = { { " mcl_flowers:dandelion " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:yellow 2 " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:sunflower " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2022-12-22 18:10:59 +01:00
minetest.register_craft ( {
output = " mcl_dye:blue " ,
recipe = { { " mcl_core:lapis " } } ,
} )
2022-12-23 01:25:26 +01:00
2023-02-14 03:35:45 +01:00
--[[ Uncomment when crafting blue dye back into lapis is removed.
2023-02-12 03:38:28 +01:00
minetest.register_craft ( {
output = " mcl_dye:blue " ,
recipe = { { " mcl_flowers:cornflower " } } ,
2023-02-14 03:35:45 +01:00
} ) ] ]
2023-02-12 03:38:28 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:lightblue " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:blue_orchid " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:grey " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:azure_bluet " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:grey " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:oxeye_daisy " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:grey " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:tulip_white " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:magenta " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:allium " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:magenta 2 " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:lilac " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:orange " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:tulip_orange " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2022-12-22 19:32:15 +01:00
minetest.register_craft ( {
output = " mcl_dye:brown " ,
recipe = { { " mcl_cocoas:cocoa_beans " } } ,
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:pink " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:tulip_pink " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:pink 2 " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:peony " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-03-15 00:51:11 +01:00
minetest.register_craft ( {
output = " mcl_dye:red " ,
recipe = { { " mcl_farming:beetroot_item " } } ,
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:red " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:poppy " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:red " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:tulip_red " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:red 2 " ,
2017-01-31 12:03:18 +01:00
recipe = { { " mcl_flowers:rose_bush " } } ,
2017-01-05 07:23:25 +01:00
} )
2022-12-23 01:25:26 +01:00
2023-02-14 03:35:45 +01:00
--[[Uncomment when crafting white dye back into bonemeal is removed
2023-02-12 03:25:05 +01:00
minetest.register_craft ( {
output = " mcl_dye:white " ,
recipe = { { " mcl_flowers:lily_of_the_valley " } } ,
2023-02-14 03:35:45 +01:00
} ) ] ]
2023-02-12 03:25:05 +01:00
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
type = " cooking " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:dark_green " ,
2017-01-31 23:32:56 +01:00
recipe = " mcl_core:cactus " ,
2017-01-05 07:23:25 +01:00
cooktime = 10 ,
} )
2022-12-22 17:26:13 +01:00
2023-02-11 22:28:54 +01:00
minetest.register_craft ( {
type = " cooking " ,
output = " mcl_dye:green " ,
recipe = " group:sea_pickle " ,
cooktime = 10 ,
} )
2022-12-23 01:25:26 +01:00
-- Dye mixing recipes.
--
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
2022-12-23 01:25:26 +01:00
type = " shapeless " ,
output = " mcl_dye:dark_grey 2 " ,
recipe = { " mcl_dye:black " , " mcl_dye:white " } ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:lightblue 2 " ,
recipe = { " mcl_dye:blue " , " mcl_dye:white " } ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:grey 3 " ,
recipe = { " mcl_dye:black " , " mcl_dye:white " , " mcl_dye:white " } ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:grey 2 " ,
recipe = { " mcl_dye:dark_grey " , " mcl_dye:white " } ,
} )
2022-12-22 17:26:13 +01:00
2022-12-23 01:25:26 +01:00
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:green 2 " ,
recipe = { " mcl_dye:dark_green " , " mcl_dye:white " } ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:magenta 4 " ,
recipe = { " mcl_dye:blue " , " mcl_dye:white " , " mcl_dye:red " , " mcl_dye:red " } ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:magenta 3 " ,
recipe = { " mcl_dye:pink " , " mcl_dye:red " , " mcl_dye:blue " } ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:magenta 2 " ,
recipe = { " mcl_dye:violet " , " mcl_dye:pink " } ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:pink 2 " ,
recipe = { " mcl_dye:red " , " mcl_dye:white " } ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:cyan 2 " ,
recipe = { " mcl_dye:blue " , " mcl_dye:dark_green " } ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:violet 2 " ,
recipe = { " mcl_dye:blue " , " mcl_dye:red " } ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_dye:orange 2 " ,
recipe = { " mcl_dye:yellow " , " mcl_dye:red " } ,
} )
-- Legacy items grace conversion recipes.
--
-- These allow for retrieval of precious items that were converted into
-- dye items after refactoring of the dyes. Should be removed again in
-- the near future.
2022-12-22 22:44:21 +01:00
minetest.register_craft ( {
output = " mcl_bone_meal:bone_meal " ,
recipe = { { " mcl_dye:white " } } ,
} )
2022-12-23 01:25:26 +01:00
2022-12-22 17:26:13 +01:00
minetest.register_craft ( {
output = " mcl_mobitems:ink_sac " ,
recipe = { { " mcl_dye:black " } } ,
} )
2022-12-23 01:25:26 +01:00
2022-12-22 18:10:59 +01:00
minetest.register_craft ( {
output = " mcl_core:lapis " ,
recipe = { { " mcl_dye:blue " } } ,
} )
2022-12-23 01:25:26 +01:00
2022-12-22 19:32:15 +01:00
minetest.register_craft ( {
output = " mcl_cocoas:cocoa_beans " ,
recipe = { { " mcl_dye:brown " } } ,
2017-01-05 07:23:25 +01:00
} )