forked from mtcontrib/unifieddyes
add helper function for crafting param2-colorized items
One call registers the full set of 32, 89, or 256 colors. Pass it a recipe of the following general form ```lua unifieddyes.register_color_craft({ output = "mymod:colorized_node", type = <nil or "shapeless"> palette = <see below>, neutral_node = "some_mod:neutral_node", recipe = { <see below> } }) ``` palette may be either "wallmounted" (32 colors), false or omitted entirely (89 colors), or "extended" (256 colors). The recipe section is either a shapeless list, or a standard three-line shaped recipe, same as the regular register_craft() function. The key difference is two placeholder keys that are now supported: * if an item in the recipe is "MAIN_DYE", then Unified Dyes will, with each pass of its registration loop, substitute the actual "dye:foo" craft item in its place which corresponds with the current loop's color. * if an item in the recipe list is "NEUTRAL_NODE", then the value of the "neutral_node" field will be substituted in its place. The expectation here is that the modder probably has some base recipe in mind that, given no dyes, would result in a neutral, uncolored node. This call creates all the recipes that would be needed to craft colored versions of that neutral node either using that base recipe with dye added, or by crafting the neutral node with some dye after the fact.
This commit is contained in:
parent
133bc06e3d
commit
07101b99fe
72
init.lua
72
init.lua
@ -30,8 +30,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
--=====================================================================
|
--=====================================================================
|
||||||
|
|
||||||
unifieddyes = {}
|
unifieddyes = {}
|
||||||
unifieddyes.last_used_dye = {}
|
|
||||||
unifieddyes.last_dyed_node = {}
|
|
||||||
|
|
||||||
local creative_mode = minetest.settings:get_bool("creative_mode")
|
local creative_mode = minetest.settings:get_bool("creative_mode")
|
||||||
|
|
||||||
@ -89,6 +87,17 @@ unifieddyes.HUES_EXTENDED = {
|
|||||||
{ "crimson", 0xff, 0x00, 0x40 }
|
{ "crimson", 0xff, 0x00, 0x40 }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unifieddyes.HUES_WALLMOUNTED = {
|
||||||
|
"red",
|
||||||
|
"orange",
|
||||||
|
"yellow",
|
||||||
|
"green",
|
||||||
|
"cyan",
|
||||||
|
"blue",
|
||||||
|
"violet",
|
||||||
|
"magenta"
|
||||||
|
}
|
||||||
|
|
||||||
unifieddyes.SATS = {
|
unifieddyes.SATS = {
|
||||||
"",
|
"",
|
||||||
"_s50"
|
"_s50"
|
||||||
@ -136,6 +145,65 @@ local default_dyes = {
|
|||||||
"yellow"
|
"yellow"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- this helper function registers all of the recipes needed to create colored
|
||||||
|
-- blocks with any of the dyes supported by that block's palette.
|
||||||
|
|
||||||
|
function unifieddyes.register_color_craft(craft)
|
||||||
|
if not craft or not craft.recipe or not craft.output or not craft.neutral_node then return end
|
||||||
|
|
||||||
|
local hues_table = unifieddyes.HUES_EXTENDED
|
||||||
|
local sats_table = unifieddyes.SATS
|
||||||
|
local vals_table = unifieddyes.VALS_EXTENDED
|
||||||
|
|
||||||
|
if not craft.palette then
|
||||||
|
hues_table = unifieddyes.HUES
|
||||||
|
sats_table = unifieddyes.SATS
|
||||||
|
vals_table = unifieddyes.VALS
|
||||||
|
elseif craft.palette == "wallmounted" then
|
||||||
|
hues_table = unifieddyes.HUES_WALLMOUNTED
|
||||||
|
sats_table = {""}
|
||||||
|
vals_table = unifieddyes.VALS
|
||||||
|
end
|
||||||
|
|
||||||
|
for _,hue in ipairs(hues_table) do
|
||||||
|
for _,sat in ipairs(sats_table) do
|
||||||
|
for _,val in ipairs(vals_table) do
|
||||||
|
|
||||||
|
local color = "dye:"..val..hue[1]..sat
|
||||||
|
local paletteidx = unifieddyes.getpaletteidx(color, craft.palette)
|
||||||
|
local newrecipe = table.copy(craft.recipe)
|
||||||
|
|
||||||
|
for k, item in ipairs(newrecipe) do
|
||||||
|
if item == "MAIN_DYE" then newrecipe[k] = color end
|
||||||
|
if item == "NEUTRAL_NODE" then newrecipe[k] = craft.neutral_node end
|
||||||
|
end
|
||||||
|
|
||||||
|
local stack = ItemStack(craft.output)
|
||||||
|
stack:get_meta():set_int("palette_index", paletteidx)
|
||||||
|
stack:get_meta():set_string("dye", color)
|
||||||
|
local colorized_itemstack = stack:to_string()
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = colorized_itemstack,
|
||||||
|
type = craft.type,
|
||||||
|
recipe = newrecipe
|
||||||
|
})
|
||||||
|
|
||||||
|
if craft.neutral_node ~= string.split(craft.output, " ")[1] then
|
||||||
|
minetest.register_craft( {
|
||||||
|
output = colorized_itemstack,
|
||||||
|
type = "shapeless",
|
||||||
|
recipe = {
|
||||||
|
craft.neutral_node,
|
||||||
|
color
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- automatically recolor a placed node to match the last-used dye
|
-- automatically recolor a placed node to match the last-used dye
|
||||||
-- should be called in the node's `after_place_node` callback.
|
-- should be called in the node's `after_place_node` callback.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user