23 Commits c2fa3e300c ... 91a3c1e17d

Author SHA1 Message Date
  tenplus1 91a3c1e17d fix evil bunny 1 year ago
  tenplus1 35988d5cb3 update license.txt 1 year ago
  tenplus1 4948d0831c update license.txt 1 year ago
  tenplus1 5eea644cf7 update license.txt 2 years ago
  tenplus1 a4e9601559 update license.txt 2 years ago
  tenplus1 8f5ebf8277 update license.txt (need some licenses filled) 2 years ago
  tenplus1 1799b4c217 fix dye'd sheep protection (thx Niklp) 2 years ago
  tenplus1 848622ccde add herd node check 2 years ago
  tenplus1 ca6ff68c3a have sheep spawn in mixed herds 2 years ago
  tenplus1 be80ec3269 code tidy 2 years ago
  tenplus1 840291ee5b sheeps wont drop wool when killed if sheared (thx Mazes) 2 years ago
  tenplus1 ad9269569c add black kitty skin 2 years ago
  tenplus1 998810af89 add clownfish to kitty food 2 years ago
  tenplus1 409ac55224 update screenshot.png (thanks sirrobzeroone) 2 years ago
  tenplus1 6ef76b06e0 remove unneeded local S 2 years ago
  tenplus1 cca7169b9e add missing butter recipe for wooden buckets 2 years ago
  tenplus1 eed132225c added support for wooden bucket and milking cow with recipes 2 years ago
  tenplus1 d9682b32c3 revert penguin hover 2 years ago
  tenplus1 9be290dd85 add penguin hover animation 2 years ago
  tenplus1 fe4010f217 add spanish translation (thanks mckaygerhard) 2 years ago
  tenplus1 97f2e47288 update translation checks 2 years ago
  tenplus1 3e15456bce fix intllib return 3 years ago
  tenplus1 99ca850018 simplify baby chicken from egg (thanks MoNTE48) 3 years ago
10 changed files with 377 additions and 188 deletions
  1. 35 23
      bee.lua
  2. 32 24
      bunny.lua
  3. 41 57
      chicken.lua
  4. 91 44
      cow.lua
  5. 26 6
      init.lua
  6. 0 2
      intllib.lua
  7. 31 29
      kitten.lua
  8. 75 3
      license.txt
  9. 46 0
      locale/mobs_animal.es.tr
  10. 0 0
      lucky_block.lua

+ 35 - 23
bee.lua

@@ -1,5 +1,6 @@
 
-local S = mobs.intllib
+local S = mobs.intllib_animal
+
 
 -- Bee by KrupnoPavel (.b3d model by sirrobzeroone)
 
@@ -13,18 +14,18 @@ mobs:register_mob("mobs_animal:bee", {
 	visual = "mesh",
 	mesh = "mobs_bee.b3d",
 	textures = {
-		{"mobs_bee.png"},
+		{"mobs_bee.png"}
 	},
 	blood_texture = "mobs_bee_inv.png",
 	blood_amount = 1,
 	makes_footstep_sound = false,
 	sounds = {
-		random = "mobs_bee",
+		random = "mobs_bee"
 	},
 	walk_velocity = 1,
 	jump = true,
 	drops = {
-		{name = "mobs:honey", chance = 2, min = 1, max = 2},
+		{name = "mobs:honey", chance = 2, min = 1, max = 2}
 	},
 	water_damage = 1,
 	lava_damage = 2,
@@ -36,42 +37,50 @@ mobs:register_mob("mobs_animal:bee", {
 		stand_start = 0,
 		stand_end = 30,
 		walk_start = 35,
-		walk_end = 65,
+		walk_end = 65
 	},
+
 	on_rightclick = function(self, clicker)
 		mobs:capture_mob(self, clicker, 50, 90, 0, true, "mobs_animal:bee")
 	end,
+
 --	after_activate = function(self, staticdata, def, dtime)
 --		print ("------", self.name, dtime, self.health)
 --	end,
 })
 
 if not mobs.custom_spawn_animal then
-mobs:spawn({
-	name = "mobs_animal:bee",
-	nodes = {"group:flower"},
-	min_light = 14,
-	interval = 60,
-	chance = 7000,
-	min_height = 3,
-	max_height = 200,
-	day_toggle = true,
-})
+
+	mobs:spawn({
+		name = "mobs_animal:bee",
+		nodes = {"group:flower"},
+		min_light = 14,
+		interval = 60,
+		chance = 7000,
+		min_height = 3,
+		max_height = 200,
+		day_toggle = true
+	})
 end
 
+
+-- spawn egg
 mobs:register_egg("mobs_animal:bee", S("Bee"), "mobs_bee_inv.png")
 
+
+-- compatibility (only required if moving from old mobs to mobs_redo)
 mobs:alias_mob("mobs:bee", "mobs_animal:bee")
 
+
 -- honey
 minetest.register_craftitem(":mobs:honey", {
 	description = S("Honey"),
 	inventory_image = "mobs_honey_inv.png",
 	on_use = minetest.item_eat(4),
-	groups = {food_honey = 1, food_sugar = 1, flammable = 1},
+	groups = {food_honey = 1, food_sugar = 1, flammable = 1}
 })
 
+
 -- beehive (when placed spawns bee)
 minetest.register_node(":mobs:beehive", {
 	description = S("Beehive"),
@@ -104,7 +113,7 @@ minetest.register_node(":mobs:beehive", {
 
 			minetest.set_node(pos, {name = "mobs:beehive", param2 = 1})
 
-			if math.random(1, 4) == 1 then
+			if math.random(4) == 1 then
 				minetest.add_entity(pos, "mobs_animal:bee")
 			end
 		end
@@ -131,14 +140,14 @@ minetest.register_node(":mobs:beehive", {
 
 		-- only dig beehive if no honey inside
 		return meta:get_inventory():is_empty("beehive")
-	end,
-
+	end
 })
 
+-- beehive recipe
 minetest.register_craft({
 	output = "mobs:beehive",
 	recipe = {
-		{"mobs:bee","mobs:bee","mobs:bee"},
+		{"mobs:bee","mobs:bee","mobs:bee"}
 	}
 })
 
@@ -147,25 +156,27 @@ minetest.register_node(":mobs:honey_block", {
 	description = S("Honey Block"),
 	tiles = {"mobs_honey_block.png"},
 	groups = {snappy = 3, flammable = 2},
-	sounds = default.node_sound_dirt_defaults(),
+	sounds = default.node_sound_dirt_defaults()
 })
 
+-- recipe
 minetest.register_craft({
 	output = "mobs:honey_block",
 	recipe = {
 		{"mobs:honey", "mobs:honey", "mobs:honey"},
 		{"mobs:honey", "mobs:honey", "mobs:honey"},
-		{"mobs:honey", "mobs:honey", "mobs:honey"},
+		{"mobs:honey", "mobs:honey", "mobs:honey"}
 	}
 })
 
 minetest.register_craft({
 	output = "mobs:honey 9",
 	recipe = {
-		{"mobs:honey_block"},
+		{"mobs:honey_block"}
 	}
 })
 
+
 -- beehive workings
 minetest.register_abm({
 	nodenames = {"mobs:beehive"},

+ 32 - 24
bunny.lua

@@ -1,5 +1,5 @@
 
-local S = mobs.intllib
+local S = mobs.intllib_animal
 
 
 -- Bunny by ExeterDad
@@ -12,14 +12,14 @@ stepheight = 0.6,
 	hp_min = 1,
 	hp_max = 4,
 	armor = 200,
-	collisionbox = {-0.268, -0.5, -0.268,  0.268, 0.167, 0.268},
+	collisionbox = {-0.268, -0.5, -0.268, 0.268, 0.167, 0.268},
 	visual = "mesh",
 	mesh = "mobs_bunny.b3d",
 	drawtype = "front",
 	textures = {
 		{"mobs_bunny_grey.png"},
 		{"mobs_bunny_brown.png"},
-		{"mobs_bunny_white.png"},
+		{"mobs_bunny_white.png"}
 	},
 	sounds = {},
 	makes_footstep_sound = false,
@@ -31,7 +31,7 @@ stepheight = 0.6,
 	jump_height = 6,
 	drops = {
 		{name = "mobs:rabbit_raw", chance = 1, min = 1, max = 1},
-		{name = "mobs:rabbit_hide", chance = 1, min = 0, max = 1},
+		{name = "mobs:rabbit_hide", chance = 1, min = 0, max = 1}
 	},
 	water_damage = 0,
 	lava_damage = 4,
@@ -44,13 +44,14 @@ stepheight = 0.6,
 		walk_start = 16,
 		walk_end = 24,
 		punch_start = 16,
-		punch_end = 24,
+		punch_end = 24
 	},
 	follow = {"farming:carrot", "farming_plus:carrot_item", "default:grass_1"},
 	view_range = 8,
 	replace_rate = 10,
 	replace_what = {"farming:carrot_7", "farming:carrot_8", "farming_plus:carrot"},
 	replace_with = "air",
+
 	on_rightclick = function(self, clicker)
 
 		-- feed or tame
@@ -68,17 +69,21 @@ stepheight = 0.6,
 				clicker:set_wielded_item(item)
 			end
 
+			self.base_texture = {"mobs_bunny_evil.png"}
+
 			self.object:set_properties({
-				textures = {"mobs_bunny_evil.png"},
+				textures = {"mobs_bunny_evil.png"}
 			})
 
 			self.type = "monster"
 			self.health = 20
 			self.passive = false
+			self.runaway = false
 
 			return
 		end
 	end,
+
 	on_spawn = function(self)
 
 		local pos = self.object:get_pos() ; pos.y = pos.y - 1
@@ -88,11 +93,13 @@ stepheight = 0.6,
 				{"default:snow", "default:snowblock", "default:dirt_with_snow"}) then
 			self.base_texture = {"mobs_bunny_white.png"}
 			self.object:set_properties({textures = self.base_texture})
+
 		-- brown desert bunny
 		elseif minetest.find_node_near(pos, 1,
 				{"default:desert_sand", "default:desert_stone"}) then
 			self.base_texture = {"mobs_bunny_brown.png"}
 			self.object:set_properties({textures = self.base_texture})
+
 		-- grey stone bunny
 		elseif minetest.find_node_near(pos, 1,
 				{"default:stone", "default:gravel"}) then
@@ -102,8 +109,9 @@ stepheight = 0.6,
 
 		return true -- run only once, false/nil runs every activation
 	end,
+
 	attack_type = "dogfight",
-	damage = 5,
+	damage = 5
 })
 
 
@@ -114,17 +122,18 @@ if minetest.get_modpath("ethereal") then
 end
 
 if not mobs.custom_spawn_animal then
-mobs:spawn({
-	name = "mobs_animal:bunny",
-	nodes = {spawn_on},
-	neighbors = {"group:grass"},
-	min_light = 14,
-	interval = 60,
-	chance = 8000, -- 15000
-	min_height = 5,
-	max_height = 200,
-	day_toggle = true,
-})
+
+	mobs:spawn({
+		name = "mobs_animal:bunny",
+		nodes = {spawn_on},
+		neighbors = {"group:grass"},
+		min_light = 14,
+		interval = 60,
+		chance = 8000,
+		min_height = 5,
+		max_height = 200,
+		day_toggle = true
+	})
 end
 
 
@@ -139,7 +148,7 @@ minetest.register_craftitem(":mobs:rabbit_raw", {
 	description = S("Raw Rabbit"),
 	inventory_image = "mobs_rabbit_raw.png",
 	on_use = minetest.item_eat(3),
-	groups = {food_meat_raw = 1, food_rabbit_raw = 1, flammable = 2},
+	groups = {food_meat_raw = 1, food_rabbit_raw = 1, flammable = 2}
 })
 
 -- cooked rabbit
@@ -147,32 +156,31 @@ minetest.register_craftitem(":mobs:rabbit_cooked", {
 	description = S("Cooked Rabbit"),
 	inventory_image = "mobs_rabbit_cooked.png",
 	on_use = minetest.item_eat(5),
-	groups = {food_meat = 1, food_rabbit = 1, flammable = 2},
+	groups = {food_meat = 1, food_rabbit = 1, flammable = 2}
 })
 
 minetest.register_craft({
 	type = "cooking",
 	output = "mobs:rabbit_cooked",
 	recipe = "mobs:rabbit_raw",
-	cooktime = 5,
+	cooktime = 5
 })
 
 -- rabbit hide
 minetest.register_craftitem(":mobs:rabbit_hide", {
 	description = S("Rabbit Hide"),
 	inventory_image = "mobs_rabbit_hide.png",
-	groups = {flammable = 2, pelt = 1},
+	groups = {flammable = 2, pelt = 1}
 })
 
 minetest.register_craft({
 	type = "fuel",
 	recipe = "mobs:rabbit_hide",
-	burntime = 2,
+	burntime = 2
 })
 
 minetest.register_craft({
 	output = "mobs:leather",
---	type = "shapeless",
 	recipe = {
 		{"mobs:rabbit_hide", "mobs:rabbit_hide"},
 		{"mobs:rabbit_hide", "mobs:rabbit_hide"}

+ 41 - 57
chicken.lua

@@ -1,11 +1,11 @@
 
-local S = mobs.intllib
+local S = mobs.intllib_animal
 
 
 -- Chicken by JK Murray and Sirrobzeroone
 
 mobs:register_mob("mobs_animal:chicken", {
-stepheight = 0.6,
+	stepheight = 0.6,
 	type = "animal",
 	passive = true,
 	hp_min = 5,
@@ -17,14 +17,14 @@ stepheight = 0.6,
 	textures = {
 		{"mobs_chicken.png"}, -- white
 		{"mobs_chicken_brown.png"},
-		{"mobs_chicken_black.png"},
+		{"mobs_chicken_black.png"}
 	},
 	child_texture = {
-		{"mobs_chick.png"},
+		{"mobs_chick.png"}
 	},
 	makes_footstep_sound = true,
 	sounds = {
-		random = "mobs_chicken",
+		random = "mobs_chicken"
 	},
 	walk_velocity = 1,
 	run_velocity = 3,
@@ -32,7 +32,7 @@ stepheight = 0.6,
 	runaway_from = {"player", "mobs_animal:pumba"},
 	drops = {
 		{name = "mobs:chicken_raw", chance = 1, min = 1, max = 1},
-		{name = "mobs:chicken_feather", chance = 1, min = 0, max = 2},
+		{name = "mobs:chicken_feather", chance = 1, min = 0, max = 2}
 	},
 	water_damage = 1,
 	lava_damage = 5,
@@ -53,7 +53,7 @@ stepheight = 0.6,
 		walk_speed = 24,
 		run_start = 91,
 		run_end = 110,
-		run_speed = 24,
+		run_speed = 24
 	},
 	follow = {
 		"farming:seed_wheat", "farming:seed_cotton", "farming:seed_barley",
@@ -77,7 +77,7 @@ stepheight = 0.6,
 		self.egg_timer = 0
 
 		if self.child
-		or math.random(1, 100) > 1 then
+		or math.random(100) > 1 then
 			return
 		end
 
@@ -88,9 +88,9 @@ stepheight = 0.6,
 		minetest.sound_play("default_place_node_hard", {
 			pos = pos,
 			gain = 1.0,
-			max_hear_distance = 5,
+			max_hear_distance = 5
 		})
-	end,
+	end
 })
 
 
@@ -102,17 +102,18 @@ end
 
 
 if not mobs.custom_spawn_animal then
-mobs:spawn({
-	name = "mobs_animal:chicken",
-	nodes = spawn_on,
-	neighbors = {"group:grass"},
-	min_light = 14,
-	interval = 60,
-	chance = 8000, -- 15000
-	min_height = 5,
-	max_height = 200,
-	day_toggle = true,
-})
+
+	mobs:spawn({
+		name = "mobs_animal:chicken",
+		nodes = spawn_on,
+		neighbors = {"group:grass"},
+		min_light = 14,
+		interval = 60,
+		chance = 8000,
+		min_height = 5,
+		max_height = 200,
+		day_toggle = true
+	})
 end
 
 
@@ -133,20 +134,20 @@ mobs:register_arrow("mobs_animal:egg_entity", {
 	hit_player = function(self, player)
 		player:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, {
 			full_punch_interval = 1.0,
-			damage_groups = {fleshy = 1},
+			damage_groups = {fleshy = 1}
 		}, nil)
 	end,
 
 	hit_mob = function(self, player)
 		player:punch(self.object, 1.0, {
 			full_punch_interval = 1.0,
-			damage_groups = {fleshy = 1},
+			damage_groups = {fleshy = 1}
 		}, nil)
 	end,
 
 	hit_node = function(self, pos, node)
 
-		if math.random(1, 10) > 1 then
+		if math.random(10) > 1 then
 			return
 		end
 
@@ -160,28 +161,10 @@ mobs:register_arrow("mobs_animal:egg_entity", {
 			return
 		end
 
-		local mob = minetest.add_entity(pos, "mobs_animal:chicken")
-		local ent2 = mob:get_luaentity()
-
-		mob:set_properties({
-			textures = ent2.child_texture[1],
-			visual_size = {
-				x = ent2.base_size.x / 2,
-				y = ent2.base_size.y / 2
-			},
-			collisionbox = {
-				ent2.base_colbox[1] / 2,
-				ent2.base_colbox[2] / 2,
-				ent2.base_colbox[3] / 2,
-				ent2.base_colbox[4] / 2,
-				ent2.base_colbox[5] / 2,
-				ent2.base_colbox[6] / 2
-			},
-		})
+		local staticdata = minetest.serialize(
+			{child = true, tamed = true, owner = self.playername})
 
-		ent2.child = true
-		ent2.tamed = true
-		ent2.owner = self.playername
+		minetest.add_entity(pos, "mobs_animal:chicken", staticdata)
 	end
 })
 
@@ -199,7 +182,7 @@ local mobs_shoot_egg = function (item, player, pointed_thing)
 	minetest.sound_play("default_place_node_hard", {
 		pos = playerpos,
 		gain = 1.0,
-		max_hear_distance = 5,
+		max_hear_distance = 5
 	})
 
 	local obj = minetest.add_entity({
@@ -215,13 +198,13 @@ local mobs_shoot_egg = function (item, player, pointed_thing)
 	ent.switch = 1 -- needed so that egg doesn't despawn straight away
 	ent._is_arrow = true -- tell advanced mob protection this is an arrow
 
-	obj:setvelocity({
+	obj:set_velocity({
 		x = dir.x * egg_VELOCITY,
 		y = dir.y * egg_VELOCITY,
 		z = dir.z * egg_VELOCITY
 	})
 
-	obj:setacceleration({
+	obj:set_acceleration({
 		x = dir.x * -3,
 		y = -egg_GRAVITY,
 		z = dir.z * -3
@@ -229,6 +212,7 @@ local mobs_shoot_egg = function (item, player, pointed_thing)
 
 	-- pass player name to egg for chick ownership
 	local ent2 = obj:get_luaentity()
+
 	ent2.playername = player:get_player_name()
 
 	item:take_item()
@@ -268,46 +252,46 @@ minetest.register_craftitem(":mobs:chicken_egg_fried", {
 	description = S("Fried Egg"),
 	inventory_image = "mobs_chicken_egg_fried.png",
 	on_use = minetest.item_eat(2),
-	groups = {food_egg_fried = 1, flammable = 2},
+	groups = {food_egg_fried = 1, flammable = 2}
 })
 
 minetest.register_craft({
 	type  =  "cooking",
 	recipe  = "mobs:egg",
-	output = "mobs:chicken_egg_fried",
+	output = "mobs:chicken_egg_fried"
 })
 
 -- raw chicken
 minetest.register_craftitem(":mobs:chicken_raw", {
-description = S("Raw Chicken"),
+	description = S("Raw Chicken"),
 	inventory_image = "mobs_chicken_raw.png",
 	on_use = minetest.item_eat(2),
-	groups = {food_meat_raw = 1, food_chicken_raw = 1, flammable = 2},
+	groups = {food_meat_raw = 1, food_chicken_raw = 1, flammable = 2}
 })
 
 -- cooked chicken
 minetest.register_craftitem(":mobs:chicken_cooked", {
-description = S("Cooked Chicken"),
+	description = S("Cooked Chicken"),
 	inventory_image = "mobs_chicken_cooked.png",
 	on_use = minetest.item_eat(6),
-	groups = {food_meat = 1, food_chicken = 1, flammable = 2},
+	groups = {food_meat = 1, food_chicken = 1, flammable = 2}
 })
 
 minetest.register_craft({
 	type  =  "cooking",
 	recipe  = "mobs:chicken_raw",
-	output = "mobs:chicken_cooked",
+	output = "mobs:chicken_cooked"
 })
 
 -- feather
 minetest.register_craftitem(":mobs:chicken_feather", {
 	description = S("Feather"),
 	inventory_image = "mobs_chicken_feather.png",
-	groups = {flammable = 2, feather = 1},
+	groups = {flammable = 2, feather = 1}
 })
 
 minetest.register_craft({
 	type = "fuel",
 	recipe = "mobs:chicken_feather",
-	burntime = 1,
+	burntime = 1
 })

+ 91 - 44
cow.lua

@@ -1,5 +1,5 @@
 
-local S = mobs.intllib
+local S = mobs.intllib_animal
 
 
 -- Cow by sirrobzeroone
@@ -19,7 +19,7 @@ mobs:register_mob("mobs_animal:cow", {
 	mesh = "mobs_cow.b3d",
 	textures = {
 		{"mobs_cow.png"},
-		{"mobs_cow2.png"},
+		{"mobs_cow2.png"}
 	},
 	makes_footstep_sound = true,
 	sounds = {
@@ -32,7 +32,7 @@ mobs:register_mob("mobs_animal:cow", {
 	pushable = true,
 	drops = {
 		{name = "mobs:meat_raw", chance = 1, min = 1, max = 3},
-		{name = "mobs:leather", chance = 1, min = 0, max = 2},
+		{name = "mobs:leather", chance = 1, min = 0, max = 2}
 	},
 	water_damage = 0,
 	lava_damage = 5,
@@ -56,7 +56,7 @@ mobs:register_mob("mobs_animal:cow", {
 		die_start = 165,
 		die_end = 185,
 		die_speed = 10,
-		die_loop = false,
+		die_loop = false
 	},
 	follow = {
 		"farming:wheat", "default:grass_1", "farming:barley",
@@ -70,6 +70,7 @@ mobs:register_mob("mobs_animal:cow", {
 	},
 --	stay_near = {{"farming:straw", "group:grass"}, 10},
 	fear_height = 2,
+
 	on_rightclick = function(self, clicker)
 
 		-- feed or tame
@@ -88,9 +89,11 @@ mobs:register_mob("mobs_animal:cow", {
 
 		local tool = clicker:get_wielded_item()
 		local name = clicker:get_player_name()
+		local item = tool:get_name()
 
 		-- milk cow with empty bucket
-		if tool:get_name() == "bucket:bucket_empty" then
+		if item == "bucket:bucket_empty"
+		or item == "wooden_bucket:bucket_wood_empty" then
 
 			--if self.gotten == true
 			if self.child == true then
@@ -98,8 +101,9 @@ mobs:register_mob("mobs_animal:cow", {
 			end
 
 			if self.gotten == true then
-				minetest.chat_send_player(name,
-					S("Cow already milked!"))
+
+				minetest.chat_send_player(name, S("Cow already milked!"))
+
 				return
 			end
 
@@ -108,12 +112,21 @@ mobs:register_mob("mobs_animal:cow", {
 			tool:take_item()
 			clicker:set_wielded_item(tool)
 
-			if inv:room_for_item("main", {name = "mobs:bucket_milk"}) then
-				clicker:get_inventory():add_item("main", "mobs:bucket_milk")
+			-- which bucket are we using
+			local ret_item = "mobs:bucket_milk"
+
+			if item == "wooden_bucket:bucket_wood_empty" then
+				ret_item = "mobs:wooden_bucket_milk"
+			end
+
+			if inv:room_for_item("main", {name = ret_item}) then
+				clicker:get_inventory():add_item("main", ret_item)
 			else
 				local pos = self.object:get_pos()
+
 				pos.y = pos.y + 0.5
-				minetest.add_item(pos, {name = "mobs:bucket_milk"})
+
+				minetest.add_item(pos, {name = ret_item})
 			end
 
 			self.gotten = true -- milked
@@ -131,22 +144,23 @@ mobs:register_mob("mobs_animal:cow", {
 			self.food = 0
 			self.gotten = false
 		end
-	end,
+	end
 })
 
 
 if not mobs.custom_spawn_animal then
-mobs:spawn({
-	name = "mobs_animal:cow",
-	nodes = {"default:dirt_with_grass", "ethereal:green_dirt"},
-	neighbors = {"group:grass"},
-	min_light = 14,
-	interval = 60,
-	chance = 8000, -- 15000
-	min_height = 5,
-	max_height = 200,
-	day_toggle = true,
-})
+
+	mobs:spawn({
+		name = "mobs_animal:cow",
+		nodes = {"default:dirt_with_grass", "ethereal:green_dirt"},
+		neighbors = {"group:grass"},
+		min_light = 14,
+		interval = 60,
+		chance = 8000,
+		min_height = 5,
+		max_height = 200,
+		day_toggle = true
+	})
 end
 
 
@@ -162,7 +176,7 @@ minetest.register_craftitem(":mobs:bucket_milk", {
 	inventory_image = "mobs_bucket_milk.png",
 	stack_max = 1,
 	on_use = minetest.item_eat(8, "bucket:bucket_empty"),
-	groups = {food_milk = 1, flammable = 3, drink = 1},
+	groups = {food_milk = 1, flammable = 3, drink = 1}
 })
 
 -- glass of milk
@@ -170,22 +184,20 @@ minetest.register_craftitem(":mobs:glass_milk", {
 	description = S("Glass of Milk"),
 	inventory_image = "mobs_glass_milk.png",
 	on_use = minetest.item_eat(2, "vessels:drinking_glass"),
-	groups = {food_milk_glass = 1, flammable = 3, vessel = 1, drink = 1},
+	groups = {food_milk_glass = 1, flammable = 3, vessel = 1, drink = 1}
 })
 
 minetest.register_craft({
---	type = "shapeless",
 	output = "mobs:glass_milk 4",
 	recipe = {
 		{"vessels:drinking_glass", "vessels:drinking_glass"},
 		{"vessels:drinking_glass", "vessels:drinking_glass"},
 		{"mobs:bucket_milk", ""}
 	},
-	replacements = { {"mobs:bucket_milk", "bucket:bucket_empty"} }
+	replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
 })
 
 minetest.register_craft({
---	type = "shapeless",
 	output = "mobs:bucket_milk",
 	recipe = {
 		{"group:food_milk_glass", "group:food_milk_glass"},
@@ -206,28 +218,24 @@ minetest.register_craftitem(":mobs:butter", {
 	groups = {food_butter = 1, flammable = 2}
 })
 
+local salt_item = "default:sapling" -- some saplings are high in sodium
+
 if minetest.get_modpath("farming") and farming and farming.mod then
+	salt_item = "farming:salt"
+end
+
 minetest.register_craft({
-	type = "shapeless",
-	output = "mobs:butter",
-	recipe = {"mobs:bucket_milk", "farming:salt"},
-	replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
-})
-else -- some saplings are high in sodium so makes a good replacement item
-minetest.register_craft({
-	type = "shapeless",
 	output = "mobs:butter",
-	recipe = {"mobs:bucket_milk", "default:sapling"},
-	replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
+	recipe = {{"mobs:bucket_milk", salt_item}},
+	replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
 })
-end
 
 -- cheese wedge
 minetest.register_craftitem(":mobs:cheese", {
 	description = S("Cheese"),
 	inventory_image = "mobs_cheese.png",
 	on_use = minetest.item_eat(4),
-	groups = {food_cheese = 1, flammable = 2},
+	groups = {food_cheese = 1, flammable = 2}
 })
 
 minetest.register_craft({
@@ -235,7 +243,7 @@ minetest.register_craft({
 	output = "mobs:cheese",
 	recipe = "mobs:bucket_milk",
 	cooktime = 5,
-	replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
+	replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
 })
 
 -- cheese block
@@ -252,13 +260,52 @@ minetest.register_craft({
 	recipe = {
 		{"group:food_cheese", "group:food_cheese", "group:food_cheese"},
 		{"group:food_cheese", "group:food_cheese", "group:food_cheese"},
-		{"group:food_cheese", "group:food_cheese", "group:food_cheese"},
+		{"group:food_cheese", "group:food_cheese", "group:food_cheese"}
 	}
 })
 
 minetest.register_craft({
 	output = "mobs:cheese 9",
-	recipe = {
-		{"mobs:cheeseblock"},
-	}
+	recipe = {{"mobs:cheeseblock"}}
 })
+
+
+-- check for wooden bucket mod and add compatibility
+if minetest.get_modpath("wooden_bucket") then
+
+	minetest.register_craftitem(":mobs:wooden_bucket_milk", {
+		description = S("Wooden Bucket of Milk"),
+		inventory_image = "mobs_wooden_bucket_milk.png",
+		stack_max = 1,
+		on_use = minetest.item_eat(8, "wooden_bucket:bucket_wood_empty"),
+		groups = {food_milk = 1, flammable = 3, drink = 1}
+	})
+
+	minetest.register_craft({
+		output = "mobs:glass_milk 4",
+		recipe = {
+			{"vessels:drinking_glass", "vessels:drinking_glass"},
+			{"vessels:drinking_glass", "vessels:drinking_glass"},
+			{"mobs:wooden_bucket_milk", ""}
+		},
+		replacements = {{"mobs:wooden_bucket_milk", "wooden_bucket:bucket_wood_empty"}}
+	})
+
+	minetest.register_craft({
+		output = "mobs:wooden_bucket_milk",
+		recipe = {
+			{"group:food_milk_glass", "group:food_milk_glass"},
+			{"group:food_milk_glass", "group:food_milk_glass"},
+			{"wooden_bucket:bucket_wood_empty", ""}
+		},
+		replacements = {
+			{"group:food_milk_glass", "vessels:drinking_glass 4"}
+		}
+	})
+
+	minetest.register_craft({
+		output = "mobs:butter",
+		recipe = {{"mobs:wooden_bucket_milk", salt_item}},
+		replacements = {{"mobs:wooden_bucket_milk", "wooden_bucket:bucket_wood_empty"}}
+	})
+end

+ 26 - 6
init.lua

@@ -1,11 +1,28 @@
-
 local path = minetest.get_modpath(minetest.get_current_modname()) .. "/"
 
-local S = minetest.get_translator and minetest.get_translator("mobs_animal") or
-		dofile(path .. "intllib.lua")
+-- Check for translation method
+local S
+if minetest.get_translator ~= nil then
+	S = minetest.get_translator("mobs_animal") -- 5.x translation function
+else
+	if minetest.get_modpath("intllib") then
+		dofile(minetest.get_modpath("intllib") .. "/init.lua")
+		if intllib.make_gettext_pair then
+			S = intllib.make_gettext_pair() -- new gettext method
+		else
+			S = intllib.Getter() -- old text file method
+		end
+	else -- boilerplate function
+		S = function(str, ...)
+			local args = {...}
+			return str:gsub("@%d+", function(match)
+				return args[tonumber(match:sub(2))]
+			end)
+		end
+	end
+end
 
-mobs.intllib = S
+mobs.intllib_animal = S
 
 
 -- Check for custom mob spawn file
@@ -38,7 +55,9 @@ end
 
 
 -- Lucky Blocks
-dofile(path .. "lucky_block.lua")
+if minetest.get_modpath("lucky_block") then
+	dofile(path .. "lucky_block.lua")
+end
 
 
-print (S("[MOD] Mobs Redo Animals loaded"))
+print ("[MOD] Mobs Redo Animals loaded")

+ 0 - 2
intllib.lua

@@ -1,3 +0,0 @@
-dofile(minetest.get_modpath("intllib").."/init.lua")
-

+ 31 - 29
kitten.lua

@@ -1,19 +1,20 @@
 
-local S = mobs.intllib
+local S = mobs.intllib_animal
 local hairball = minetest.settings:get("mobs_hairball")
 
+
 -- Kitten by Jordach / BFD
 
 mobs:register_mob("mobs_animal:kitten", {
-stepheight = 0.6,
+	stepheight = 0.6,
 	type = "animal",
-specific_attack = {"mobs_animal:rat"},
-damage = 1,
-attack_type = "dogfight",
-attack_animals = true, -- so it can attack rat
-attack_players = false,
-reach = 1,
-stepheight = 1.1,
+	specific_attack = {"mobs_animal:rat"},
+	damage = 1,
+	attack_type = "dogfight",
+	attack_animals = true, -- so it can attack rat
+	attack_players = false,
+	reach = 1,
+	stepheight = 1.1,
 	passive = false,
 	hp_min = 5,
 	hp_max = 10,
@@ -26,11 +27,11 @@ stepheight = 1.1,
 		{"mobs_kitten_striped.png"},
 		{"mobs_kitten_splotchy.png"},
 		{"mobs_kitten_ginger.png"},
-		{"mobs_kitten_sandy.png"},
+		{"mobs_kitten_sandy.png"}
 	},
 	makes_footstep_sound = false,
 	sounds = {
-		random = "mobs_kitten",
+		random = "mobs_kitten"
 	},
 	walk_velocity = 0.6,
 	walk_chance = 15,
@@ -38,7 +39,7 @@ stepheight = 1.1,
 	runaway = true,
 	jump = false,
 	drops = {
-		{name = "farming:string", chance = 1, min = 0, max = 1},
+		{name = "farming:string", chance = 1, min = 0, max = 1}
 	},
 	water_damage = 0,
 	lava_damage = 5,
@@ -54,7 +55,7 @@ stepheight = 1.1,
 	},
 	follow = {
 		"mobs_animal:rat", "group:food_fish_raw",
-		"mobs_fish:tropical", "xocean:fish_edible"
+		"mobs_fish:tropical", "mobs_fish:clownfish", "xocean:fish_edible"
 	},
 	view_range = 8,
 
@@ -92,7 +93,7 @@ stepheight = 1.1,
 		self.hairball_timer = 0
 
 		if self.child
-		or math.random(1, 250) > 1 then
+		or math.random(250) > 1 then
 			return
 		end
 
@@ -103,9 +104,9 @@ stepheight = 1.1,
 		minetest.sound_play("default_dig_snappy", {
 			pos = pos,
 			gain = 1.0,
-			max_hear_distance = 5,
+			max_hear_distance = 5
 		})
-	end,
+	end
 })
 
 
@@ -116,17 +117,18 @@ if minetest.get_modpath("ethereal") then
 end
 
 if not mobs.custom_spawn_animal then
-mobs:spawn({
-	name = "mobs_animal:kitten",
-	nodes = {spawn_on},
-	neighbors = {"group:grass"},
-	min_light = 14,
-	interval = 60,
-	chance = 10000, -- 22000
-	min_height = 5,
-	max_height = 50,
-	day_toggle = true,
-})
+
+	mobs:spawn({
+		name = "mobs_animal:kitten",
+		nodes = {spawn_on},
+		neighbors = {"group:grass"},
+		min_light = 14,
+		interval = 60,
+		chance = 10000,
+		min_height = 5,
+		max_height = 50,
+		day_toggle = true
+	})
 end
 
 
@@ -164,11 +166,11 @@ minetest.register_craftitem(":mobs:hairball", {
 		minetest.sound_play("default_place_node_hard", {
 			pos = newpos,
 			gain = 1.0,
-			max_hear_distance = 5,
+			max_hear_distance = 5
 		})
 
 		itemstack:take_item()
 
 		return itemstack
-	end,
+	end
 })

+ 75 - 3
license.txt

@@ -1,3 +1,7 @@
+
+All my models (K Pavel) and change code on valid license The MIT License
+
+
 The MIT License (MIT)
 
 Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1
@@ -20,10 +24,78 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 
-Chicken sounds from freesounds.org under CC0
 
-Mutton, Pork and Rabbit meat textures by Piezo_ under CC0
+Chicken/Cow/Panda/Pig/Sheep sounds from freesounds.org under CC0
 
-Cow textures by sirrobzeroone under CC0
+Mutton, Pork and Rabbit meat textures by Piezo_ under CC0
 
 mobs_panda_viking.png by Zlo under CC0
+
+Models/Textures/Media by Krupnov Pavel (WTFPL)
+  mobs_rat.b3d
+  mobs_rat.png
+  mobs_sheep.b3d
+  mobs_sheep_shaved.b3d
+  mobs_stone_monster.b3d
+  mobs_stone_monster.png
+  mobs_dirt_monster.png
+  mobs_sand_monster.png
+  mobs_tree_monster.b3d
+  mobs_tree_monster.png
+  mobs_oerkki.b3d
+  mobs_oerkki.png
+  mobs_dungeon_master.b3d
+  mobs_dungeon_master.png
+  mobs_fireball.ogg
+
+Models/Textures by Krupno Pavel (MIT)
+  mobs_bee.b3d (converted to .b3d by sirrobzerrone)
+  mobs_bee.png
+  mobs_pumba.b3d (converted to .b3d by sirrobzerrone)
+  mobs_pumba.png
+
+Models/Textures by ExeterDad (CC0)
+  mobs_bunny.b3d
+  mobs_bunny_grey.png
+  mobs_bunny_brown.png
+  mobs_bunny_white.png
+
+Models/Textures by JK Murray (CC0)
+  mobs_chicken.b3d (converted to .b3d by sirrobzerrone)
+  mobs_chicken.png
+  mobs_chicken_brown.png
+  mobs_chicken_black.png
+  mobs_chick.png
+
+Models/Textures by sirrobzerrone (CC0)
+  mobs_cow.b3d
+  mobs_cow.png
+  mobs_cow2.png
+
+Models/Textures by Jordach/BFD (WTFPL)
+  mobs_kitten.b3d
+  mobs_kitten_striped.png
+  mobs_kitten_splotchy.png
+  mobs_kitten_ginger.png
+  mobs_kitten_sandy.png
+
+Sounds by lolamadeus (CC0) http://freesound.org/people/lolamadeus/sounds/196251/
+  mobs_kitten.ogg
+
+Models/Textures by AspireMint (CC BY-SA 3.0)
+  mobs_panda.b3d
+  mobs_panda.png
+
+Models/Textures by D00Med (CC BY-SA 3.0)
+  mobs_penguin.b3d
+  mobs_penguin.png
+
+Textures by LithiumSound's Summer Field Texture Pack (CC BY-SA 4.0 NC ShareAlike International)
+  mobs_sheep_base.png
+  mobs_sheep_shaved.png
+  mobs_sheep_wool.png
+
+Sounds by Cyberpangolin (WTFPL) https://forum.minetest.net/viewtopic.php?t=10798
+  mobs_bee.ogg
+  mobs_spider.ogg
+  mobs_rat.ogg

+ 46 - 0
locale/mobs_animal.es.tr

@@ -0,0 +1,46 @@
+# textdomain: mobs_animal
+Bee=Abeja
+Honey=Miel
+Beehive=Colmena
+Honey Block=Bloque de Mel
+Bunny=Conejo
+Raw Rabbit=Carne de Conejo
+Cooked Rabbit=Conejo Asado
+Rabbit Hide=Conejo oculto
+Chicken=Gallina
+Chicken Egg=Huevo de Gallina
+Fried Egg=Huevo Frito
+Raw Chicken=Gallina cruda
+Cooked Chicken=Gallina Asada
+Feather=Pluma
+Cow already milked!=Vaca ordeñada
+Cow=Vaca
+Bucket of Milk=Balde de leche
+Cheese=Queso
+Cheese Block=Bloque de queso
+[MOD] Mobs Redo 'Animals' loaded=[MOD] Mobs redo Animals cargado
+Kitten=Gato
+Penguin=Pinguino
+Rat=Raton
+Cooked Rat=Raton Asado
+Black=Negro
+Blue=Azul
+Brown=Marrom
+Cyan=Cian
+Dark Green=Verde Oscuro
+Dark Grey=Gris Oscuro
+Green=Verde
+Grey=Gris
+Magenta=Magenta
+Orange=Naranja
+Pink=Rosa
+Red=Rojo
+Violet=Violeta
+White=Blanco
+Yellow=Amarillo
+@1 Sheep=Oveja @1 
+Raw Mutton=Carnero crudo
+Cooked Mutton=Carnero Assado
+Warthog=Javali
+Raw Porkchop=Costilla de Jabali crudo
+Cooked Porkchop=Costilla de Javali Assada

+ 0 - 0
lucky_block.lua


Some files were not shown because too many files changed in this diff