2024-07-16 16:48:48 +02:00

61 lines
2.3 KiB
Lua

mcl_dye = {}
mcl_dye.bone_meal_callbacks = {}
mcl_dye.colors = mcl_dyes.colors
mcl_dye.unicolor_to_dye = mcl_dyes.unicolor_to_dye
mcl_dye.add_bone_meal_particle = mcl_bone_meal.add_bone_meal_particle
mcl_dye.mcl2dyes_translate = {}
for k, v in pairs(mcl_dyes.colors) do
mcl_dye.mcl2dyes_translate["mcl_dye:"..v.mcl2] = "mcl_dyes:"..k
end
-- Override of minetest.register_craft rewrites crafing recipes that use mcl2 item names to use the mcla eqivalents.
-- It's necessary to prevent turning old lapis, bone meal, ink sacs and cocoanuts into dye as
-- before 0.81 the "mcl_dye:blue" item was the same as lapis.
-- This essentially means in mcla "mcl_dye:blue" is still lapis (via alias) but all recipes
-- using that itemstring are rewritten to use "mcl_dyes:blue" so they still work the same.
local old_mt_reg_craft = minetest.register_craft
function minetest.register_craft(recipe)
if recipe.recipe and type(recipe.recipe) == "table" then
recipe = table.copy(recipe) --we're possibly modifying the input table; make a copy not to cause confusion
for k,v in pairs(recipe.recipe) do
if type(v) == "table" then
for l,w in pairs(v) do
if mcl_dye.mcl2dyes_translate[w] then
recipe.recipe[k][l] = mcl_dye.mcl2dyes_translate[w]
end
end
elseif type(v) == "string"then
if mcl_dye.mcl2dyes_translate[v] then
recipe.recipe[k] = mcl_dye.mcl2dyes_translate[v]
end
end
end
end
return old_mt_reg_craft(recipe)
end
function mcl_dye.register_on_bone_meal_apply(func)
minetest.log("warning", "[mcl_dye] A mod "..(minetest.get_current_modname() or "").."is using the function mcl_dye.register_on_bone_meal_apply - this is deprecated. Use the node defintion callbacks as documented in mods/mcl_bone_meal/API.md instead!")
table.insert(mcl_dye.bone_meal_callbacks, func)
end
local old_on_place = minetest.registered_items["mcl_bone_meal:bone_meal"].on_place
minetest.override_item("mcl_bone_meal:bone_meal", {
on_place = function(itemstack, placer, pointed_thing)
if #mcl_dye.bone_meal_callbacks > 0 then
local rc = mcl_util.call_on_rightclick(itemstack, placer, pointed_thing)
if rc then return rc end
for _, func in pairs(mcl_dye.bone_meal_callbacks) do
if func(pointed_thing, placer) then
itemstack:take_item()
return itemstack
end
end
end
return old_on_place(itemstack, placer, pointed_thing)
end
})