2015-06-29 19:55:56 +02:00
-- minetest/dye/init.lua
-- 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",
-- output = '<mod>:item_yellow',
-- recipe = {'<mod>:item_no_color', 'group:basecolor_yellow'},
-- })
-- Other mods can use these for looping through available colors
2017-02-14 18:20:54 +01:00
mcl_dye = { }
2015-06-29 19:55:56 +02:00
local dye = { }
dye.basecolors = { " white " , " grey " , " black " , " red " , " yellow " , " green " , " cyan " , " blue " , " magenta " }
dye.excolors = { " white " , " lightgrey " , " grey " , " darkgrey " , " black " , " red " , " orange " , " yellow " , " lime " , " green " , " aqua " , " cyan " , " sky_blue " , " blue " , " violet " , " magenta " , " red_violet " }
-- 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
-- Local stuff
local dyelocal = { }
-- This collection of colors is partly a historic thing, partly something else.
dyelocal.dyes = {
2017-01-20 04:54:09 +01:00
{ " white " , " Bone Meal " , { dye = 1 , craftitem = 1 , basecolor_white = 1 , excolor_white = 1 , unicolor_white = 1 } } ,
{ " grey " , " Light Grey Dye " , { dye = 1 , craftitem = 1 , basecolor_grey = 1 , excolor_grey = 1 , unicolor_grey = 1 } } ,
{ " dark_grey " , " Grey Dye " , { dye = 1 , craftitem = 1 , basecolor_grey = 1 , excolor_darkgrey = 1 , unicolor_darkgrey = 1 } } ,
{ " black " , " Ink Sac " , { dye = 1 , craftitem = 1 , basecolor_black = 1 , excolor_black = 1 , unicolor_black = 1 } } ,
2017-02-07 01:31:40 +01:00
{ " violet " , " Purple Dye " , { dye = 1 , craftitem = 1 , basecolor_magenta = 1 , excolor_violet = 1 , unicolor_violet = 1 } } ,
2017-01-20 04:54:09 +01:00
{ " blue " , " Lapis Lazuli " , { dye = 1 , craftitem = 1 , basecolor_blue = 1 , excolor_blue = 1 , unicolor_blue = 1 } } ,
{ " lightblue " , " Light Blue Dye " , { dye = 1 , craftitem = 1 , basecolor_blue = 1 , excolor_blue = 1 , unicolor_light_blue = 1 } } ,
{ " cyan " , " Cyan Dye " , { dye = 1 , craftitem = 1 , basecolor_cyan = 1 , excolor_cyan = 1 , unicolor_cyan = 1 } } ,
{ " dark_green " , " Cactus Green " , { dye = 1 , craftitem = 1 , basecolor_green = 1 , excolor_green = 1 , unicolor_dark_green = 1 } } ,
{ " green " , " Lime Dye " , { dye = 1 , craftitem = 1 , basecolor_green = 1 , excolor_green = 1 , unicolor_green = 1 } } ,
{ " yellow " , " Dandelion Yellow " , { dye = 1 , craftitem = 1 , basecolor_yellow = 1 , excolor_yellow = 1 , unicolor_yellow = 1 } } ,
2017-06-24 15:10:14 +02:00
{ " brown " , " Cocoa Beans " , { dye = 1 , craftitem = 1 , basecolor_brown = 1 , excolor_orange = 1 , unicolor_dark_orange = 1 } } ,
2017-01-20 04:54:09 +01:00
{ " orange " , " Orange Dye " , { dye = 1 , craftitem = 1 , basecolor_orange = 1 , excolor_orange = 1 , unicolor_orange = 1 } } ,
{ " red " , " Rose Red " , { dye = 1 , craftitem = 1 , basecolor_red = 1 , excolor_red = 1 , unicolor_red = 1 } } ,
{ " magenta " , " Magenta Dye " , { dye = 1 , craftitem = 1 , basecolor_magenta = 1 , excolor_red_violet = 1 , unicolor_red_violet = 1 } } ,
{ " pink " , " Pink Dye " , { dye = 1 , craftitem = 1 , basecolor_red = 1 , excolor_red = 1 , unicolor_light_red = 1 } } ,
2015-06-29 19:55:56 +02:00
}
-- Define items
for _ , row in ipairs ( dyelocal.dyes ) do
local name = row [ 1 ]
2017-02-18 16:06:18 +01:00
-- White and brown dyes are defined explicitly below
if name ~= " white " and name ~= " brown " then
local description = row [ 2 ]
local groups = row [ 3 ]
local item_name = " mcl_dye: " .. name
local item_image = " dye_ " .. name .. " .png "
minetest.register_craftitem ( item_name , {
inventory_image = item_image ,
description = description ,
2017-03-10 03:29:48 +01:00
_doc_items_longdesc = " This item is a dye which is used for dyeing and crafting. " ,
_doc_items_usagehelp = " Rightclick on a sheep to dye its wool. Other things are dyed by crafting. " ,
2017-02-18 16:06:18 +01:00
groups = groups ,
stack_max = 64 ,
} )
end
2015-06-29 19:55:56 +02:00
end
2017-02-11 19:03:26 +01:00
-- Bone Meal
2017-02-14 18:20:54 +01:00
mcl_dye.apply_bone_meal = function ( pointed_thing )
2017-05-26 21:52:41 +02:00
-- TODO: Use biome-specific flowers
local flowers_table = {
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:blue_orchid " ,
" mcl_flowers:oxeye_daisy " ,
" mcl_flowers:tulip_orange " ,
" mcl_flowers:tulip_red " ,
" mcl_flowers:tulip_white " ,
" mcl_flowers:tulip_pink " ,
" mcl_flowers:allium " ,
" mcl_flowers:azure_bluet " ,
}
pos = pointed_thing.under
n = minetest.get_node ( pos )
if n.name == " " then return false end
2017-04-01 02:29:36 +02:00
if minetest.get_item_group ( n.name , " sapling " ) >= 1 then
2017-04-01 03:54:58 +02:00
-- Saplings: 45% chance to advance growth stage
2017-04-01 02:29:36 +02:00
if math.random ( 1 , 100 ) <= 45 then
return mcl_core.grow_sapling ( pos , n )
end
2017-04-01 03:54:58 +02:00
-- Wheat, Potato, Carrot, Pumpkin Stem, Melon Stem: Advance by 2-5 stages
2017-02-11 19:03:26 +01:00
elseif string.find ( n.name , " mcl_farming:wheat_ " ) ~= nil then
2017-04-01 03:54:58 +02:00
local stages = math.random ( 2 , 5 )
return mcl_farming : grow_plant ( " plant_wheat " , pos , n , stages )
2017-02-11 19:03:26 +01:00
elseif string.find ( n.name , " mcl_farming:potato_ " ) ~= nil then
2017-04-01 03:54:58 +02:00
local stages = math.random ( 2 , 5 )
return mcl_farming : grow_plant ( " plant_potato " , pos , n , stages )
2017-02-11 19:03:26 +01:00
elseif string.find ( n.name , " mcl_farming:carrot_ " ) ~= nil then
2017-04-01 03:54:58 +02:00
local stages = math.random ( 2 , 5 )
return mcl_farming : grow_plant ( " plant_carrot " , pos , n , stages )
2017-02-11 19:03:26 +01:00
elseif string.find ( n.name , " mcl_farming:pumpkin_ " ) ~= nil then
2017-04-01 03:54:58 +02:00
local stages = math.random ( 2 , 5 )
return mcl_farming : grow_plant ( " plant_pumpkin_stem " , pos , n , stages )
2017-02-11 19:03:26 +01:00
elseif string.find ( n.name , " mcl_farming:melontige_ " ) ~= nil then
2017-04-01 03:54:58 +02:00
local stages = math.random ( 2 , 5 )
return mcl_farming : grow_plant ( " plant_melon_stem " , pos , n , stages )
elseif string.find ( n.name , " mcl_farming:beetroot_ " ) ~= nil then
-- Beetroot: 75% chance to advance to next stage
if math.random ( 1 , 100 ) <= 75 then
return mcl_farming : grow_plant ( " plant_beetroot " , pos , n )
2017-02-11 19:03:26 +01: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
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-04-01 06:51:55 +02:00
elseif n.name == " mcl_core:dirt_with_grass " or n.name == " mcl_core:dirt_with_grass_snow " then
2017-04-01 03:54:58 +02:00
-- Grass Block: Generate tall grass and random flowers all over the place
2017-05-26 21:40:03 +02:00
for i = - 2 , 2 do
for j = - 2 , 2 do
2017-02-11 19:03:26 +01:00
pos = pointed_thing.above
pos = { x = pos.x + i , y = pos.y , z = pos.z + j }
n = minetest.get_node ( pos )
n2 = minetest.get_node ( { x = pos.x , y = pos.y - 1 , z = pos.z } )
2017-04-01 06:51:55 +02:00
if n.name ~= " " and n.name == " air " and ( n2.name == " mcl_core:dirt_with_grass " or n2.name == " mcl_core:dirt_with_grass_snow " ) then
2017-05-26 21:52:41 +02:00
-- Randomly generate flowers, tall grass or nothing
if math.random ( 1 , 100 ) <= 90 then
-- 90% tall grass, 10% flower
if math.random ( 1 , 100 ) <= 90 then
minetest.add_node ( pos , { name = " mcl_core:tallgrass " } )
else
minetest.add_node ( pos , { name = flowers_table [ math.random ( 1 , # flowers_table ) ] } )
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
minetest.add_item ( pos , " mcl_flowers:rose_bush " )
return true
elseif n.name == " mcl_flowers:peony " or n.name == " mcl_flowers:peony_top " then
minetest.add_item ( pos , " mcl_flowers:peony " )
return true
elseif n.name == " mcl_flowers:lilac " or n.name == " mcl_flowers:lilac_top " then
minetest.add_item ( pos , " mcl_flowers:lilac " )
return true
elseif n.name == " mcl_flowers:sunflower " or n.name == " mcl_flowers:sunflower_top " then
minetest.add_item ( pos , " mcl_flowers:sunflower " )
return true
2017-03-14 20:05:07 +01:00
elseif n.name == " mcl_flowers:tallgrass " then
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
minetest.set_node ( pos , { name = " mcl_flowers:double_grass " } )
minetest.set_node ( toppos , { name = " mcl_flowers:double_grass_top " } )
return true
end
2017-03-14 19:40:49 +01:00
2017-03-14 19:35:37 +01:00
elseif n.name == " mcl_flowers:fern " then
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
minetest.set_node ( pos , { name = " mcl_flowers:double_fern " } )
minetest.set_node ( toppos , { name = " mcl_flowers:double_fern_top " } )
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
2017-01-30 15:33:04 +01:00
minetest.register_craftitem ( " mcl_dye:white " , {
2015-06-29 19:55:56 +02:00
inventory_image = " dye_white.png " ,
description = " Bone Meal " ,
2017-03-10 03:29:48 +01:00
_doc_items_longdesc = " Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants. " ,
_doc_items_usagehelp = " 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 ,
2017-02-18 16:06:18 +01:00
groups = dyelocal.dyes [ 1 ] [ 3 ] ,
2015-06-29 19:55:56 +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
2017-02-14 18:20:54 +01:00
if ( mcl_dye.apply_bone_meal ( pointed_thing ) and not minetest.setting_getbool ( " creative_mode " ) ) then
2017-01-05 07:23:25 +01:00
itemstack : take_item ( )
end
return itemstack
2015-06-29 19:55:56 +02:00
end ,
} )
2017-02-18 16:06:18 +01:00
minetest.register_craftitem ( " mcl_dye:brown " , {
inventory_image = " dye_brown.png " ,
2017-03-10 03:29:48 +01:00
_doc_items_longdesc = " Cocoa beans are a brown dye and can be used to plant cocoas. " ,
_doc_items_usagehelp = " Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa. " ,
2017-02-18 16:06:18 +01:00
description = " Cocoa Beans " ,
stack_max = 64 ,
2017-06-24 15:10:14 +02:00
groups = dyelocal.dyes [ 12 ] [ 3 ] ,
2017-03-02 15:50:53 +01:00
on_place = function ( itemstack , placer , pointed_thing )
2017-02-18 20:23:26 +01:00
return mcl_cocoas.place ( itemstack , placer , pointed_thing , " mcl_cocoas:cocoa_1 " )
2017-02-18 16:06:18 +01:00
end ,
} )
2017-01-05 07:23:25 +01:00
-- Dye mixing
minetest.register_craft ( {
type = " shapeless " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:dark_grey 2 " ,
recipe = { " mcl_dye:black " , " mcl_dye:white " } ,
2017-01-05 07:23:25 +01:00
} )
minetest.register_craft ( {
type = " shapeless " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:lightblue 2 " ,
recipe = { " mcl_dye:blue " , " mcl_dye:white " } ,
2017-01-05 07:23:25 +01:00
} )
minetest.register_craft ( {
type = " shapeless " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:grey 3 " ,
recipe = { " mcl_dye:black " , " mcl_dye:white " , " mcl_dye:white " } ,
2017-01-05 07:23:25 +01:00
} )
minetest.register_craft ( {
type = " shapeless " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:grey 2 " ,
recipe = { " mcl_dye:dark_grey " , " mcl_dye:white " } ,
2017-01-05 07:23:25 +01:00
} )
minetest.register_craft ( {
type = " shapeless " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:green 2 " ,
recipe = { " mcl_dye:dark_green " , " mcl_dye:white " } ,
2017-01-05 07:23:25 +01:00
} )
minetest.register_craft ( {
type = " shapeless " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:magenta 4 " ,
recipe = { " mcl_dye:blue " , " mcl_dye:white " , " mcl_dye:red " , " mcl_dye:red " } ,
2017-01-05 07:23:25 +01:00
} )
2017-03-15 00:51:11 +01:00
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 " } ,
} )
2017-01-05 07:23:25 +01:00
minetest.register_craft ( {
type = " shapeless " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:pink 2 " ,
recipe = { " mcl_dye:red " , " mcl_dye:white " } ,
2017-01-05 07:23:25 +01:00
} )
minetest.register_craft ( {
type = " shapeless " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:cyan 2 " ,
recipe = { " mcl_dye:blue " , " mcl_dye:dark_green " } ,
2017-01-05 07:23:25 +01:00
} )
minetest.register_craft ( {
type = " shapeless " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:violet 2 " ,
recipe = { " mcl_dye:blue " , " mcl_dye:red " } ,
2017-01-05 07:23:25 +01:00
} )
minetest.register_craft ( {
type = " shapeless " ,
2017-01-30 15:33:04 +01:00
output = " mcl_dye:orange 2 " ,
recipe = { " mcl_dye:yellow " , " mcl_dye:red " } ,
2017-01-05 07:23:25 +01:00
} )
-- Dye creation
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
} )
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
} )
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
} )
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
} )
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
} )
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
} )
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
} )
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
} )
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
} )
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
} )
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
} )
2017-03-15 00:51:11 +01:00
minetest.register_craft ( {
output = " mcl_dye:red " ,
recipe = { { " mcl_farming:beetroot_item " } } ,
} )
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
} )
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
} )
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
} )
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 ,
} )
minetest.register_craft ( {
2017-01-30 15:33:04 +01:00
output = " mcl_dye:white 3 " ,
2017-02-01 17:59:15 +01:00
recipe = { { " mcl_mobitems:bone " } } ,
2017-01-05 07:23:25 +01:00
} )
2017-02-07 05:02:35 +01:00
2017-02-07 05:11:23 +01:00