Can't shear lambs
[MineClone/MineClone2.git] / mods / ENTITIES / mobs_mc / sheep.lua
blob96734fd524e8328fb73586c9914e4aa4e29ca49d
1 --License for code WTFPL and otherwise stated in readmes
3 -- intllib
4 local MP = minetest.get_modpath(minetest.get_current_modname())
5 local S, NS = dofile(MP.."/intllib.lua")
7 --###################
8 --################### SHEEP
9 --###################
11 local colors = {
12 -- group = { wool, textures }
13 unicolor_white = { mobs_mc.items.wool_white, "#FFFFFF00" },
14 unicolor_dark_orange = { mobs_mc.items.wool_brown, "#502A00D0" },
15 unicolor_grey = { mobs_mc.items.wool_light_grey, "#5B5B5BD0" },
16 unicolor_darkgrey = { mobs_mc.items.wool_grey, "#303030D0" },
17 unicolor_blue = { mobs_mc.items.wool_blue, "#0000CCD0" },
18 unicolor_dark_green = { mobs_mc.items.wool_green, "#005000D0" },
19 unicolor_green = { mobs_mc.items.wool_lime, "#50CC00D0" },
20 unicolor_violet = { mobs_mc.items.wool_purple , "#5000CCD0" },
21 unicolor_light_red = { mobs_mc.items.wool_pink, "#FF5050D0" },
22 unicolor_yellow = { mobs_mc.items.wool_yellow, "#CCCC00D0" },
23 unicolor_orange = { mobs_mc.items.wool_orange, "#CC5000D0" },
24 unicolor_red = { mobs_mc.items.wool_red, "#CC0000D0" },
25 unicolor_cyan = { mobs_mc.items.wool_cyan, "#00CCCCD0" },
26 unicolor_red_violet = { mobs_mc.items.wool_magenta, "#CC0050D0" },
27 unicolor_black = { mobs_mc.items.wool_black, "#000000D0" },
30 if minetest.get_modpath("mcl_wool") ~= nil then
31 colors["unicolor_light_blue"] = { mobs_mc.items.wool_light_blue, "#5050FFD0" }
32 end
34 local sheep_texture = function(color_group)
35 return {
36 "mobs_mc_sheep_fur.png^[colorize:"..colors[color_group][2],
37 "mobs_mc_sheep.png",
39 end
41 local gotten_texture = { "blank.png", "mobs_mc_sheep.png" }
43 --mcsheep
44 mobs:register_mob("mobs_mc:sheep", {
45 type = "animal",
46 hp_min = 8,
47 hp_max = 8,
49 collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.29, 0.45},
51 visual = "mesh",
52 visual_size = {x=3, y=3},
53 mesh = "mobs_mc_sheepfur.b3d",
54 textures = { sheep_texture("unicolor_white") },
55 gotten_texture = gotten_texture,
56 color = "unicolor_white",
57 makes_footstep_sound = true,
58 walk_velocity = 1,
59 drops = {
60 {name = mobs_mc.items.mutton_raw,
61 chance = 1,
62 min = 1,
63 max = 2,},
64 {name = colors["unicolor_white"][1],
65 chance = 1,
66 min = 1,
67 max = 1,},
69 water_damage = 1,
70 lava_damage = 4,
71 light_damage = 0,
72 fear_height = 4,
73 sounds = {
74 random = "mobs_sheep",
75 death = "mobs_sheep",
76 damage = "mobs_sheep",
77 distance = 16,
79 animation = {
80 speed_normal = 25, speed_run = 50,
81 stand_start = 40, stand_end = 80,
82 walk_start = 0, walk_end = 40,
83 run_start = 0, run_end = 40,
85 follow = mobs_mc.follow.sheep,
86 view_range = 12,
88 -- Eat grass
89 replace_rate = 20,
90 replace_what = mobs_mc.replace.sheep,
91 -- Properly regrow wool after eating grass
92 on_replace = function(self, pos, oldnode, newnode)
93 if not self.color or not colors[self.color] then
94 self.color = "unicolor_white"
95 end
96 self.gotten = false
97 self.base_texture = sheep_texture(self.color)
98 self.object:set_properties({ textures = self.base_texture })
99 self.drops = {
100 {name = mobs_mc.items.mutton_raw,
101 chance = 1,
102 min = 1,
103 max = 2,},
104 {name = colors[self.color][1],
105 chance = 1,
106 min = 1,
107 max = 1,},
109 end,
111 -- Set random color on spawn
112 do_custom = function(self)
113 if not self.initial_color_set then
114 local r = math.random(0,100000)
115 local textures
116 if r <= 81836 then
117 -- 81.836%
118 self.color = "unicolor_white"
119 elseif r <= 81836 + 5000 then
120 -- 5%
121 self.color = "unicolor_grey"
122 elseif r <= 81836 + 5000 + 5000 then
123 -- 5%
124 self.color = "unicolor_darkgrey"
125 elseif r <= 81836 + 5000 + 5000 + 5000 then
126 -- 5%
127 self.color = "unicolor_black"
128 elseif r <= 81836 + 5000 + 5000 + 5000 + 3000 then
129 -- 3%
130 self.color = "unicolor_dark_orange"
131 else
132 -- 0.164%
133 self.color = "unicolor_light_red"
135 self.base_texture = sheep_texture(self.color)
136 self.object:set_properties({ textures = self.base_texture })
137 self.drops = {
138 {name = mobs_mc.items.mutton_raw,
139 chance = 1,
140 min = 1,
141 max = 2,},
142 {name = colors[self.color][1],
143 chance = 1,
144 min = 1,
145 max = 1,},
147 self.initial_color_set = true
149 end,
151 on_rightclick = function(self, clicker)
152 local item = clicker:get_wielded_item()
154 if mobs:feed_tame(self, clicker, 1, true, true) then return end
155 if mobs:protect(self, clicker) then return end
157 if item:get_name() == mobs_mc.items.shears and not self.gotten and not self.child then
158 self.gotten = true
159 local pos = self.object:getpos()
160 minetest.sound_play("shears", {pos = pos})
161 pos.y = pos.y + 0.5
162 if not self.color then
163 self.color = "unicolor_white"
165 minetest.add_item(pos, ItemStack(colors[self.color][1].." "..math.random(1,3)))
166 self.base_texture = gotten_texture
167 self.object:set_properties({
168 textures = self.base_texture,
170 if not minetest.settings:get_bool("creative_mode") then
171 item:add_wear(mobs_mc.misc.shears_wear)
172 clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item)
174 self.drops = {
175 {name = mobs_mc.items.mutton_raw,
176 chance = 1,
177 min = 1,
178 max = 2,},
180 return
182 -- Dye sheep
183 if minetest.get_item_group(item:get_name(), "dye") == 1 and not self.gotten then
184 minetest.log("verbose", "[mobs_mc] " ..item:get_name() .. " " .. minetest.get_item_group(item:get_name(), "dye"))
185 for group, colordata in pairs(colors) do
186 if minetest.get_item_group(item:get_name(), group) == 1 then
187 self.base_texture = sheep_texture(group)
188 self.object:set_properties({
189 textures = self.base_texture,
191 self.color = group
192 self.drops = {
193 {name = mobs_mc.items.mutton_raw,
194 chance = 1,
195 min = 1,
196 max = 2,},
197 {name = colordata[1],
198 chance = 1,
199 min = 1,
200 max = 1,},
202 break
205 return
207 if mobs:capture_mob(self, clicker, 0, 5, 70, false, nil) then return end
208 end,
210 mobs:spawn_specific("mobs_mc:sheep", mobs_mc.spawn.grassland, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
212 -- compatibility
213 mobs:alias_mob("mobs_animal:sheep", "mobs_mc:sheep")
214 -- spawn eggs
215 mobs:register_egg("mobs_mc:sheep", S("Sheep"), "mobs_mc_spawn_icon_sheep.png", 0)
217 if minetest.settings:get_bool("log_mods") then
218 minetest.log("action", "MC Sheep loaded")