forked from Mineclonia/Mineclonia
Breeding sheep now mixes wool colors like dyes
This commit is contained in:
parent
e246b5d0bb
commit
aeee941b2c
|
@ -207,15 +207,44 @@ mobs:register_mob("mobs_mc:sheep", {
|
||||||
if mobs:capture_mob(self, clicker, 0, 5, 70, false, nil) then return end
|
if mobs:capture_mob(self, clicker, 0, 5, 70, false, nil) then return end
|
||||||
end,
|
end,
|
||||||
on_breed = function(parent1, parent2)
|
on_breed = function(parent1, parent2)
|
||||||
|
-- Breed sheep and choose a fur color for the child.
|
||||||
local pos = parent1.object:get_pos()
|
local pos = parent1.object:get_pos()
|
||||||
local child = mobs:spawn_child(pos, parent1.name)
|
local child = mobs:spawn_child(pos, parent1.name)
|
||||||
if child then
|
if child then
|
||||||
local ent_c = child:get_luaentity()
|
local ent_c = child:get_luaentity()
|
||||||
|
local color1 = parent1.color
|
||||||
|
local color2 = parent2.color
|
||||||
|
|
||||||
|
local dye1 = mcl_dye.unicolor_to_dye(color1)
|
||||||
|
local dye2 = mcl_dye.unicolor_to_dye(color2)
|
||||||
|
local output
|
||||||
|
-- Check if parent colors could be mixed as dyes
|
||||||
|
if dye1 and dye2 then
|
||||||
|
output = minetest.get_craft_result({items = {dye1, dye2}, method="normal"})
|
||||||
|
end
|
||||||
|
local mixed = false
|
||||||
|
if output and not output.item:is_empty() then
|
||||||
|
-- Try to mix dyes and use that as new fur color
|
||||||
|
local new_dye = output.item:get_name()
|
||||||
|
local groups = minetest.registered_items[new_dye].groups
|
||||||
|
for k, v in pairs(groups) do
|
||||||
|
if string.sub(k, 1, 9) == "unicolor_" then
|
||||||
|
ent_c.base_texture = sheep_texture(k)
|
||||||
|
mixed = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Colors not mixable
|
||||||
|
if not mixed then
|
||||||
|
-- Choose color randomly from one of the parents
|
||||||
local p = math.random(1, 2)
|
local p = math.random(1, 2)
|
||||||
if p == 1 then
|
if p == 1 then
|
||||||
ent_c.base_texture = sheep_texture(parent1.color)
|
ent_c.base_texture = sheep_texture(color1)
|
||||||
else
|
else
|
||||||
ent_c.base_texture = sheep_texture(parent2.color)
|
ent_c.base_texture = sheep_texture(color2)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
child:set_properties({textures = ent_c.base_texture})
|
child:set_properties({textures = ent_c.base_texture})
|
||||||
ent_c.initial_color_set = true
|
ent_c.initial_color_set = true
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
-- recipe = {'<mod>:item_no_color', 'group:basecolor_yellow'},
|
-- recipe = {'<mod>:item_no_color', 'group:basecolor_yellow'},
|
||||||
-- })
|
-- })
|
||||||
|
|
||||||
-- Other mods can use these for looping through available colors
|
|
||||||
mcl_dye = {}
|
mcl_dye = {}
|
||||||
local dye = {}
|
|
||||||
dye.basecolors = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"}
|
-- Other mods can use these for looping through available colors
|
||||||
dye.excolors = {"white", "lightgrey", "grey", "darkgrey", "black", "red", "orange", "yellow", "lime", "green", "aqua", "cyan", "sky_blue", "blue", "violet", "magenta", "red_violet"}
|
mcl_dye.basecolors = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"}
|
||||||
|
mcl_dye.excolors = {"white", "lightgrey", "grey", "darkgrey", "black", "red", "orange", "yellow", "lime", "green", "aqua", "cyan", "sky_blue", "blue", "violet", "magenta", "red_violet"}
|
||||||
|
|
||||||
-- Base color groups:
|
-- Base color groups:
|
||||||
-- - basecolor_white
|
-- - basecolor_white
|
||||||
|
@ -82,6 +82,20 @@ dyelocal.dyes = {
|
||||||
{"pink", "Pink Dye", {dye=1, craftitem=1, basecolor_red=1, excolor_red=1, unicolor_light_red=1}},
|
{"pink", "Pink Dye", {dye=1, craftitem=1, basecolor_red=1, excolor_red=1, unicolor_light_red=1}},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dyelocal.unicolor_to_dye_id = {}
|
||||||
|
for d=1, #dyelocal.dyes do
|
||||||
|
for k, _ in pairs(dyelocal.dyes[d][3]) do
|
||||||
|
if string.sub(k, 1, 9) == "unicolor_" then
|
||||||
|
dyelocal.unicolor_to_dye_id[k] = dyelocal.dyes[d][1]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Takes an unicolor group name (e.g. “unicolor_white”) and returns a corresponding dye name (if it exists), nil otherwise.
|
||||||
|
mcl_dye.unicolor_to_dye = function(unicolor_group)
|
||||||
|
return "mcl_dye:" .. dyelocal.unicolor_to_dye_id[unicolor_group]
|
||||||
|
end
|
||||||
|
|
||||||
-- Define items
|
-- Define items
|
||||||
for _, row in ipairs(dyelocal.dyes) do
|
for _, row in ipairs(dyelocal.dyes) do
|
||||||
local name = row[1]
|
local name = row[1]
|
||||||
|
|
Loading…
Reference in New Issue