code:
local S = mobs.intllib

-- Bee by KrupnoPavel (.b3d model by sirrobzeroone)

mobs:register_mob("mobs_animal:bee", {
	type = "animal",
	passive = true,
	hp_min = 1,
	hp_max = 2,
	armor = 200,
	collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.5, 0.2},
	visual = "mesh",
	mesh = "mobs_bee.b3d",
	textures = {
		{"mobs_bee.png"},
	},
	blood_texture = "mobs_bee_inv.png",
	blood_amount = 1,
	makes_footstep_sound = false,
	sounds = {
		random = "mobs_bee",
	},
	walk_velocity = 1,
	jump = true,
	drops = {
		{name = "mobs:honey", chance = 2, min = 1, max = 2},
	},
	water_damage = 1,
	lava_damage = 2,
	light_damage = 0,
	fall_damage = 0,
	fall_speed = -3,
	animation = {
		speed_normal = 15,
		stand_start = 0,
		stand_end = 30,
		walk_start = 35,
		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,
})

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:register_egg("mobs_animal:bee", S("Bee"), "mobs_bee_inv.png")

-- compatibility
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},
})

-- beehive (when placed spawns bee)
minetest.register_node(":mobs:beehive", {
	description = S("Beehive"),
	drawtype = "plantlike",
	tiles = {"mobs_beehive.png"},
	inventory_image = "mobs_beehive.png",
	paramtype = "light",
	sunlight_propagates = true,
	walkable = true,
	groups = {oddly_breakable_by_hand = 3, flammable = 1, disable_suffocation = 1},
	sounds = default.node_sound_defaults(),

	on_construct = function(pos)

		local meta = minetest.get_meta(pos)

		meta:set_string("formspec", "size[8,6]"
			..default.gui_bg..default.gui_bg_img..default.gui_slots
			.. "image[3,0.8;0.8,0.8;mobs_bee_inv.png]"
			.. "list[current_name;beehive;4,0.5;1,1;]"
			.. "list[current_player;main;0,2.35;8,4;]"
			.. "listring[]")

		meta:get_inventory():set_size("beehive", 1)
	end,

	after_place_node = function(pos, placer, itemstack)

		if placer and placer:is_player() then

			minetest.set_node(pos, {name = "mobs:beehive", param2 = 1})

			if math.random(1, 4) == 1 then
				minetest.add_entity(pos, "mobs_animal:bee")
			end
		end
	end,

	on_punch = function(pos, node, puncher)

		-- yep, bee's don't like having their home punched by players
		puncher:set_hp(puncher:get_hp() - 4)
	end,

	allow_metadata_inventory_put = function(pos, listname, index, stack, player)

		if listname == "beehive" then
			return 0
		end

		return stack:get_count()
	end,

	can_dig = function(pos,player)

		local meta = minetest.get_meta(pos)

		-- only dig beehive if no honey inside
		return meta:get_inventory():is_empty("beehive")
	end,

})

minetest.register_craft({
	output = "mobs:beehive",
	recipe = {
		{"mobs:bee","mobs:bee","mobs:bee"},
	}
})

-- honey block
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(),
})

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"},
	}
})

minetest.register_craft({
	output = "mobs:honey 9",
	recipe = {
		{"mobs:honey_block"},
	}
})

-- beehive workings
minetest.register_abm({
	nodenames = {"mobs:beehive"},
	interval = 12,
	chance = 6,
	catch_up = false,
	action = function(pos, node)

		-- bee's only make honey during the day
		local tod = (minetest.get_timeofday() or 0) * 24000

		if tod < 5500 or tod > 18500 then
			return
		end

		-- is hive full?
		local meta = minetest.get_meta(pos)
		if not meta then return end -- for older beehives
		local inv = meta:get_inventory()
		local honey = inv:get_stack("beehive", 1):get_count()

		-- is hive full?
		if honey > 11 then
			return
		end

		-- no flowers no honey, nuff said!
		if #minetest.find_nodes_in_area_under_air(
			{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
			{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
			"group:flower") > 3 then

			inv:add_item("beehive", "mobs:honey")
		end
	end
})


code:
local S = mobs.intllib

-- Bunny by ExeterDad

mobs:register_mob("mobs_animal:bunny", {
stepheight = 0.6,
	type = "animal",
	passive = true,
	reach = 1,
	hp_min = 1,
	hp_max = 4,
	armor = 200,
	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"},
	},
	sounds = {},
	makes_footstep_sound = false,
	walk_velocity = 1,
	run_velocity = 2,
	runaway = true,
	runaway_from = {"mobs_animal:pumba", "player"},
	jump = true,
	jump_height = 6,
	drops = {
		{name = "mobs:rabbit_raw", chance = 1, min = 1, max = 1},
		{name = "mobs:rabbit_hide", chance = 1, min = 0, max = 1},
	},
	water_damage = 0,
	lava_damage = 4,
	light_damage = 0,
	fear_height = 2,
	animation = {
		speed_normal = 15,
		stand_start = 1,
		stand_end = 15,
		walk_start = 16,
		walk_end = 24,
		punch_start = 16,
		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
		if mobs:feed_tame(self, clicker, 4, true, true) then return end
		if mobs:protect(self, clicker) then return end
		if mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) then return end

		-- Monty Python tribute
		local item = clicker:get_wielded_item()

		if item:get_name() == "mobs:lava_orb" then

			if not mobs.is_creative(clicker:get_player_name()) then
				item:take_item()
				clicker:set_wielded_item(item)
			end

			self.object:set_properties({
				textures = {"mobs_bunny_evil.png"},
			})

			self.type = "monster"
			self.health = 20
			self.passive = false

			return
		end
	end,
	on_spawn = function(self)

		local pos = self.object:get_pos() ; pos.y = pos.y - 1

		-- white snowy bunny
		if minetest.find_node_near(pos, 1,
				{"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
			self.base_texture = {"mobs_bunny_grey.png"}
			self.object:set_properties({textures = self.base_texture})
		end

		return true -- run only once, false/nil runs every activation
	end,
	attack_type = "dogfight",
	damage = 5,
})

local spawn_on = "default:dirt_with_grass"

if minetest.get_modpath("ethereal") then
	spawn_on = "ethereal:prairie_dirt"
end

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:register_egg("mobs_animal:bunny", S("Bunny"), "mobs_bunny_inv.png", 0)

mobs:alias_mob("mobs:bunny", "mobs_animal:bunny") -- compatibility

-- raw rabbit
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},
})

-- cooked rabbit
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},
})

minetest.register_craft({
	type = "cooking",
	output = "mobs:rabbit_cooked",
	recipe = "mobs:rabbit_raw",
	cooktime = 5,
})

-- rabbit hide
minetest.register_craftitem(":mobs:rabbit_hide", {
	description = S("Rabbit Hide"),
	inventory_image = "mobs_rabbit_hide.png",
	groups = {flammable = 2},
})

minetest.register_craft({
	type = "fuel",
	recipe = "mobs:rabbit_hide",
	burntime = 2,
})

minetest.register_craft({
	output = "mobs:leather",
	type = "shapeless",
	recipe = {
		"mobs:rabbit_hide", "mobs:rabbit_hide",
		"mobs:rabbit_hide", "mobs:rabbit_hide"
	}
})

repo_name: Desour/PlayMinetestServer

license: mit


code:
local S = mobs.intllib

-- Chicken by JK Murray and Sirrobzeroone

mobs:register_mob("mobs_animal:chicken", {
stepheight = 0.6,
	type = "animal",
	passive = true,
	hp_min = 5,
	hp_max = 10,
	armor = 200,
	collisionbox = {-0.3, -0.75, -0.3, 0.3, 0.1, 0.3},
	visual = "mesh",
	mesh = "mobs_chicken.b3d",
	textures = {
		{"mobs_chicken.png"}, -- white
		{"mobs_chicken_brown.png"},
		{"mobs_chicken_black.png"},
	},
	child_texture = {
		{"mobs_chick.png"},
	},
	makes_footstep_sound = true,
	sounds = {
		random = "mobs_chicken",
	},
	walk_velocity = 1,
	run_velocity = 3,
	runaway = true,
	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},
	},
	water_damage = 1,
	lava_damage = 5,
	light_damage = 0,
	fall_damage = 0,
	fall_speed = -8,
	fear_height = 5,
	animation = {
		speed_normal = 15,
		stand_start = 1,
		stand_end = 30,
		stand_speed = 28,
		stand1_start = 31,
		stand1_end = 70,
		stand1_speed = 32,
		walk_start = 71,
		walk_end = 90,
		walk_speed = 24,
		run_start = 91,
		run_end = 110,
		run_speed = 24,
	},
	follow = {"farming:seed_wheat", "farming:seed_cotton"},
	view_range = 5,

	on_rightclick = function(self, clicker)

		if mobs:feed_tame(self, clicker, 8, true, true) then return end
		if mobs:protect(self, clicker) then return end
		if mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) then return end
	end,

	do_custom = function(self, dtime)

		self.egg_timer = (self.egg_timer or 0) + dtime
		if self.egg_timer < 10 then
			return
		end
		self.egg_timer = 0

		if self.child
		or math.random(1, 100) > 1 then
			return
		end

		local pos = self.object:get_pos()

		minetest.add_item(pos, "mobs:egg")

		minetest.sound_play("default_place_node_hard", {
			pos = pos,
			gain = 1.0,
			max_hear_distance = 5,
		})
	end,
})

local spawn_on = {"default:dirt_with_grass"}

if minetest.get_modpath("ethereal") then
	spawn_on = {"ethereal:bamboo_dirt", "ethereal:prairie_dirt"}
end

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:register_egg("mobs_animal:chicken", S("Chicken"), "mobs_chicken_inv.png", 0)

mobs:alias_mob("mobs:chicken", "mobs_animal:chicken") -- compatibility

-- egg entity

mobs:register_arrow("mobs_animal:egg_entity", {
	visual = "sprite",
	visual_size = {x=.5, y=.5},
	textures = {"mobs_chicken_egg.png"},
	velocity = 6,

	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},
		}, nil)
	end,

	hit_mob = 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},
		}, nil)
	end,

	hit_node = function(self, pos, node)

		if math.random(1, 10) > 1 then
			return
		end

		pos.y = pos.y + 1

		local nod = minetest.get_node_or_nil(pos)

		if not nod
		or not minetest.registered_nodes[nod.name]
		or minetest.registered_nodes[nod.name].walkable == true then
			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
			},
		})

		ent2.child = true
		ent2.tamed = true
		ent2.owner = self.playername
	end
})

-- egg throwing item

local egg_GRAVITY = 9
local egg_VELOCITY = 19

-- shoot egg
local mobs_shoot_egg = function (item, player, pointed_thing)

	local playerpos = player:get_pos()

	minetest.sound_play("default_place_node_hard", {
		pos = playerpos,
		gain = 1.0,
		max_hear_distance = 5,
	})

	local obj = minetest.add_entity({
		x = playerpos.x,
		y = playerpos.y +1.5,
		z = playerpos.z
	}, "mobs_animal:egg_entity")

	local ent = obj:get_luaentity()
	local dir = player:get_look_dir()

	ent.velocity = egg_VELOCITY -- needed for api internal timing
	ent.switch = 1 -- needed so that egg doesn't despawn straight away

	obj:setvelocity({
		x = dir.x * egg_VELOCITY,
		y = dir.y * egg_VELOCITY,
		z = dir.z * egg_VELOCITY
	})

	obj:setacceleration({
		x = dir.x * -3,
		y = -egg_GRAVITY,
		z = dir.z * -3
	})

	-- pass player name to egg for chick ownership
	local ent2 = obj:get_luaentity()
	ent2.playername = player:get_player_name()

	item:take_item()

	return item
end

-- egg
minetest.register_node(":mobs:egg", {
	description = S("Chicken Egg"),
	tiles = {"mobs_chicken_egg.png"},
	inventory_image  = "mobs_chicken_egg.png",
	visual_scale = 0.7,
	drawtype = "plantlike",
	wield_image = "mobs_chicken_egg.png",
	paramtype = "light",
	walkable = false,
	is_ground_content = true,
	sunlight_propagates = true,
	selection_box = {
		type = "fixed",
		fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
	},
	groups = {food_egg = 1, snappy = 2, dig_immediate = 3},
	after_place_node = function(pos, placer, itemstack)
		if placer:is_player() then
			minetest.set_node(pos, {name = "mobs:egg", param2 = 1})
		end
	end,
	on_use = mobs_shoot_egg
})

-- fried egg
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},
})

minetest.register_craft({
	type  =  "cooking",
	recipe  = "mobs:egg",
	output = "mobs:chicken_egg_fried",
})

-- raw chicken
minetest.register_craftitem(":mobs:chicken_raw", {
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},
})

-- cooked chicken
minetest.register_craftitem(":mobs:chicken_cooked", {
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},
})

minetest.register_craft({
	type  =  "cooking",
	recipe  = "mobs:chicken_raw",
	output = "mobs:chicken_cooked",
})

-- feather
minetest.register_craftitem(":mobs:chicken_feather", {
	description = S("Feather"),
	inventory_image = "mobs_chicken_feather.png",
	groups = {flammable = 2},
})

minetest.register_craft({
	type = "fuel",
	recipe = "mobs:chicken_feather",
	burntime = 1,
})


code:
local S = mobs.intllib

-- Cow by sirrobzeroone

mobs:register_mob("mobs_animal:cow", {
	type = "animal",
	passive = false,
	attack_type = "dogfight",
	attack_npcs = false,
	reach = 2,
	damage = 4,
	hp_min = 5,
	hp_max = 20,
	armor = 200,
	collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.2, 0.4},
	visual = "mesh",
	mesh = "mobs_cow.b3d",
	textures = {
		{"mobs_cow.png"},
		{"mobs_cow2.png"},
	},
	makes_footstep_sound = true,
	sounds = {
		random = "mobs_cow",
	},
	walk_velocity = 1,
	run_velocity = 2,
	jump = true,
	jump_height = 6,
	pushable = true,
	drops = {
		{name = "mobs:meat_raw", chance = 1, min = 1, max = 3},
		{name = "mobs:leather", chance = 1, min = 0, max = 2},
	},
	water_damage = 0,
	lava_damage = 5,
	light_damage = 0,
	animation = {
		stand_start = 0,
		stand_end = 30,
		stand_speed = 20,
		stand1_start = 35,
		stand1_end = 75,
		stand1_speed = 20,
		walk_start = 85,
		walk_end = 114,
		walk_speed = 20,
		run_start = 120,
		run_end = 140,
		run_speed = 30,
		punch_start = 145,
		punch_end = 160,
		punch_speed = 20,
		die_start = 165,
		die_end = 185,
		die_speed = 10,
		die_loop = false,
	},
	follow = {"farming:wheat", "default:grass_1"},
	view_range = 8,
	replace_rate = 10,
	replace_what = {
		{"group:grass", "air", 0},
		{"default:dirt_with_grass", "default:dirt", -1}
	},
--	stay_near = {{"farming:straw", "group:grass"}, 10},
	fear_height = 2,
	on_rightclick = function(self, clicker)

		-- feed or tame
		if mobs:feed_tame(self, clicker, 8, true, true) then

			-- if fed 7x wheat or grass then cow can be milked again
			if self.food and self.food > 6 then
				self.gotten = false
			end

			return
		end

		if mobs:protect(self, clicker) then return end
		if mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) then return end

		local tool = clicker:get_wielded_item()
		local name = clicker:get_player_name()

		-- milk cow with empty bucket
		if tool:get_name() == "bucket:bucket_empty" then

			--if self.gotten == true
			if self.child == true then
				return
			end

			if self.gotten == true then
				minetest.chat_send_player(name,
					S("Cow already milked!"))
				return
			end

			local inv = clicker:get_inventory()

			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")
			else
				local pos = self.object:get_pos()
				pos.y = pos.y + 0.5
				minetest.add_item(pos, {name = "mobs:bucket_milk"})
			end

			self.gotten = true -- milked

			return
		end
	end,

	on_replace = function(self, pos, oldnode, newnode)

		self.food = (self.food or 0) + 1

		-- if cow replaces 8x grass then it can be milked again
		if self.food >= 8 then
			self.food = 0
			self.gotten = false
		end
	end,
})

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:register_egg("mobs_animal:cow", S("Cow"), "mobs_cow_inv.png")

mobs:alias_mob("mobs:cow", "mobs_animal:cow") -- compatibility

-- bucket of milk
minetest.register_craftitem(":mobs:bucket_milk", {
	description = S("Bucket of 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},
})

-- glass of milk
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},
})

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"} }
})

minetest.register_craft({
	type = "shapeless",
	output = "mobs:bucket_milk",
	recipe = {
		"mobs:glass_milk", "mobs:glass_milk",
		"mobs:glass_milk", "mobs:glass_milk",
		"bucket:bucket_empty"
	},
	replacements = { {"mobs:glass_milk", "vessels:drinking_glass 4"} }
})

-- butter
minetest.register_craftitem(":mobs:butter", {
	description = S("Butter"),
	inventory_image = "mobs_butter.png",
	on_use = minetest.item_eat(1),
	groups = {food_butter = 1, flammable = 2},
})

if minetest.get_modpath("farming") and farming and farming.mod then
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"}}
})
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},
})

minetest.register_craft({
	type = "cooking",
	output = "mobs:cheese",
	recipe = "mobs:bucket_milk",
	cooktime = 5,
	replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
})

-- cheese block
minetest.register_node(":mobs:cheeseblock", {
	description = S("Cheese Block"),
	tiles = {"mobs_cheeseblock.png"},
	is_ground_content = false,
	groups = {crumbly = 3},
	sounds = default.node_sound_dirt_defaults()
})

minetest.register_craft({
	output = "mobs:cheeseblock",
	recipe = {
		{"mobs:cheese", "mobs:cheese", "mobs:cheese"},
		{"mobs:cheese", "mobs:cheese", "mobs:cheese"},
		{"mobs:cheese", "mobs:cheese", "mobs:cheese"},
	}
})

minetest.register_craft({
	output = "mobs:cheese 9",
	recipe = {
		{"mobs:cheeseblock"},
	}
})


code:
default
mobs
intllib?
lucky_block?


code: Adds farm animals.


code:
local path = minetest.get_modpath("mobs_animal")

-- Load support for intllib.
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
mobs.intllib = S

-- Animals

dofile(path .. "/chicken.lua") -- JKmurray
dofile(path .. "/cow.lua") -- KrupnoPavel
dofile(path .. "/rat.lua") -- PilzAdam
dofile(path .. "/sheep.lua") -- PilzAdam
dofile(path .. "/warthog.lua") -- KrupnoPavel
dofile(path .. "/bee.lua") -- KrupnoPavel
dofile(path .. "/bunny.lua") -- ExeterDad
dofile(path .. "/kitten.lua") -- Jordach/BFD
dofile(path .. "/penguin.lua") -- D00Med
dofile(path .. "/panda.lua") -- AspireMint

dofile(path .. "/lucky_block.lua")

print (S("[MOD] Mobs Redo Animals loaded"))


code:
-- Fallback functions for when `intllib` is not installed.
-- Code released under Unlicense <http://unlicense.org>.

-- Get the latest version of this file at:
--   https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua

local function format(str, ...)
	local args = { ... }
	local function repl(escape, open, num, close)
		if escape == "" then
			local replacement = tostring(args[tonumber(num)])
			if open == "" then
				replacement = replacement..close
			end
			return replacement
		else
			return "@"..open..num..close
		end
	end
	return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
end

local gettext, ngettext
if minetest.get_modpath("intllib") then
	if intllib.make_gettext_pair then
		-- New method using gettext.
		gettext, ngettext = intllib.make_gettext_pair()
	else
		-- Old method using text files.
		gettext = intllib.Getter()
	end
end

-- Fill in missing functions.

gettext = gettext or function(msgid, ...)
	return format(msgid, ...)
end

ngettext = ngettext or function(msgid, msgid_plural, n, ...)
	return format(n==1 and msgid or msgid_plural, ...)
end

return gettext, ngettext


code:
local S = mobs.intllib
local hairball = minetest.settings:get("mobs_hairball")

-- Kitten by Jordach / BFD

mobs:register_mob("mobs_animal:kitten", {
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,
	passive = false,
	hp_min = 5,
	hp_max = 10,
	armor = 200,
	collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.1, 0.3},
	visual = "mesh",
	visual_size = {x = 0.5, y = 0.5},
	mesh = "mobs_kitten.b3d",
	textures = {
		{"mobs_kitten_striped.png"},
		{"mobs_kitten_splotchy.png"},
		{"mobs_kitten_ginger.png"},
		{"mobs_kitten_sandy.png"},
	},
	makes_footstep_sound = false,
	sounds = {
		random = "mobs_kitten",
	},
	walk_velocity = 0.6,
	walk_chance = 15,
	run_velocity = 2,
	runaway = true,
	jump = false,
	drops = {
		{name = "farming:string", chance = 1, min = 0, max = 1},
	},
	water_damage = 0,
	lava_damage = 5,
	fear_height = 3,
	animation = {
		speed_normal = 42,
		stand_start = 97,
		stand_end = 192,
		walk_start = 0,
		walk_end = 96,
		stoodup_start = 0,
		stoodup_end = 0,
	},
	follow = {"mobs_animal:rat", "ethereal:fish_raw", "mobs_fish:clownfish", "mobs_fish:tropical"},
	view_range = 8,

	on_rightclick = function(self, clicker)

		if mobs:feed_tame(self, clicker, 4, true, true) then return end
		if mobs:protect(self, clicker) then return end
		if mobs:capture_mob(self, clicker, 50, 50, 90, false, nil) then return end

		-- by right-clicking owner can switch between staying and walking
		if self.owner and self.owner == clicker:get_player_name() then

			if self.order ~= "stand" then
				self.order = "stand"
				self.state = "stand"
				self.object:set_velocity({x = 0, y = 0, z = 0})
				mobs:set_animation(self, "stand")
			else
				self.order = ""
				mobs:set_animation(self, "stoodup")
			end
		end
	end,

	do_custom = function(self, dtime)

		if hairball == "false" then
			return
		end

		self.hairball_timer = (self.hairball_timer or 0) + dtime
		if self.hairball_timer < 10 then
			return
		end
		self.hairball_timer = 0

		if self.child
		or math.random(1, 250) > 1 then
			return
		end

		local pos = self.object:get_pos()

		minetest.add_item(pos, "mobs:hairball")

		minetest.sound_play("default_dig_snappy", {
			pos = pos,
			gain = 1.0,
			max_hear_distance = 5,
		})
	end,
})

local spawn_on = "default:dirt_with_grass"

if minetest.get_modpath("ethereal") then
	spawn_on = "ethereal:grove_dirt"
end

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:register_egg("mobs_animal:kitten", S("Kitten"), "mobs_kitten_inv.png", 0)

mobs:alias_mob("mobs:kitten", "mobs_animal:kitten") -- compatibility

local hairball_items = {
	"default:stick", "default:coal_lump", "default:dry_shrub", "flowers:rose",
	"mobs_animal:rat", "default:grass_1", "farming:seed_wheat", "dye:green", "",
	"farming:seed_cotton", "default:flint", "default:sapling", "dye:white", "",
	"default:clay_lump", "default:paper", "default:dry_grass_1", "dye:red", "",
	"farming:string", "mobs:chicken_feather", "default:acacia_bush_sapling", "",
	"default:bush_sapling", "default:copper_lump", "default:iron_lump", "",
	"dye:black", "dye:brown", "default:obsidian_shard", "default:tin_lump"
}

minetest.register_craftitem(":mobs:hairball", {
	description = S("Hairball"),
	inventory_image = "mobs_hairball.png",
	on_use = function(itemstack, user, pointed_thing)

		local pos = user:get_pos()
		local dir = user:get_look_dir()
		local newpos = {x = pos.x + dir.x, y = pos.y + dir.y + 1.5, z = pos.z + dir.z}
		local item = hairball_items[math.random(1, #hairball_items)]

		if item ~= "" then
			minetest.add_item(newpos, {name = item})
		end

		minetest.sound_play("default_place_node_hard", {
			pos = newpos,
			gain = 1.0,
			max_hear_distance = 5,
		})

		itemstack:take_item()

		return itemstack
	end,
})


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: 2016-06-10 08:58+0200\n"
"Last-Translator: Xanthin\n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: bee.lua
msgid "Bee"
msgstr "Biene"

#: bee.lua
msgid "Honey"
msgstr "Honig"

#: bee.lua
msgid "Beehive"
msgstr "Bienenstock"

#: bee.lua
msgid "Honey Block"
msgstr "Honigblock"

#: bunny.lua
msgid "Bunny"
msgstr "Häschen"

#: bunny.lua
msgid "Raw Rabbit"
msgstr "Rohes Kaninchen"

#: bunny.lua
msgid "Cooked Rabbit"
msgstr "Gekochtes Kaninchen"

#: bunny.lua
msgid "Rabbit Hide"
msgstr "Kaninchenfell"

#: chicken.lua
msgid "Chicken"
msgstr "Huhn"

#: chicken.lua
msgid "Chicken Egg"
msgstr "Hühnerei"

#: chicken.lua
msgid "Fried Egg"
msgstr "Spiegelei"

#: chicken.lua
msgid "Raw Chicken"
msgstr "Rohes Hühnchen"

#: chicken.lua
msgid "Cooked Chicken"
msgstr "Gekochtes Hühnchen"

#: chicken.lua
#, fuzzy
msgid "Feather"
msgstr "Feder"

#: cow.lua
msgid "Cow already milked!"
msgstr "Kuh ist bereits gemolken!"

#: cow.lua
msgid "Cow"
msgstr "Kuh"

#: cow.lua
msgid "Bucket of Milk"
msgstr "Eimer Milch"

#: cow.lua
msgid "Cheese"
msgstr "Käse"

#: cow.lua
msgid "Cheese Block"
msgstr "Käseblock"

#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MOD] Mobs Redo 'Animals' geladen"

#: kitten.lua
msgid "Kitten"
msgstr "Kätzchen"

#: penguin.lua
#, fuzzy
msgid "Penguin"
msgstr "Pinguin"

#: rat.lua
msgid "Rat"
msgstr "Ratte"

#: rat.lua
msgid "Cooked Rat"
msgstr "Gekochte Ratte"

#: sheep.lua
msgid "Black"
msgstr "Schwarzes"

#: sheep.lua
msgid "Blue"
msgstr "Blaues"

#: sheep.lua
msgid "Brown"
msgstr "Braunes"

#: sheep.lua
msgid "Cyan"
msgstr "Cyan"

#: sheep.lua
msgid "Dark Green"
msgstr "Dunkelgrünes"

#: sheep.lua
msgid "Dark Grey"
msgstr "Dunkelgraues"

#: sheep.lua
msgid "Green"
msgstr "Grünes"

#: sheep.lua
msgid "Grey"
msgstr "Graues"

#: sheep.lua
msgid "Magenta"
msgstr "Magenta"

#: sheep.lua
msgid "Orange"
msgstr "Oranges"

#: sheep.lua
msgid "Pink"
msgstr "Pinkes"

#: sheep.lua
msgid "Red"
msgstr "Rotes"

#: sheep.lua
msgid "Violet"
msgstr "Violettes"

#: sheep.lua
msgid "White"
msgstr "Weißes"

#: sheep.lua
msgid "Yellow"
msgstr "Gelbes"

#: sheep.lua
#, fuzzy
msgid "@1 Sheep"
msgstr "@1 Schaf"

#: sheep.lua
msgid "Raw Mutton"
msgstr "Rohes Hammelfleisch"

#: sheep.lua
#, fuzzy
msgid "Cooked Mutton"
msgstr "Gekochtes Hammelfleisch"

#: warthog.lua
msgid "Warthog"
msgstr "Warzenschwein"

#: warthog.lua
msgid "Raw Porkchop"
msgstr "Rohes Schweinekotelett"

#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Gekochtes Schweinekotelett"


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: 2017-07-31 09:18+0200\n"
"Last-Translator: fat115 <fat115@framasoft.org>\n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#: bee.lua
msgid "Bee"
msgstr "Abeille"

#: bee.lua
msgid "Honey"
msgstr "Miel"

#: bee.lua
msgid "Beehive"
msgstr "Ruche"

#: bee.lua
msgid "Honey Block"
msgstr "Bloc de miel"

#: bunny.lua
msgid "Bunny"
msgstr "Lapin"

#: bunny.lua
msgid "Raw Rabbit"
msgstr "Lapin Cru"

#: bunny.lua
#, fuzzy
msgid "Cooked Rabbit"
msgstr "Lapin Cuit"

#: bunny.lua
msgid "Rabbit Hide"
msgstr "Fourrure de Lapin"

#: chicken.lua
msgid "Chicken"
msgstr "Poule"

#: chicken.lua
msgid "Chicken Egg"
msgstr "Œuf"

#: chicken.lua
msgid "Fried Egg"
msgstr "Œuf au plat"

#: chicken.lua
msgid "Raw Chicken"
msgstr "Poulet cru"

#: chicken.lua
msgid "Cooked Chicken"
msgstr "Poulet cuit"

#: chicken.lua
msgid "Feather"
msgstr "Plume"

#: cow.lua
msgid "Cow already milked!"
msgstr "Vache déjà traite !"

#: cow.lua
msgid "Cow"
msgstr "Vache"

#: cow.lua
msgid "Bucket of Milk"
msgstr "Seau de lait"

#: cow.lua
msgid "Cheese"
msgstr "Fromage"

#: cow.lua
msgid "Cheese Block"
msgstr "Bloc de fromage"

#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MOD] Mobs Redo 'Animals' chargé"

#: kitten.lua
msgid "Kitten"
msgstr "Chaton"

#: penguin.lua
msgid "Penguin"
msgstr "Manchot"

#: rat.lua
msgid "Rat"
msgstr "Rat"

#: rat.lua
msgid "Cooked Rat"
msgstr "Rat cuit"

#: sheep.lua
msgid "Black"
msgstr "noir"

#: sheep.lua
msgid "Blue"
msgstr "bleu"

#: sheep.lua
msgid "Brown"
msgstr "marron"

#: sheep.lua
msgid "Cyan"
msgstr "cyan"

#: sheep.lua
msgid "Dark Green"
msgstr "vert foncé"

#: sheep.lua
msgid "Dark Grey"
msgstr "gris foncé"

#: sheep.lua
msgid "Green"
msgstr "vert"

#: sheep.lua
msgid "Grey"
msgstr "gris"

#: sheep.lua
msgid "Magenta"
msgstr "magenta"

#: sheep.lua
msgid "Orange"
msgstr "orange"

#: sheep.lua
msgid "Pink"
msgstr "rose"

#: sheep.lua
msgid "Red"
msgstr "rouge"

#: sheep.lua
msgid "Violet"
msgstr "violet"

#: sheep.lua
msgid "White"
msgstr "blanc"

#: sheep.lua
msgid "Yellow"
msgstr "jaune"

#: sheep.lua
#, fuzzy
msgid "@1 Sheep"
msgstr "Mouton @1"

#: sheep.lua
msgid "Raw Mutton"
msgstr "Mouton Cru"

#: sheep.lua
#, fuzzy
msgid "Cooked Mutton"
msgstr "Mouton Cuit"

#: warthog.lua
msgid "Warthog"
msgstr "Sanglier"

#: warthog.lua
msgid "Raw Porkchop"
msgstr "Côte de sanglier crue"

#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Côte de sanglier cuite"


code:
# ITALIAN LOCALE FILE FOR THE MOBS ANMAL MODULE
# Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1
# This file is distributed under the same license as the MOBS ANIMAL package.
# Hamlet <h4mlet@riseup.net>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Italian localization file for the Mobs Animal mod\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: 2017-08-18 00:56+0100\n"
"Last-Translator: H4mlet <h4mlet@riseup.net>\n"
"Language-Team: \n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.6.10\n"

#: bee.lua
msgid "Bee"
msgstr "Ape"

#: bee.lua
msgid "Honey"
msgstr "Miele"

#: bee.lua
msgid "Beehive"
msgstr "Favo"

#: bee.lua
msgid "Honey Block"
msgstr "Blocco di miele"

#: bunny.lua
msgid "Bunny"
msgstr "Coniglietto"

#: bunny.lua
msgid "Raw Rabbit"
msgstr "Coniglio Crudo"

#: bunny.lua
#, fuzzy
msgid "Cooked Rabbit"
msgstr "Coniglio Cotto"

#: bunny.lua
msgid "Rabbit Hide"
msgstr "Pelle di Coniglio"

#: chicken.lua
msgid "Chicken"
msgstr "Gallina"

#: chicken.lua
msgid "Chicken Egg"
msgstr "Uovo di gallina"

#: chicken.lua
msgid "Fried Egg"
msgstr "Uovo fritto"

#: chicken.lua
msgid "Raw Chicken"
msgstr "Pollo crudo"

#: chicken.lua
msgid "Cooked Chicken"
msgstr "Pollo cotto"

#: chicken.lua
msgid "Feather"
msgstr "Piuma"

#: cow.lua
msgid "Cow already milked!"
msgstr "Mucca già munta!"

#: cow.lua
msgid "Cow"
msgstr "Mucca"

#: cow.lua
msgid "Bucket of Milk"
msgstr "Secchio di latte"

#: cow.lua
msgid "Cheese"
msgstr "Formaggio"

#: cow.lua
msgid "Cheese Block"
msgstr "Blocco di formaggio"

#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MOD] Mobs Redo 'Animals' caricato"

#: kitten.lua
msgid "Kitten"
msgstr "Gattino"

#: penguin.lua
msgid "Penguin"
msgstr "Pinguino"

#: rat.lua
msgid "Rat"
msgstr "Ratto"

#: rat.lua
msgid "Cooked Rat"
msgstr "Ratto cotto"

#: sheep.lua
msgid "Black"
msgstr "Nera"

#: sheep.lua
msgid "Blue"
msgstr "Blu"

#: sheep.lua
msgid "Brown"
msgstr "Marrone"

#: sheep.lua
msgid "Cyan"
msgstr "Ciano"

#: sheep.lua
msgid "Dark Green"
msgstr "Verde scuro"

#: sheep.lua
msgid "Dark Grey"
msgstr "Grigio scuro"

#: sheep.lua
msgid "Green"
msgstr "Verde"

#: sheep.lua
msgid "Grey"
msgstr "Grigia"

#: sheep.lua
msgid "Magenta"
msgstr "Magenta"

#: sheep.lua
msgid "Orange"
msgstr "Arancione"

#: sheep.lua
msgid "Pink"
msgstr "Rosa"

#: sheep.lua
msgid "Red"
msgstr "Rossa"

#: sheep.lua
msgid "Violet"
msgstr "Viola"

#: sheep.lua
msgid "White"
msgstr "Bianca"

#: sheep.lua
msgid "Yellow"
msgstr "Gialla"

#: sheep.lua
msgid "@1 Sheep"
msgstr "Pecora @1"

#: sheep.lua
msgid "Raw Mutton"
msgstr "Montone Crudo"

#: sheep.lua
#, fuzzy
msgid "Cooked Mutton"
msgstr "Montone Cotto"

#: warthog.lua
msgid "Warthog"
msgstr "Facocero"

#: warthog.lua
msgid "Raw Porkchop"
msgstr "Bistecca di maiale cruda"

#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Bistecca di maiale cotta"


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-06 00:17+0800\n"
"PO-Revision-Date: 2018-02-06 00:25+0800\n"
"Last-Translator: MuhdNurHidayat (MNH48) <mnh48mail@gmail.com>\n"
"Language-Team: \n"
"Language: ms\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.6\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: bee.lua
msgid "Bee"
msgstr "Lebah"

#: bee.lua
msgid "Honey"
msgstr "Madu"

#: bee.lua
msgid "Beehive"
msgstr "Sarang Lebah"

#: bee.lua
msgid "Honey Block"
msgstr "Blok Madu"

#: bunny.lua
msgid "Bunny"
msgstr "Arnab"

#: bunny.lua
msgid "Raw Rabbit"
msgstr "Daging Arnab Mentah"

#: bunny.lua
msgid "Cooked Rabbit"
msgstr "Daging Arnab Bakar"

#: bunny.lua
msgid "Rabbit Hide"
msgstr "Belulang Arnab"

#: chicken.lua
msgid "Chicken"
msgstr "Ayam"

#: chicken.lua
msgid "Chicken Egg"
msgstr "Telur Ayam"

#: chicken.lua
msgid "Fried Egg"
msgstr "Telur Goreng"

#: chicken.lua
msgid "Raw Chicken"
msgstr "Ayam Mentah"

#: chicken.lua
msgid "Cooked Chicken"
msgstr "Ayam Bakar"

#: chicken.lua
msgid "Feather"
msgstr "Bulu"

#: cow.lua
msgid "Cow already milked!"
msgstr "Lembu telah diperah susunya!"

#: cow.lua
msgid "Cow"
msgstr "Lembu"

#: cow.lua
msgid "Bucket of Milk"
msgstr "Baldi Susu"

#: cow.lua
msgid "Cheese"
msgstr "Keju"

#: cow.lua
msgid "Cheese Block"
msgstr "Blok Keju"

#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MODS] Mobs Redo 'Animals' telah dimuatkan"

#: kitten.lua
msgid "Kitten"
msgstr "Anak Kucing"

#: penguin.lua
msgid "Penguin"
msgstr "Penguin"

#: rat.lua
msgid "Rat"
msgstr "Tikus"

#: rat.lua
msgid "Cooked Rat"
msgstr "Tikus Bakar"

#: sheep.lua
msgid "Black"
msgstr "Hitam"

#: sheep.lua
msgid "Blue"
msgstr "Biru"

#: sheep.lua
msgid "Brown"
msgstr "Perang"

#: sheep.lua
msgid "Cyan"
msgstr "Sian"

#: sheep.lua
msgid "Dark Green"
msgstr "Hijau Gelap"

#: sheep.lua
msgid "Dark Grey"
msgstr "Kelabu Gelap"

#: sheep.lua
msgid "Green"
msgstr "Hijau"

#: sheep.lua
msgid "Grey"
msgstr "Kelabu"

#: sheep.lua
msgid "Magenta"
msgstr "Merah Lembayung"

#: sheep.lua
msgid "Orange"
msgstr "Jingga"

#: sheep.lua
msgid "Pink"
msgstr "Merah Jambu"

#: sheep.lua
msgid "Red"
msgstr "Merah"

#: sheep.lua
msgid "Violet"
msgstr "Ungu"

#: sheep.lua
msgid "White"
msgstr "Putih"

#: sheep.lua
msgid "Yellow"
msgstr "Kuning"

#: sheep.lua
msgid "@1 Sheep"
msgstr "Biri-biri @1"

#: sheep.lua
msgid "Raw Mutton"
msgstr "Daging Biri-biri Mentah"

#: sheep.lua
msgid "Cooked Mutton"
msgstr "Daging Biri-biri Bakar"

#: warthog.lua
msgid "Warthog"
msgstr "Babi Hutan"

#: warthog.lua
msgid "Raw Porkchop"
msgstr "Daging Babi Mentah"

#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Daging Babi Bakar"


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-13 16:00 (UTC+5)\n"
"PO-Revision-Date: 2018-03-29 18:00 (UTC+5)\n"
"Last-Translator: Oleg720 <contact@oleg720.ru>\n"
"Language-Team: 720 Locales <>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: bee.lua
msgid "Bee"
msgstr "Пчела"

#: bee.lua
msgid "Honey"
msgstr "Мёд"

#: bee.lua
msgid "Beehive"
msgstr "Улей"

#: bee.lua
msgid "Honey Block"
msgstr "Блок мёда"

#: bunny.lua
msgid "Bunny"
msgstr "Кролик"

#: bunny.lua
msgid "Raw Rabbit"
msgstr "Сырой кролик"

#: bunny.lua
#, fuzzy
msgid "Cooked Rabbit"
msgstr "Приготовленный кролик"

#: bunny.lua
msgid "Rabbit Hide"
msgstr "Кролик скрыть"

#: chicken.lua
msgid "Chicken"
msgstr "Курица"

#: chicken.lua
msgid "Chicken Egg"
msgstr "Курино яйцо"

#: chicken.lua
msgid "Fried Egg"
msgstr "Жареное яйцо"

#: chicken.lua
msgid "Raw Chicken"
msgstr "Сырая курятина"

#: chicken.lua
msgid "Cooked Chicken"
msgstr "Вареная курятина"

#: chicken.lua
msgid "Feather"
msgstr "Перо"

#: cow.lua
msgid "Cow already milked!"
msgstr "Корову уже подоили!"

#: cow.lua
msgid "Cow"
msgstr "Корова"

#: cow.lua
msgid "Bucket of Milk"
msgstr "Ведро молока"

#: cow.lua
msgid "Cheese"
msgstr "Сыр"

#: cow.lua
msgid "Cheese Block"
msgstr "Блок сыра"

#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[МОД] Mobs Redo 'Animals' загружен"

#: kitten.lua
msgid "Kitten"
msgstr "Котенок"

#: penguin.lua
msgid "Penguin"
msgstr "Пингвин"

#: rat.lua
msgid "Rat"
msgstr "Крыса"

#: rat.lua
msgid "Cooked Rat"
msgstr "Приготовленная крыса"

#: sheep.lua
msgid "Black"
msgstr "Черный"

#: sheep.lua
msgid "Blue"
msgstr "Синий"

#: sheep.lua
msgid "Brown"
msgstr "Коричневый"

#: sheep.lua
msgid "Cyan"
msgstr "Голубой"

#: sheep.lua
msgid "Dark Green"
msgstr "Темно-зеленый"

#: sheep.lua
msgid "Dark Grey"
msgstr "Темно-серый"

#: sheep.lua
msgid "Green"
msgstr "Зеленый"

#: sheep.lua
msgid "Grey"
msgstr "Серый"

#: sheep.lua
msgid "Magenta"
msgstr "Пурпурный"

#: sheep.lua
msgid "Orange"
msgstr "Оранжевый"

#: sheep.lua
msgid "Pink"
msgstr "Розовый"

#: sheep.lua
msgid "Red"
msgstr "Красный"

#: sheep.lua
msgid "Violet"
msgstr "Фиолетовый"

#: sheep.lua
msgid "White"
msgstr "Белый"

#: sheep.lua
msgid "Yellow"
msgstr "Желтый"

#: sheep.lua
msgid "@1 Sheep"
msgstr "@1 Овец"

#: sheep.lua
msgid "Raw Mutton"
msgstr "сырой ягненок"

#: sheep.lua
#, fuzzy
msgid "Cooked Mutton"
msgstr "приготовленный ягненок"

#: warthog.lua
msgid "Warthog"
msgstr "Бородавочник"

#: warthog.lua
msgid "Raw Porkchop"
msgstr "Отбивные из свинины"

#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Приготовленные отбивные"


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: bee.lua
msgid "Bee"
msgstr ""

#: bee.lua
msgid "Honey"
msgstr ""

#: bee.lua
msgid "Beehive"
msgstr ""

#: bee.lua
msgid "Honey Block"
msgstr ""

#: bunny.lua
msgid "Bunny"
msgstr ""

#: bunny.lua
msgid "Raw Rabbit"
msgstr ""

#: bunny.lua
msgid "Cooked Rabbit"
msgstr ""

#: bunny.lua
msgid "Rabbit Hide"
msgstr ""

#: chicken.lua
msgid "Chicken"
msgstr ""

#: chicken.lua
msgid "Chicken Egg"
msgstr ""

#: chicken.lua
msgid "Fried Egg"
msgstr ""

#: chicken.lua
msgid "Raw Chicken"
msgstr ""

#: chicken.lua
msgid "Cooked Chicken"
msgstr ""

#: chicken.lua
msgid "Feather"
msgstr ""

#: cow.lua
msgid "Cow already milked!"
msgstr ""

#: cow.lua
msgid "Cow"
msgstr ""

#: cow.lua
msgid "Bucket of Milk"
msgstr ""

#: cow.lua
msgid "Cheese"
msgstr ""

#: cow.lua
msgid "Cheese Block"
msgstr ""

#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr ""

#: kitten.lua
msgid "Kitten"
msgstr ""

#: penguin.lua
msgid "Penguin"
msgstr ""

#: rat.lua
msgid "Rat"
msgstr ""

#: rat.lua
msgid "Cooked Rat"
msgstr ""

#: sheep.lua
msgid "Black"
msgstr ""

#: sheep.lua
msgid "Blue"
msgstr ""

#: sheep.lua
msgid "Brown"
msgstr ""

#: sheep.lua
msgid "Cyan"
msgstr ""

#: sheep.lua
msgid "Dark Green"
msgstr ""

#: sheep.lua
msgid "Dark Grey"
msgstr ""

#: sheep.lua
msgid "Green"
msgstr ""

#: sheep.lua
msgid "Grey"
msgstr ""

#: sheep.lua
msgid "Magenta"
msgstr ""

#: sheep.lua
msgid "Orange"
msgstr ""

#: sheep.lua
msgid "Pink"
msgstr ""

#: sheep.lua
msgid "Red"
msgstr ""

#: sheep.lua
msgid "Violet"
msgstr ""

#: sheep.lua
msgid "White"
msgstr ""

#: sheep.lua
msgid "Yellow"
msgstr ""

#: sheep.lua
msgid "@1 Sheep"
msgstr ""

#: sheep.lua
msgid "Raw Mutton"
msgstr ""

#: sheep.lua
msgid "Cooked Mutton"
msgstr ""

#: warthog.lua
msgid "Warthog"
msgstr ""

#: warthog.lua
msgid "Raw Porkchop"
msgstr ""

#: warthog.lua
msgid "Cooked Porkchop"
msgstr ""


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: 2017-04-26 09:02+0200\n"
"Last-Translator: Admicos\n"
"Language-Team: \n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: bee.lua
msgid "Bee"
msgstr "Arı"

#: bee.lua
msgid "Honey"
msgstr "Bal"

#: bee.lua
msgid "Beehive"
msgstr "Arı kovanı"

#: bee.lua
msgid "Honey Block"
msgstr "Bal bloğu"

#: bunny.lua
msgid "Bunny"
msgstr "Tavşan"

#: bunny.lua
msgid "Raw Rabbit"
msgstr "çiğ tavşan"

#: bunny.lua
#, fuzzy
msgid "Cooked Rabbit"
msgstr "pişmiş tavşan"

#: bunny.lua
msgid "Rabbit Hide"
msgstr "tavşan kürkü"

#: chicken.lua
msgid "Chicken"
msgstr "Tavuk"

#: chicken.lua
msgid "Chicken Egg"
msgstr "Tavuk yumurtası "

#: chicken.lua
msgid "Fried Egg"
msgstr "Kızarmış yumurta"

#: chicken.lua
msgid "Raw Chicken"
msgstr "Çiğ tavuk"

#: chicken.lua
msgid "Cooked Chicken"
msgstr "Pişmiş tavuk"

#: chicken.lua
msgid "Feather"
msgstr ""

#: cow.lua
msgid "Cow already milked!"
msgstr "İnekte süt yok!"

#: cow.lua
msgid "Cow"
msgstr "İnek"

#: cow.lua
msgid "Bucket of Milk"
msgstr "Süt kovası"

#: cow.lua
msgid "Cheese"
msgstr "Peynir"

#: cow.lua
msgid "Cheese Block"
msgstr "Peynir bloğu"

#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MOD] Mobs Redo 'Hayvanlar' yüklendi"

#: kitten.lua
msgid "Kitten"
msgstr "Yavru kedi"

#: penguin.lua
msgid "Penguin"
msgstr ""

#: rat.lua
msgid "Rat"
msgstr "Sıçan"

#: rat.lua
msgid "Cooked Rat"
msgstr "Pişmiş sıçan"

#: sheep.lua
msgid "Black"
msgstr "Siyah"

#: sheep.lua
msgid "Blue"
msgstr "Mavi"

#: sheep.lua
msgid "Brown"
msgstr "Kahverengi"

#: sheep.lua
msgid "Cyan"
msgstr "Camgöbeği"

#: sheep.lua
msgid "Dark Green"
msgstr "Koyu yeşil"

#: sheep.lua
msgid "Dark Grey"
msgstr "Koyu gri"

#: sheep.lua
msgid "Green"
msgstr "Yeşil"

#: sheep.lua
msgid "Grey"
msgstr "Gri"

#: sheep.lua
msgid "Magenta"
msgstr "Macenta"

#: sheep.lua
msgid "Orange"
msgstr "Turuncu"

#: sheep.lua
msgid "Pink"
msgstr "Pembe"

#: sheep.lua
msgid "Red"
msgstr "Kırmızı"

#: sheep.lua
msgid "Violet"
msgstr "Mor"

#: sheep.lua
msgid "White"
msgstr "Beyaz"

#: sheep.lua
msgid "Yellow"
msgstr "Sarı"

#: sheep.lua
#, fuzzy
msgid "@1 Sheep"
msgstr "@1 Koyun"

#: sheep.lua
msgid "Raw Mutton"
msgstr "çiğ kuzu"

#: sheep.lua
#, fuzzy
msgid "Cooked Mutton"
msgstr "pişmiş kuzu"

#: warthog.lua
msgid "Warthog"
msgstr "Domuz"

#: warthog.lua
msgid "Raw Porkchop"
msgstr "Çiğ pirzola"

#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Pişmiş pirzola"


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# IFRFSX <1079092922@qq.com>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: bee.lua
msgid "Bee"
msgstr "蜜蜂"

#: bee.lua
msgid "Honey"
msgstr "蜂蜜"

#: bee.lua
msgid "Beehive"
msgstr "蜂巢"

#: bee.lua
msgid "Honey Block"
msgstr "蜂蜜方块"

#: bunny.lua
msgid "Bunny"
msgstr "兔子"

#: bunny.lua
msgid "Raw Rabbit"
msgstr "生兔肉"

#: bunny.lua
msgid "Cooked Rabbit"
msgstr "熟兔肉"

#: bunny.lua
msgid "Rabbit Hide"
msgstr "兔子皮"

#: chicken.lua
msgid "Chicken"
msgstr "鸡"

#: chicken.lua
msgid "Chicken Egg"
msgstr "鸡蛋"

#: chicken.lua
msgid "Fried Egg"
msgstr "煎蛋"

#: chicken.lua
msgid "Raw Chicken"
msgstr "生鸡肉"

#: chicken.lua
msgid "Cooked Chicken"
msgstr "熟鸡肉"

#: chicken.lua
msgid "Feather"
msgstr "羽毛"

#: cow.lua
msgid "Cow already milked!"
msgstr "奶牛已经被挤奶了！"

#: cow.lua
msgid "Cow"
msgstr "奶牛"

#: cow.lua
msgid "Bucket of Milk"
msgstr "一桶牛奶"

#: cow.lua
msgid "Glass of Milk"
msgstr "一杯牛奶"

#: cow.lua
msgid "Cheese"
msgstr "奶酪"

#: cow.lua
msgid "Cheese Block"
msgstr "奶酪方块"

#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[模组] Mobs Redo 'Animals' 已加载！"

#: kitten.lua
msgid "Kitten"
msgstr "小猫"

#: kitten.lua
msgid "Hairball"
msgstr "毛球"

#: penguin.lua
msgid "Penguin"
msgstr "企鹅"

#: rat.lua
msgid "Rat"
msgstr "老鼠"

#: rat.lua
msgid "Cooked Rat"
msgstr "熟老鼠"

#: sheep.lua
msgid "Black"
msgstr "黑"

#: sheep.lua
msgid "Blue"
msgstr "蓝"

#: sheep.lua
msgid "Brown"
msgstr "棕"

#: sheep.lua
msgid "Cyan"
msgstr "青"

#: sheep.lua
msgid "Dark Green"
msgstr "蓝绿"

#: sheep.lua
msgid "Dark Grey"
msgstr "蓝灰"

#: sheep.lua
msgid "Green"
msgstr "绿"

#: sheep.lua
msgid "Grey"
msgstr "灰"

#: sheep.lua
msgid "Magenta"
msgstr "品红"

#: sheep.lua
msgid "Orange"
msgstr "橙"

#: sheep.lua
msgid "Pink"
msgstr "粉红"

#: sheep.lua
msgid "Red"
msgstr "红"

#: sheep.lua
msgid "Violet"
msgstr "紫"

#: sheep.lua
msgid "White"
msgstr "白"

#: sheep.lua
msgid "Yellow"
msgstr "黄"

#: sheep.lua
msgid "@1 Sheep"
msgstr "@1羊"

#: sheep.lua
msgid "Raw Mutton"
msgstr "生羊肉"

#: sheep.lua
msgid "Cooked Mutton"
msgstr "熟羊肉"

#: warthog.lua
msgid "Warthog"
msgstr "野猪"

#: warthog.lua
msgid "Raw Porkchop"
msgstr "生猪排"

#: warthog.lua
msgid "Cooked Porkchop"
msgstr "熟猪排"


code:
# Template for translations of mobs_animal mod
# last update: 2020/02/13

Bee = 蜜蜂
Honey = 蜂蜜
Beehive = 蜂巢
Honey Block = 蜂蜜方块
Butter = 黄油
Bunny = 兔子
Raw Rabbit = 生兔肉
Cooked Rabbit = 熟兔肉
Rabbit Hide = 兔子皮
Chicken = 鸡
Chicken Egg = 鸡蛋
Fried Egg = 煎蛋
Raw Chicken = 生鸡肉
Cooked Chicken = 熟鸡肉
Feather = 羽毛
Cow already milked! = 奶牛已被挤奶！
Cow = 奶牛
Bucket of Milk = 一桶牛奶
Cheese = 奶酪
Cheese Block = 奶酪方块
[MOD] Mobs Redo 'Animals' loaded = [模组] Mobs Redo 'Animals' 已加载！
Kitten = 小猫
Penguin = 企鹅
Rat = 老鼠
Cooked Rat = 熟老鼠
Black = 黑
Blue = 蓝
Brown = 棕
Cyan = 青
Dark Green = 暗绿
Dark Grey = 暗灰
Green = 绿
Grey = 灰
Magenta = 品红
Orange = 橙
Pink = 粉红
Red = 红
Violet = 紫
White = 白
Yellow = 黄
@1 Sheep = @1羊
Raw Mutton = 生羊肉
Cooked Mutton = 熟羊肉
Warthog = 野猪
Raw Porkchop = 生猪排
Cooked Porkchop = 熟猪排
Panda = 熊猫

Glass of Milk = 一杯牛奶
Hairball = 毛球


code:
# Template for translations of mobs_animal mod
# last update: 2020/02/13

Bee = 蜜蜂
Honey = 蜂蜜
Beehive = 蜂巢
Honey Block = 蜂蜜方塊
Butter = 黃油
Bunny = 兔子
Raw Rabbit = 生兔肉
Cooked Rabbit = 熟兔肉
Rabbit Hide = 兔子皮
Chicken = 雞
Chicken Egg = 雞蛋
Fried Egg = 煎蛋
Raw Chicken = 生雞肉
Cooked Chicken = 熟雞肉
Feather = 羽毛
Cow already milked! = 奶牛已被擠奶！
Cow = 奶牛
Bucket of Milk = 一桶牛奶
Cheese = 奶酪
Cheese Block = 奶酪方塊
[MOD] Mobs Redo 'Animals' loaded = [模組] Mobs Redo 'Animals' 已加載！
Kitten = 小貓
Penguin = 企鵝
Rat = 老鼠
Cooked Rat = 熟老鼠
Black = 黑
Blue = 藍
Brown = 棕
Cyan = 青
Dark Green = 暗綠
Dark Grey = 暗灰
Green = 綠
Grey = 灰
Magenta = 品紅
Orange = 橙
Pink = 粉紅
Red = 紅
Violet = 紫
White = 白
Yellow = 黃
@1 Sheep = @1羊
Raw Mutton = 生羊肉
Cooked Mutton = 熟羊肉
Warthog = 野豬
Raw Porkchop = 生豬排
Cooked Porkchop = 熟豬排
Panda = 熊貓

Glass of Milk = 一杯牛奶
Hairball = 毛球


code:
if minetest.get_modpath("lucky_block") then

	lucky_block:add_blocks({
		{"spw", "mobs:sheep", 5},
		{"spw", "mobs:rat", 5},
		{"dro", {"mobs:rat_cooked"}, 5},
		{"spw", "mobs:bunny", 3},
		{"nod", "mobs:honey_block", 0},
		{"spw", "mobs:pumba", 5},
		{"nod", "mobs:cheeseblock", 0},
		{"spw", "mobs:chicken", 5},
		{"dro", {"mobs:egg"}, 5},
		{"spw", "mobs:cow", 5},
		{"dro", {"mobs:bucket_milk"}, 8},
		{"spw", "mobs:kitten", 2},
		{"exp"},
		{"dro", {"mobs:hairball"}, 3},
		{"dro", {"mobs:chicken_raw", "mobs:chicken_cooked"}, 10},
		{"dro", {"mobs:pork_raw", "mobs:pork_cooked"}, 10},
		{"dro", {"mobs:mutton_raw", "mobs:mutton_cooked"}, 10},
		{"dro", {"mobs:meat_raw", "mobs:meat"}, 10},
		{"dro", {"mobs:glass_milk"}, 5},
	})

	if minetest.registered_nodes["default:nyancat"] then
		lucky_block:add_blocks({
			{"tro", "default:nyancat", "mobs_kitten", true},
		})
	end
end


code:
name = mobs_animal
author = TenPlus1
description = Adds farm animals.
release = 4192
title = Mobs Animal


code:
local S = mobs.intllib

-- Panda by AspireMint (CC BY-SA 3.0)

mobs:register_mob("mobs_animal:panda", {
stepheight = 0.6,
	type = "animal",
	passive = false,
	attack_type = "dogfight",
	group_attack = false,
	owner_loyal = true,
	attack_npcs = false,
	reach = 2,
	damage = 3,
	hp_min = 10,
	hp_max = 24,
	armor = 200,
	collisionbox = {-0.4, -0.45, -0.4, 0.4, 0.45, 0.4},
	visual = "mesh",
	mesh = "mobs_panda.b3d",
	textures = {
		{"mobs_panda.png"},
	},
	makes_footstep_sound = true,
	sounds = {
		random = "mobs_panda",
		attack = "mobs_panda",
	},
	walk_chance = 5,
	walk_velocity = 0.5,
	run_velocity = 1.5,
	jump = false,
	jump_height = 6,
	follow = {"ethereal:bamboo", "bamboo:trunk"},
	view_range = 8,
	drops = {
		{name = "mobs:meat_raw", chance = 1, min = 1, max = 2},
	},
	water_damage = 0,
	lava_damage = 5,
	light_damage = 0,
	fear_height = 6,
	animation = {
		speed_normal = 15,
		stand_start = 130,
		stand_end = 270,
		stand1_start = 0,
		stand1_end = 0,
		stand2_start = 1,
		stand2_end = 1,
		stand3_start = 2,
		stand3_end = 2,
		walk_start = 10,
		walk_end = 70,
		run_start = 10,
		run_end = 70,
		punch_start = 80,
		punch_end = 120,
		-- 0 = rest, 1 = hiding (covers eyes), 2 = surprised
	},
	on_rightclick = function(self, clicker)

		if mobs:feed_tame(self, clicker, 20, true, true) then return end
		if mobs:protect(self, clicker) then return end
		if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then return end
	end,
})

if minetest.get_modpath("ethereal") then

	mobs:spawn({
		name = "mobs_animal:panda",
		nodes = {"ethereal:bamboo_dirt"},
		neighbors = {"group:grass"},
		min_light = 14,
		interval = 60,
		chance = 8000, -- 15000
		min_height = 10,
		max_height = 80,
		day_toggle = true,
	})
end

mobs:register_egg("mobs_animal:panda", S("Panda"), "mobs_panda_inv.png")


code:
local S = mobs.intllib

-- Penguin by D00Med

mobs:register_mob("mobs_animal:penguin", {
stepheight = 0.6,
	type = "animal",
	passive = true,
	reach = 1,
	hp_min = 5,
	hp_max = 10,
	armor = 200,
	collisionbox = {-0.2, -0.0, -0.2,  0.2, 0.5, 0.2},
	visual = "mesh",
	mesh = "mobs_penguin.b3d",
	visual_size = {x = 0.25, y = 0.25},
	textures = {
		{"mobs_penguin.png"},
	},
	sounds = {},
	makes_footstep_sound = true,
	walk_velocity = 1,
	run_velocity = 2,
	runaway = true,
	jump = false,
	stepheight = 1.1,
	drops = {
		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
	},
	water_damage = 0,
	lava_damage = 4,
	light_damage = 0,
	fear_height = 2,
	animation = {
		speed_normal = 15,
		stand_start = 1,
		stand_end = 20,
		walk_start = 25,
		walk_end = 45,
		fly_start = 75, -- swim animation
		fly_end = 95,
		-- 50-70 is slide/water idle
	},
	fly_in = {"default:water_source", "default:water_flowing"},
	floats = 0,
	follow = {
		"ethereal:fish_raw", "mobs_fish:clownfish", "mobs_fish:tropical",
		"mobs_fish:clownfish_set", "mobs_fish:tropical_set"
	},
	view_range = 5,

	on_rightclick = function(self, clicker)

		-- feed or tame
		if mobs:feed_tame(self, clicker, 4, false, true) then return end
		if mobs:protect(self, clicker) then return end
		if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end
	end,
})

mobs:spawn({
	name = "mobs_animal:penguin",
	nodes = {"default:snowblock"},
	min_light = 14,
	interval = 60,
	chance = 20000,
	min_height = 0,
	max_height = 200,
	day_toggle = true,
})

mobs:register_egg("mobs_animal:penguin", S("Penguin"), "mobs_penguin_inv.png")


code:
local S = mobs.intllib

-- Rat by PilzAdam (B3D model by sirrobzeroone)

mobs:register_mob("mobs_animal:rat", {
stepheight = 0.6,
	type = "animal",
	passive = true,
	hp_min = 1,
	hp_max = 4,
	armor = 200,
	collisionbox = {-0.2, -1, -0.2, 0.2, -0.8, 0.2},
	visual = "mesh",
	mesh = "mobs_rat.b3d",
	textures = {
		{"mobs_rat.png"},
		{"mobs_rat2.png"},
	},
	makes_footstep_sound = false,
	sounds = {
		random = "mobs_rat",
	},
	walk_velocity = 1,
	run_velocity = 2,
	runaway = true,
	jump = true,
	water_damage = 0,
	lava_damage = 4,
	light_damage = 0,
	fear_height = 2,
	on_rightclick = function(self, clicker)
		mobs:capture_mob(self, clicker, 50, 90, 0, true, "mobs_animal:rat")
	end,
--[[
	do_custom = function(self, dtime)

		self.rat_timer = (self.rat_timer or 0) + dtime

		if self.rat_timer < 1 then return end -- every 1 second

		self.rat_timer = 0

		local pos = self.object:get_pos()

		print("rat pos", pos.x, pos.y, pos.z, dtime)

		return false -- return but skip doing rest of API
	end,
]]
--[[
	on_blast = function(obj, damage)
		print ("--- damage is", damage)
		print ("---    mob is", obj.object:get_luaentity().name)
		-- return's do_damage, do_knockback and drops
		return false, true, {"default:mese"}
	end,
]]
})

local function rat_spawn(self, pos)
	self = self:get_luaentity()
	print (self.name, pos.x, pos.y, pos.z)
	self.hp_max = 100
	self.health = 100
end

mobs:spawn({
	name = "mobs_animal:rat",
	nodes = {"default:stone"},
	min_light = 3,
	max_light = 9,
	interval = 60,
	chance = 8000,
	max_height = 0,
--	on_spawn = rat_spawn,
})

mobs:register_egg("mobs_animal:rat", S("Rat"), "mobs_rat_inv.png")

mobs:alias_mob("mobs:rat", "mobs_animal:rat") -- compatibility

-- cooked rat, yummy!
minetest.register_craftitem(":mobs:rat_cooked", {
	description = S("Cooked Rat"),
	inventory_image = "mobs_cooked_rat.png",
	on_use = minetest.item_eat(3),
	groups = {food_rat = 1, flammable = 2},
})

minetest.register_craft({
	type = "cooking",
	output = "mobs:rat_cooked",
	recipe = "mobs_animal:rat",
	cooktime = 5,
})


code:
# ANIMAL MOBS

### Bee
Tends to buzz around flowers and gives honey when killed, you can also right-click a bee to pick it up and place in inventory. 3x bee's in a row can craft a beehive.

---
### Bunny
Bunnies appear in green grass areas (prairie biome in ethereal) and can be tamed with 4 carrots or grass. Can also be picked up and placed in inventory and gives 1 raw rabbit and 1 rabbit hide when killed.

---
### Chicken
Found in green areas (bamboo biome in ethereal) and lays eggs on flat ground, Can be picked up and placed in inventory and gives 1-2 raw chicken when killed. Feed 8x wheat seed to breed.

---
### Cow
Wanders around eating grass/wheat and can be right-clicked with empty bucket to get milk. Cows will defend themselves when hit and can be right-clicked with 8x wheat to tame and breed.

---
### Kitten
Found on green grass these cute cats walk around and can be picked up and placed in inventory as pets or right-clicked with 4x live rats or raw fish (found in ethereal) and tamed.  They can sometimes leave you little gifts of a hairball.

---
### Rat
Typically found around stone they can be picked up and cooked for eating.

---
### Sheep
Green grass and wheat munchers that can be clipped using shears to give 1-3 wool. Feed sheep 8x wheat to regrow wool, tame and breed.  Right-click a tamed sheep with dye to change it's colour.  Will drop 1-3 raw mutton when killed.

---
### Warthog
Warthogs unlike pigs defend themselves when hit and give 1-3 raw pork when killed, they can also be right-clicked with 8x apples to tame or breed.

---
### Penguin
These little guys can be found in glacier biomes on top of snow and have the ability to swim if they fall into water.

---
### Panda
These monochrome cuties spawn in Ethereal's bamboo biome and can be tamed with bamboo stalks :)  Remember they have claws though.

---
*Note: After breeding, animals need to rest for 4 minutes and baby animals take 4 minutes to grow up, also feeding them helps them grow quicker...*

#### Lucky Blocks: 20


code:
local S = mobs.intllib

local all_colours = {
	{"black",      S("Black"),      "#000000b0"},
	{"blue",       S("Blue"),       "#015dbb70"},
	{"brown",      S("Brown"),      "#663300a0"},
	{"cyan",       S("Cyan"),       "#01ffd870"},
	{"dark_green", S("Dark Green"), "#005b0770"},
	{"dark_grey",  S("Dark Grey"),  "#303030b0"},
	{"green",      S("Green"),      "#61ff0170"},
	{"grey",       S("Grey"),       "#5b5b5bb0"},
	{"magenta",    S("Magenta"),    "#ff05bb70"},
	{"orange",     S("Orange"),     "#ff840170"},
	{"pink",       S("Pink"),       "#ff65b570"},
	{"red",        S("Red"),        "#ff0000a0"},
	{"violet",     S("Violet"),     "#2000c970"},
	{"white",      S("White"),      "#abababc0"},
	{"yellow",     S("Yellow"),     "#e3ff0070"},
}

-- Sheep by PilzAdam, texture converted to minetest by AMMOnym from Summerfield pack

for _, col in ipairs(all_colours) do

	mobs:register_mob("mobs_animal:sheep_"..col[1], {
		stay_near = {"farming:straw", 10},
		stepheight = 0.6,
		type = "animal",
		passive = true,
		hp_min = 8,
		hp_max = 10,
		armor = 200,
		collisionbox = {-0.5, -1, -0.5, 0.5, 0.3, 0.5},
		visual = "mesh",
		mesh = "mobs_sheep.b3d",
		textures = {
			{"mobs_sheep_base.png^(mobs_sheep_wool.png^[colorize:" .. col[3] .. ")"},
		},
		gotten_texture = {"mobs_sheep_shaved.png"},
		gotten_mesh = "mobs_sheep_shaved.b3d",
		makes_footstep_sound = true,
		sounds = {
			random = "mobs_sheep",
		},
		walk_velocity = 1,
		run_velocity = 2,
		runaway = true,
		jump = true,
		jump_height = 6,
		pushable = true,
		drops = {
			{name = "mobs:mutton_raw", chance = 1, min = 1, max = 2},
			{name = "wool:"..col[1], chance = 1, min = 1, max = 1},
		},
		water_damage = 0,
		lava_damage = 5,
		light_damage = 0,
		animation = {
			speed_normal = 15,
			speed_run = 15,
			stand_start = 0,
			stand_end = 80,
			walk_start = 81,
			walk_end = 100,
		},
		follow = {"farming:wheat", "default:grass_1"},
		view_range = 8,
		replace_rate = 10,
		replace_what = {
			{"group:grass", "air", -1},
			{"default:dirt_with_grass", "default:dirt", -2}
		},
		fear_height = 3,
		on_replace = function(self, pos, oldnode, newnode)

			self.food = (self.food or 0) + 1

			-- if sheep replaces 8x grass then it regrows wool
			if self.food >= 8 then

				self.food = 0
				self.gotten = false

				self.object:set_properties({
					textures = {"mobs_sheep_base.png^(mobs_sheep_wool.png^[colorize:" .. col[3] .. ")"},
					mesh = "mobs_sheep.b3d",
				})
			end
		end,
		on_rightclick = function(self, clicker)

			--are we feeding?
			if mobs:feed_tame(self, clicker, 8, true, true) then

				--if fed 7x grass or wheat then sheep regrows wool
				if self.food and self.food > 6 then

					self.gotten = false

					self.object:set_properties({
						textures = {"mobs_sheep_base.png^(mobs_sheep_wool.png^[colorize:" .. col[3] .. ")"},
						mesh = "mobs_sheep.b3d",
					})
				end

				return
			end

			local item = clicker:get_wielded_item()
			local itemname = item:get_name()
			local name = clicker:get_player_name()

			--are we giving a haircut>
			if itemname == "mobs:shears" then

				if self.gotten ~= false
				or self.child ~= false
				or name ~= self.owner
				or not minetest.get_modpath("wool") then
					return
				end

				self.gotten = true -- shaved

				local obj = minetest.add_item(
					self.object:get_pos(),
					ItemStack( "wool:" .. col[1] .. " " .. math.random(1, 3) )
				)

				if obj then

					obj:setvelocity({
						x = math.random(-1, 1),
						y = 5,
						z = math.random(-1, 1)
					})
				end

				item:add_wear(650) -- 100 uses

				clicker:set_wielded_item(item)

				self.object:set_properties({
					textures = {"mobs_sheep_shaved.png"},
					mesh = "mobs_sheep_shaved.b3d",
				})

				return
			end

			--are we coloring?
			if itemname:find("dye:") then

				if self.gotten == false
				and self.child == false
				and self.tamed == true
				and name == self.owner then

					local colr = string.split(itemname, ":")[2]

					for _,c in pairs(all_colours) do

						if c[1] == colr then

							local pos = self.object:get_pos()

							self.object:remove()

							local mob = minetest.add_entity(pos, "mobs_animal:sheep_" .. colr)
							local ent = mob:get_luaentity()

							ent.owner = name
							ent.tamed = true

							-- take item
							if not mobs.is_creative(clicker:get_player_name()) then
								item:take_item()
								clicker:set_wielded_item(item)
							end

							break
						end
					end
				end

				return
			end

			-- protect mod with mobs:protector item
			if mobs:protect(self, clicker) then return end

			--are we capturing?
			if mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) then return end
		end
	})

mobs:register_egg("mobs_animal:sheep_"..col[1], S("@1 Sheep", col[2]), "wool_"..col[1]..".png^mobs_sheep_inv.png")

	-- compatibility
	mobs:alias_mob("mobs:sheep_" .. col[1], "mobs_animal:sheep_" .. col[1])

end

mobs:spawn({
	name = "mobs_animal:sheep_white",
	nodes = {"default:dirt_with_grass", "ethereal:green_dirt"},
	neighbors = {"group:grass"},
	min_light = 14,
	interval = 60,
	chance = 8000, -- 15000
	min_height = 0,
	max_height = 200,
	day_toggle = true,
})

mobs:alias_mob("mobs:sheep", "mobs_animal:sheep_white") -- compatibility

-- raw mutton
minetest.register_craftitem(":mobs:mutton_raw", {
	description = S("Raw Mutton"),
	inventory_image = "mobs_mutton_raw.png",
	on_use = minetest.item_eat(2),
	groups = {food_meat_raw = 1, food_mutton_raw = 1, flammable = 2},
})

-- cooked mutton
minetest.register_craftitem(":mobs:mutton_cooked", {
	description = S("Cooked Mutton"),
	inventory_image = "mobs_mutton_cooked.png",
	on_use = minetest.item_eat(6),
	groups = {food_meat = 1, food_mutton = 1, flammable = 2},
})

minetest.register_craft({
	type = "cooking",
	output = "mobs:mutton_cooked",
	recipe = "mobs:mutton_raw",
	cooktime = 5,
})


code:
local S = mobs.intllib

-- Warthog originally by KrupnoPavel, B3D model by sirrobzeroone

mobs:register_mob("mobs_animal:pumba", {
	stepheight = 0.6,
	type = "animal",
	passive = false,
	attack_type = "dogfight",
	group_attack = true,
	owner_loyal = true,
	attack_npcs = false,
	reach = 2,
	damage = 2,
	hp_min = 5,
	hp_max = 15,
	armor = 200,
	collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.95, 0.4},
	visual = "mesh",
	mesh = "mobs_pumba.b3d",
	textures = {
		{"mobs_pumba.png"},
	},
	makes_footstep_sound = true,
	sounds = {
		random = "mobs_pig",
		attack = "mobs_pig_angry",
	},
	walk_velocity = 2,
	run_velocity = 3,
	jump = true,
	jump_height = 6,
	pushable = true,
	follow = {"default:apple", "farming:potato"},
	view_range = 10,
	drops = {
		{name = "mobs:pork_raw", chance = 1, min = 1, max = 3},
	},
	water_damage = 0,
	lava_damage = 5,
	light_damage = 0,
	fear_height = 2,
	animation = {
		speed_normal = 15,
		stand_start = 25,
		stand_end = 55,
		walk_start = 70,
		walk_end = 100,
		punch_start = 70,
		punch_end = 100,
	},
	on_rightclick = function(self, clicker)

		if mobs:feed_tame(self, clicker, 8, true, true) then return end
		if mobs:protect(self, clicker) then return end
		if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then return end
	end,
})

local spawn_on = {"default:dirt_with_grass"}
local spawn_by = {"group:grass"}

if minetest.get_mapgen_setting("mg_name") ~= "v6" then
	spawn_on = {"default:dirt_with_dry_grass", "default:dry_dirt_with_dry_grass"}
	spawn_by = {"group:dry_grass"}
end

if minetest.get_modpath("ethereal") then
	spawn_on = {"ethereal:mushroom_dirt"}
	spawn_by = {"flowers:mushroom_brown", "flowers:mushroom_red"}
end

mobs:spawn({
	name = "mobs_animal:pumba",
	nodes = spawn_on,
	neighbors = spawn_by,
	min_light = 14,
	interval = 60,
	chance = 8000, -- 15000
	min_height = 0,
	max_height = 200,
	day_toggle = true,
})

mobs:register_egg("mobs_animal:pumba", S("Warthog"), "mobs_pumba_inv.png")

mobs:alias_mob("mobs:pumba", "mobs_animal:pumba") -- compatibility

-- raw porkchop
minetest.register_craftitem(":mobs:pork_raw", {
	description = S("Raw Porkchop"),
	inventory_image = "mobs_pork_raw.png",
	on_use = minetest.item_eat(4),
	groups = {food_meat_raw = 1, food_pork_raw = 1, flammable = 2},
})

-- cooked porkchop
minetest.register_craftitem(":mobs:pork_cooked", {
	description = S("Cooked Porkchop"),
	inventory_image = "mobs_pork_cooked.png",
	on_use = minetest.item_eat(8),
	groups = {food_meat = 1, food_pork = 1, flammable = 2},
})

minetest.register_craft({
	type = "cooking",
	output = "mobs:pork_cooked",
	recipe = "mobs:pork_raw",
	cooktime = 5,
})


code:
default
mobs
intllib?
lucky_block?
toolranks?


code: Adds many types of monster.


code:
local S = mobs.intllib

-- Dirt Monster by PilzAdam

mobs:register_mob("mobs_monster:dirt_monster", {
	type = "monster",
	passive = false,
	attack_type = "dogfight",
	pathfinding = true,
	reach = 2,
	damage = 2,
	hp_min = 3,
	hp_max = 27,
	armor = 100,
	collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4},
	visual = "mesh",
	mesh = "mobs_stone_monster.b3d",
	textures = {
		{"mobs_dirt_monster.png"},
	},
	blood_texture = "default_dirt.png",
	makes_footstep_sound = true,
	sounds = {
		random = "mobs_dirtmonster",
	},
	view_range = 15,
	walk_velocity = 1,
	run_velocity = 3,
	jump = true,
	drops = {
		{name = "default:dirt", chance = 1, min = 0, max = 2},
	},
	water_damage = 1,
	lava_damage = 5,
	light_damage = 3,
	fear_height = 4,
	animation = {
		speed_normal = 15,
		speed_run = 15,
		stand_start = 0,
		stand_end = 14,
		walk_start = 15,
		walk_end = 38,
		run_start = 40,
		run_end = 63,
		punch_start = 40,
		punch_end = 63,
	},
})

local spawn_on = "default:dirt_with_grass"

if minetest.get_modpath("ethereal") then
	spawn_on = "ethereal:gray_dirt"
end

mobs:spawn({
	name = "mobs_monster:dirt_monster",
	nodes = {spawn_on},
	min_light = 0,
	max_light = 7,
	chance = 6000,
	active_object_count = 2,
	min_height = 0,
	day_toggle = false,
})

mobs:register_egg("mobs_monster:dirt_monster", S("Dirt Monster"), "default_dirt.png", 1)

mobs:alias_mob("mobs:dirt_monster", "mobs_monster:dirt_monster") -- compatibility


code:
local S = mobs.intllib

-- Dungeon Master by PilzAdam

mobs:register_mob("mobs_monster:dungeon_master", {
	type = "monster",
	passive = false,
	damage = 6,
	attack_type = "dogshoot",
	dogshoot_switch = 1,
	dogshoot_count_max = 12, -- shoot for 10 seconds
	dogshoot_count2_max = 3, -- dogfight for 3 seconds
	reach = 3,
	shoot_interval = 2.2,
	arrow = "mobs_monster:fireball",
	shoot_offset = 1,
	hp_min = 22,
	hp_max = 45,
	armor = 60,
	collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7},
	visual = "mesh",
	mesh = "mobs_dungeon_master.b3d",
	textures = {
		{"mobs_dungeon_master.png"},
		{"mobs_dungeon_master2.png"},
		{"mobs_dungeon_master3.png"},
	},
	makes_footstep_sound = true,
	sounds = {
		random = "mobs_dungeonmaster",
		shoot_attack = "mobs_fireball",
	},
	walk_velocity = 1,
	run_velocity = 3,
	jump = true,
	view_range = 15,
	drops = {
		{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 2},
		{name = "mobs:leather", chance = 2, min = 0, max = 2},
		{name = "default:mese_crystal", chance = 3, min = 0, max = 2},
		{name = "default:diamond", chance = 4, min = 0, max = 1},
		{name = "default:diamondblock", chance = 30, min = 0, max = 1},
	},
	water_damage = 1,
	lava_damage = 1,
	light_damage = 0,
	fear_height = 3,
	animation = {
		stand_start = 0,
		stand_end = 19,
		walk_start = 20,
		walk_end = 35,
		punch_start = 36,
		punch_end = 48,
		shoot_start = 36,
		shoot_end = 48,
		speed_normal = 15,
		speed_run = 15,
	},
})

mobs:spawn({
	name = "mobs_monster:dungeon_master",
	nodes = {"default:stone"},
	max_light = 5,
	chance = 9000,
	active_object_count = 1,
	max_height = -70,
})

mobs:register_egg("mobs_monster:dungeon_master", S("Dungeon Master"), "fire_basic_flame.png", 1, true)

mobs:alias_mob("mobs:dungeon_master", "mobs_monster:dungeon_master") -- compatibility

-- fireball (weapon)
mobs:register_arrow("mobs_monster:fireball", {
	visual = "sprite",
	visual_size = {x = 1, y = 1},
	textures = {"mobs_fireball.png"},
	collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
	velocity = 7,
	tail = 1,
	tail_texture = "mobs_fireball.png",
	tail_size = 10,
	glow = 5,
	expire = 0.1,

	on_activate = function(self, staticdata, dtime_s)
		-- make fireball indestructable
		self.object:set_armor_groups({immortal = 1, fleshy = 100})
	end,

	-- if player has a good weapon with 7+ damage it can deflect fireball
	on_punch = function(self, hitter, tflp, tool_capabilities, dir)

		if hitter and hitter:is_player() and tool_capabilities and dir then

			local damage = tool_capabilities.damage_groups and
				tool_capabilities.damage_groups.fleshy or 1

			local tmp = tflp / (tool_capabilities.full_punch_interval or 1.4)

			if damage > 6 and tmp < 4 then

				self.object:set_velocity({
					x = dir.x * self.velocity,
					y = dir.y * self.velocity,
					z = dir.z * self.velocity,
				})
			end
		end
	end,

	-- direct hit, no fire... just plenty of pain
	hit_player = function(self, player)
		player:punch(self.object, 1.0, {
			full_punch_interval = 1.0,
			damage_groups = {fleshy = 8},
		}, nil)
	end,

	hit_mob = function(self, player)
		player:punch(self.object, 1.0, {
			full_punch_interval = 1.0,
			damage_groups = {fleshy = 8},
		}, nil)
	end,

	-- node hit
	hit_node = function(self, pos, node)
		mobs:boom(self, pos, 1)
	end
})

--minetest.override_item("default:obsidian", {on_blast = function() end})


code:
local path = minetest.get_modpath("mobs_monster")

-- Intllib
local S
if minetest.global_exists("intllib") then
	if intllib.make_gettext_pair then
		-- New method using gettext.
		S = intllib.make_gettext_pair()
	else
		-- Old method using text files.
		S = intllib.Getter()
	end
else
	S = function(s) return s end
end
mobs.intllib = S

-- Monsters

dofile(path .. "/dirt_monster.lua") -- PilzAdam
dofile(path .. "/dungeon_master.lua")
dofile(path .. "/oerkki.lua")
dofile(path .. "/sand_monster.lua")
dofile(path .. "/stone_monster.lua")
dofile(path .. "/tree_monster.lua")
dofile(path .. "/lava_flan.lua") -- Zeg9
dofile(path .. "/mese_monster.lua")
dofile(path .. "/spider.lua") -- AspireMint

dofile(path .. "/lucky_block.lua")

print ("[MOD] Mobs Redo Monsters loaded")


code:
local S = mobs.intllib

-- Lava Flan by Zeg9 (additional textures by JurajVajda)

mobs:register_mob("mobs_monster:lava_flan", {
	type = "monster",
	passive = false,
	attack_type = "dogfight",
	reach = 2,
	damage = 3,
	hp_min = 10,
	hp_max = 35,
	armor = 80,
	collisionbox = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5},
	visual = "mesh",
	mesh = "zmobs_lava_flan.x",
	textures = {
		{"zmobs_lava_flan.png"},
		{"zmobs_lava_flan2.png"},
		{"zmobs_lava_flan3.png"},
	},
	blood_texture = "fire_basic_flame.png",
	makes_footstep_sound = false,
	sounds = {
		random = "mobs_lavaflan",
		war_cry = "mobs_lavaflan",
	},
	walk_velocity = 0.5,
	run_velocity = 2,
	jump = true,
	view_range = 10,
	floats = 1,
	drops = {
		{name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
	},
	water_damage = 8,
	lava_damage = 0,
	light_damage = 0,
	immune_to = {
		{"mobs:pick_lava", -2}, -- lava pick heals 2 health
	},
	fly_in = {"default:lava_source", "default:lava_flowing"},
	animation = {
		speed_normal = 15,
		speed_run = 15,
		stand_start = 0,
		stand_end = 8,
		walk_start = 10,
		walk_end = 18,
		run_start = 20,
		run_end = 28,
		punch_start = 20,
		punch_end = 28,
	},
	on_die = function(self, pos)

		local cod = self.cause_of_death or {}
		local def = cod.node and minetest.registered_nodes[cod.node]

		if def and def.groups and def.groups.water then

			pos.y = pos.y + 1

			mobs:effect(pos, 40, "tnt_smoke.png", 3, 5, 2, 0.5, nil, false)

			minetest.sound_play("fire_extinguish_flame",
				{pos = pos, max_hear_distance = 12, gain = 1.5}, true)

			self.object:remove()

			if math.random(4) == 1 then
				mobs:add_mob(pos, {
					name = "mobs_monster:obsidian_flan",
				})
			end
		else
			if minetest.get_node(pos).name == "air" then
				minetest.set_node(pos, {name = "fire:basic_flame"})
			end

			mobs:effect(pos, 40, "fire_basic_flame.png", 2, 3, 2, 5, 10, nil)

			self.object:remove()
		end
	end,
	glow = 10,
})

mobs:spawn({
	name = "mobs_monster:lava_flan",
	nodes = {"default:lava_source"},
	chance = 1500,
	active_object_count = 1,
	max_height = 0,
})

mobs:register_egg("mobs_monster:lava_flan", S("Lava Flan"), "default_lava.png", 1)

mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan") -- compatibility

-- lava orb
minetest.register_craftitem(":mobs:lava_orb", {
	description = S("Lava orb"),
	inventory_image = "zmobs_lava_orb.png",
})

minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")

minetest.register_craft({
	type = "fuel",
	recipe = "mobs:lava_orb",
	burntime = 80,
})

-- Lava Pick (digs and smelts at same time)

local old_handle_node_drops = minetest.handle_node_drops

function minetest.handle_node_drops(pos, drops, digger)

	-- does player exist?
	if not digger then return end

	-- are we holding Lava Pick?
	if digger:get_wielded_item():get_name() ~= ("mobs:pick_lava") then
		return old_handle_node_drops(pos, drops, digger)
	end

	-- reset new smelted drops
	local hot_drops = {}

	-- loop through current node drops
	for _, drop in pairs(drops) do

		-- get cooked output of current drops
		local stack = ItemStack(drop)
		local output = minetest.get_craft_result({
			method = "cooking",
			width = 1,
			items = {drop}
		})

		-- if we have cooked result then add to new list
		if output
		and output.item
		and not output.item:is_empty() then

			table.insert(hot_drops,
				ItemStack({
					name = output.item:get_name(),
					count = output.item:to_table().count,
				})
			)
		else -- if not then return normal drops
			table.insert(hot_drops, stack)
		end
	end

	return old_handle_node_drops(pos, hot_drops, digger)
end

minetest.register_tool(":mobs:pick_lava", {
	description = S("Lava Pickaxe"),
	inventory_image = "mobs_pick_lava.png",
	tool_capabilities = {
		full_punch_interval = 0.4,
		max_drop_level=3,
		groupcaps={
			cracky = {times={[1]=1.80, [2]=0.80, [3]=0.40}, uses=40, maxlevel=3},
		},
		damage_groups = {fleshy = 6, fire = 1},
	},
	groups = {pickaxe = 1}
})

minetest.register_craft({
	output = "mobs:pick_lava",
	recipe = {
		{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
		{"", "default:obsidian_shard", ""},
		{"", "default:obsidian_shard", ""},
	}
})

-- Add [toolranks] mod support if found
if minetest.get_modpath("toolranks") then

minetest.override_item("mobs:pick_lava", {
	original_description = "Lava Pickaxe",
	description = toolranks.create_description("Lava Pickaxe", 0, 1),
	after_use = toolranks.new_afteruse})
end

-- obsidian flan

mobs:register_mob("mobs_monster:obsidian_flan", {
	type = "monster",
	passive = false,
	attack_type = "shoot",
	shoot_interval = 0.5,
	shoot_offset = 1.0,
	arrow = "mobs_monster:obsidian_arrow",
	reach = 2,
	damage = 3,
	hp_min = 10,
	hp_max = 35,
	armor = 30,
	visual_size = {x = 0.6, y = 0.6},
	collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.8, 0.3},
	visual = "mesh",
	mesh = "zmobs_lava_flan.x",
	textures = {
		{"mobs_obsidian_flan.png"},
	},
	blood_texture = "default_obsidian.png",
	makes_footstep_sound = true,
	sounds = {
		random = "mobs_lavaflan",
--		war_cry = "mobs_lavaflan",
	},
	walk_velocity = 0.1,
	run_velocity = 0.5,
	jump = false,
	view_range = 10,
	floats = 0,
	drops = {
		{name = "default:obsidian_shard", chance = 1, min = 1, max = 5},
		{name = "default:obsidian", chance = 3, min = 0, max = 2},
	},
	water_damage = 0,
	lava_damage = 8,
	light_damage = 0,
	animation = {
		speed_normal = 15,
		speed_run = 15,
		stand_start = 0,
		stand_end = 8,
		walk_start = 10,
		walk_end = 18,
		run_start = 20,
		run_end = 28,
		punch_start = 20,
		punch_end = 28,
	}
})

mobs:register_egg("mobs_monster:obsidian_flan", S("Obsidian Flan"),
		"default_obsidian.png", 1)

local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false

-- mese arrow (weapon)
mobs:register_arrow("mobs_monster:obsidian_arrow", {
	visual = "sprite",
--	visual = "wielditem",
	visual_size = {x = 0.5, y = 0.5},
	textures = {"default_obsidian_shard.png"},
	velocity = 6,
--	rotate = 180,

	hit_player = function(self, player)
		player:punch(self.object, 1.0, {
			full_punch_interval = 1.0,
			damage_groups = {fleshy = 8},
		}, nil)
	end,

	hit_mob = function(self, player)
		player:punch(self.object, 1.0, {
			full_punch_interval = 1.0,
			damage_groups = {fleshy = 8},
		}, nil)
	end,

	hit_node = function(self, pos, node)

		if mobs_griefing == false or minetest.is_protected(pos, "") then
			return
		end

		local texture = "default_dirt.png" --fallback texture

		local radius = 1
		local def = minetest.registered_nodes[node]
		if def then
			node = { name = node }
		end
		if def and def.tiles and def.tiles[1] then
			texture = def.tiles[1]
		end

		-- do not break obsidian or diamond blocks or unbreakable nodes
		if (def.groups and def.groups.level and def.groups.level > 1)
		or def.groups.unbreakable then
			return
		end

		minetest.add_particlespawner({
			amount = 32,
			time = 0.1,
			minpos = vector.subtract(pos, radius / 2),
			maxpos = vector.add(pos, radius / 2),
			minvel = {x = -3, y = 0, z = -3},
			maxvel = {x = 3, y = 5,  z = 3},
			minacc = {x = 0, y = -10, z = 0},
			maxacc = {x = 0, y = -10, z = 0},
			minexptime = 0.8,
			maxexptime = 2.0,
			minsize = radius * 0.33,
			maxsize = radius,
			texture = texture,
			-- ^ only as fallback for clients without support for `node` parameter
			node = node,
			collisiondetection = true,
		})

		minetest.set_node(pos, {name = "air"})

		local snd = def.sounds and def.sounds.dug or "default_dig_crumbly"

		minetest.sound_play(snd, {pos = pos, max_hear_distance = 12, gain = 1.0}, true)
	end
})


code:
# German Translation for mobs_monster mod
# Deutsche Übersetzung der mobs_monster Mod
# last update: 2016/June/10
# Author: Xanthin

#dirtmonster.lua
Dirt Monster = Erdmonster

#dungeonmaster.lua
Dungeon Master = Kerkermeister

#init.lua
[MOD] Mobs Redo 'Monsters' loaded = [MOD] Mobs Redo 'Monsters' geladen

#lava_flan.lua
Lava Flan = Lavaflan
Lava orb = Lavakugel
Lava Pickaxe = Lavaspitzhacke

#mese_monster.lua
Mese Monster = Mesemonster

#oerkki.lua
Oerkki = Oerkki

#sandmonster.lua
Sand Monster = Sandmonster

#spider.lua
Spider = Spinne
Cobweb = Spinnennetz

#stonemonster.lua
Stone Monster = Steinmonster

#treemonster.lua
Tree Monster = Baummonster


code:
# last update: 2016/June/10

#dirtmonster.lua
Dirt Monster =  Monstre de terre

#dungeonmaster.lua
Dungeon Master = Maître des donjons

#init.lua
[MOD] Mobs Redo 'Monsters' loaded = [MOD] Mobs Redo 'Monstres' chargé

#lava_flan.lua
Lava Flan = Flan de lave
Lava orb = Orbe de lave
Lava Pickaxe = Pioche de lave

#mese_monster.lua
Mese Monster = Monstre de Mese

#oerkki.lua
Oerkki = Oerkki

#sandmonster.lua
Sand Monster = Monstre de sable

#spider.lua
Spider = Araignée
Cobweb = Toile d'arraignée

#stonemonster.lua
Stone Monster = Monstre de pierre

#treemonster.lua
Tree Monster = Monstre de bois


code:
# ITALIAN LOCALE FILE FOR THE MOBS MONSTER MODULE
# Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1
# This file is distributed under the same license as the MOBS MONSTER package.
# Hamlet <h4mlet@riseup.net>, 2017.
#

#dirtmonster.lua
Dirt Monster = Mostro di terra

#dungeonmaster.lua
Dungeon Master = Padrone delle segrete

#init.lua
[MOD] Mobs Redo 'Monsters' loaded = [MOD] Mobs Redo 'Monsters' caricato

#lava_flan.lua
Lava Flan = Sformato di lava
Lava orb = Sfera di lava
Lava Pickaxe = Piccone di lava

#mese_monster.lua
Mese Monster = Mostro di mese

#oerkki.lua
Oerkki = Oerkki

#sandmonster.lua
Sand Monster = Mostro di sabbia

#spider.lua
Spider = Ragno
Cobweb = Ragnatela

#stonemonster.lua
Stone Monster = Mostro di pietra

#treemonster.lua
Tree Monster = Albero mostro


code:
# Malay translations of mobs_monster mod
# using template from 2016/June/10, translated on 2018/February/05

#dirtmonster.lua
Dirt Monster = Raksasa Tanah

#dungeonmaster.lua
Dungeon Master = Penjaga Kurungan Bawah Tanah

#init.lua
[MOD] Mobs Redo 'Monsters' loaded = [MODS] Mobs Redo 'Monsters' telah dimuatkan

#lava_flan.lua
Lava Flan = Raksasa Lava
Lava orb = Bola Lava
Lava Pickaxe = Beliung Lava

#mese_monster.lua
Mese Monster = Raksasa Mese

#oerkki.lua
Oerkki = Oerkki

#sandmonster.lua
Sand Monster = Raksasa Pasir

#spider.lua
Spider = Labah-labah
Cobweb = Sarang Labah-labah

#stonemonster.lua
Stone Monster = Raksasa Batu

#treemonster.lua
Tree Monster = Raksasa Pokok


code:
# Template for translations of mobs_monster mod
# last update: 2016/June/10

#dirtmonster.lua
Dirt Monster =

#dungeonmaster.lua
Dungeon Master =

#init.lua
[MOD] Mobs Redo 'Monsters' loaded =

#lava_flan.lua
Lava Flan =
Lava orb =
Lava Pickaxe =

#mese_monster.lua
Mese Monster =

#oerkki.lua
Oerkki =

#sandmonster.lua
Sand Monster =

#spider.lua
Spider =
Cobweb =

#stonemonster.lua
Stone Monster =

#treemonster.lua
Tree Monster =


code:
# Türkçe çeviri by Admicos
# Turkish translation by Admicos

# Son düzenleme: 26 Nisan 2017
# Last edit: 26 April 2017

#dirtmonster.lua
Dirt Monster = Toprak Canavarı

#dungeonmaster.lua
Dungeon Master = Zindan başı

#init.lua
[MOD] Mobs Redo 'Monsters' loaded = [MOD] Mobs Redo 'Canavarlar' yüklendi

#lava_flan.lua
Lava Flan = Lav Flan
Lava orb = Lav küre
Lava Pickaxe = Lav kazması

#mese_monster.lua
Mese Monster = Mese Canavarı

#oerkki.lua
Oerkki = Oerkki

#sandmonster.lua
Sand Monster = Kum Canavarı

#spider.lua
Spider = Örümcek
Cobweb = Örümcek ağı

#stonemonster.lua
Stone Monster = Taş Canavarı

#treemonster.lua
Tree Monster = Ağaç Canavarı


code:
# Template for translations of mobs_monster mod
# last update: 2016/June/10

#dirtmonster.lua
Dirt Monster = 泥土怪

#dungeonmaster.lua
Dungeon Master = 地穴之主

#init.lua
[MOD] Mobs Redo 'Monsters' loaded = [模组] Mobs Redo 'Monsters' 已加载

#lava_flan.lua
Lava Flan = 岩浆饼
Lava orb = 岩浆球
Lava Pickaxe = 岩浆镐

#mese_monster.lua
Mese Monster = 黄石怪

#oerkki.lua
Oerkki = 奥尔基

#sandmonster.lua
Sand Monster = 沙怪

#spider.lua
Spider = 蜘蛛
Cobweb = 蜘蛛网

#stonemonster.lua
Stone Monster = 石头怪

#treemonster.lua
Tree Monster = 树怪


code:
# Template for translations of mobs_monster mod
# last update: 2016/June/10

#dirtmonster.lua
Dirt Monster = 泥土怪

#dungeonmaster.lua
Dungeon Master = 地穴之主

#init.lua
[MOD] Mobs Redo 'Monsters' loaded = [模組] Mobs Redo 'Monsters' 已加載

#lava_flan.lua
Lava Flan = 岩漿餅
Lava orb = 岩漿球
Lava Pickaxe = 岩漿鎬

#mese_monster.lua
Mese Monster = 黃石怪

#oerkki.lua
Oerkki = 奧爾基

#sandmonster.lua
Sand Monster = 沙怪

#spider.lua
Spider = 蜘蛛
Cobweb = 蜘蛛網

#stonemonster.lua
Stone Monster = 石頭怪

#treemonster.lua
Tree Monster = 樹怪


code:
if minetest.get_modpath("lucky_block") then

	local web = {name = "mobs:cobweb"}
	local web_trap = {
		size = {x = 3, y = 3, z = 3},
		data = {
			web, web, web,
			web, web, web,
			web, web, web,

			web, web, web,
			web, web, web,
			web, web, web,

			web, web, web,
			web, web, web,
			web, web, web,
		},
	}

	lucky_block:add_schematics({
		{"webtrap", web_trap, {x = 1, y = 0, z = 1}},
	})

	lucky_block:add_blocks({
		{"sch", "webtrap", 1, true},
		{"spw", "mobs:dungeon_master", 1, nil, nil, 3, "Billy"},
		{"spw", "mobs:sand_monster", 3},
		{"spw", "mobs:stone_monster", 3, nil, nil, 3, "Bob"},
		{"spw", "mobs:dirt_monster", 3},
		{"spw", "mobs:tree_monster", 3},
		{"spw", "mobs:oerkki", 3},
		{"exp"},
		{"spw", "mobs:spider", 5},
		{"spw", "mobs:mese_monster", 2},
		{"spw", "mobs:lava_flan", 3},
		{"nod", "default:chest", 0, {
			{name = "mobs:lava_orb", max = 1}}},
	})

end


code:
local S = mobs.intllib

-- Mese Monster by Zeg9

mobs:register_mob("mobs_monster:mese_monster", {
	type = "monster",
	passive = false,
	damage = 3,
	attack_type = "shoot",
	shoot_interval = 0.5,
	arrow = "mobs_monster:mese_arrow",
	shoot_offset = 2,
	hp_min = 10,
	hp_max = 25,
	armor = 80,
	collisionbox = {-0.5, -1.5, -0.5, 0.5, 0.5, 0.5},
	visual = "mesh",
	mesh = "zmobs_mese_monster.x",
	textures = {
		{"zmobs_mese_monster.png"},
	},
	blood_texture = "default_mese_crystal_fragment.png",
	makes_footstep_sound = false,
	sounds = {
		random = "mobs_mesemonster",
	},
	view_range = 10,
	walk_velocity = 0.5,
	run_velocity = 2,
	jump = true,
	jump_height = 8,
	fall_damage = 0,
	fall_speed = -6,
	stepheight = 2.1,
	drops = {
		{name = "default:mese_crystal", chance = 9, min = 0, max = 2},
		{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 2},
	},
	water_damage = 1,
	lava_damage = 1,
	light_damage = 0,
	animation = {
		speed_normal = 15,
		speed_run = 15,
		stand_start = 0,
		stand_end = 14,
		walk_start = 15,
		walk_end = 38,
		run_start = 40,
		run_end = 63,
		punch_start = 40,
		punch_end = 63,
	},
})

mobs:spawn({
	name = "mobs_monster:mese_monster",
	nodes = {"default:stone"},
	max_light = 7,
	chance = 5000,
	active_object_count = 1,
	max_height = -20,
})

mobs:register_egg("mobs_monster:mese_monster", S("Mese Monster"), "default_mese_block.png", 1)

mobs:alias_mob("mobs:mese_monster", "mobs_monster:mese_monster") -- compatiblity

-- mese arrow (weapon)
mobs:register_arrow("mobs_monster:mese_arrow", {
	visual = "sprite",
--	visual = "wielditem",
	visual_size = {x = 0.5, y = 0.5},
	textures = {"default_mese_crystal_fragment.png"},
	--textures = {"default:mese_crystal_fragment"},
	velocity = 6,
--	rotate = 180,

	hit_player = function(self, player)
		player:punch(self.object, 1.0, {
			full_punch_interval = 1.0,
			damage_groups = {fleshy = 2},
		}, nil)
	end,

	hit_mob = function(self, player)
		player:punch(self.object, 1.0, {
			full_punch_interval = 1.0,
			damage_groups = {fleshy = 2},
		}, nil)
	end,

	hit_node = function(self, pos, node)
	end
})

-- 9x mese crystal fragments = 1x mese crystal
minetest.register_craft({
	output = "default:mese_crystal",
	recipe = {
		{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
		{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
		{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
	}
})


code: name = mobs_monster


code:
local S = mobs.intllib

-- Oerkki by PilzAdam

mobs:register_mob("mobs_monster:oerkki", {
	type = "monster",
	passive = false,
	attack_type = "dogfight",
	pathfinding = true,
	reach = 2,
	damage = 4,
	hp_min = 8,
	hp_max = 34,
	armor = 100,
	collisionbox = {-0.4, -1, -0.4, 0.4, 0.9, 0.4},
	visual = "mesh",
	mesh = "mobs_oerkki.b3d",
	textures = {
		{"mobs_oerkki.png"},
		{"mobs_oerkki2.png"},
	},
	makes_footstep_sound = false,
	sounds = {
		random = "mobs_oerkki",
	},
	walk_velocity = 1,
	run_velocity = 3,
	view_range = 10,
	jump = true,
	drops = {
		{name = "default:obsidian", chance = 3, min = 0, max = 2},
		{name = "default:gold_lump", chance = 2, min = 0, max = 2},
	},
	water_damage = 2,
	lava_damage = 4,
	light_damage = 1,
	fear_height = 4,
	animation = {
		stand_start = 0,
		stand_end = 23,
		walk_start = 24,
		walk_end = 36,
		run_start = 37,
		run_end = 49,
		punch_start = 37,
		punch_end = 49,
		speed_normal = 15,
		speed_run = 15,
	},
	replace_rate = 5,
	replace_what = {"default:torch"},
	replace_with = "air",
	replace_offset = -1,
	immune_to = {
		{"default:sword_wood", 0}, -- no damage
		{"default:gold_lump", -10}, -- heals by 10 points
	},
})

mobs:spawn({
	name = "mobs_monster:oerkki",
	nodes = {"default:stone"},
	max_light = 7,
	chance = 7000,
	max_height = -10,
})

mobs:register_egg("mobs_monster:oerkki", S("Oerkki"), "default_obsidian.png", 1)

mobs:alias_mob("mobs:oerkki", "mobs_monster:oerkki") -- compatiblity


code:
MONSTER MOBS

Dirt Monster

- Spawning at night on green grass (or grey in ethereal) these mobs wander around looking for a player to eat. Drops 1-5 dirt when killed.

Dungeon Master

- Spawning below -70 underground DM's have a tendency to hurl fire balls at unsuspecting players and can cause major damage, but get too close and he will switch to dogfight attack. Can drop mese or diamond when killed.

Lava Flan

- Cute as they may look lava flan wallow in their namesake (no, not flans) and get curious about players who wander by, forgetting that they can burn you and cause damage. They have a 1 in 5 chance of dropping lava orb when killed, but if they die in water then pray they dont solidify into an obsidian flan that shoots shards and destroys all around them.

Mese Monster

- These mobs are territorial and spawn below -20 and will fire mese shards at passers by, so best avoided. Will drop mese when killed.

Oerkki

- Found in dark areas like most monsters Oerkki wander the caverns stealing away torches on the ground and attacking anyone found in that area. 1 in 3 chance of dropping obsidian.

Sand Monster

- The hot deserts are home to these guys who spawn at any time of the day to attack players. They drop 3-5 desert sand when killed.

Spiders

- Snowy spiders are found on higher cold areas, Tarantula's in higher jungle, Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes.  Some are docile during the daytime and will drop string when killed.

Stone Monster

- Found underground in dark caves these mobs seem to be zombie-like in fashion with a tendency to rush a player in the area. can drop torch, iron or coal when killed.

Tree Monster

- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three.

Lucky Blocks: 11


code:
local S = mobs.intllib

-- custom particle effects
local effect = function(
		pos, amount, texture, min_size, max_size, radius, gravity, glow)

	radius = radius or 2
	min_size = min_size or 0.5
	max_size = max_size or 1
	gravity = gravity or -10
	glow = glow or 0

	minetest.add_particlespawner({
		amount = amount,
		time = 0.25,
		minpos = pos,
		maxpos = pos,
		minvel = {x = -radius, y = -radius, z = -radius},
		maxvel = {x = radius, y = radius, z = radius},
		minacc = {x = 0, y = gravity, z = 0},
		maxacc = {x = -20, y = gravity, z = 15},
		minexptime = 0.1,
		maxexptime = 1,
		minsize = min_size,
		maxsize = max_size,
		texture = texture,
		glow = glow,
	})
end

-- Sand Monster by PilzAdam

mobs:register_mob("mobs_monster:sand_monster", {
	type = "monster",
	passive = false,
	attack_type = "dogfight",
	pathfinding = true,
	--specific_attack = {"player", "mobs_npc:npc"},
	reach = 2,
	damage = 1,
	hp_min = 4,
	hp_max = 20,
	armor = 100,
	collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4},
	visual = "mesh",
	mesh = "mobs_sand_monster.b3d",
	textures = {
		{"mobs_sand_monster.png"},
	},
	blood_texture = "default_desert_sand.png",
	makes_footstep_sound = true,
	sounds = {
		random = "mobs_sandmonster",
	},
	walk_velocity = 1.5,
	run_velocity = 4,
	view_range = 8, --15
	jump = true,
	floats = 0,
	drops = {
		{name = "default:desert_sand", chance = 1, min = 3, max = 5},
	},
	water_damage = 3,
	lava_damage = 4,
	light_damage = 0,
	fear_height = 4,
	animation = {
		speed_normal = 15,
		speed_run = 15,
		stand_start = 0,
		stand_end = 39,
		walk_start = 41,
		walk_end = 72,
		run_start = 74,
		run_end = 105,
		punch_start = 74,
		punch_end = 105,
	},
	immune_to = {
		{"default:shovel_wood", 3}, -- shovels deal more damage to sand monster
		{"default:shovel_stone", 3},
		{"default:shovel_bronze", 4},
		{"default:shovel_steel", 4},
		{"default:shovel_mese", 5},
		{"default:shovel_diamond", 7},
	},
--[[
	custom_attack = function(self, p)
		local pos = self.object:get_pos()
		minetest.add_item(pos, "default:sand")
	end,
]]
	on_die = function(self, pos)
		pos.y = pos.y + 0.5
		mobs:effect(pos, 30, "mobs_sand_particles.png", .1, 2, 3, 5)
		pos.y = pos.y + 0.25
		mobs:effect(pos, 30, "mobs_sand_particles.png", .1, 2, 3, 5)
	end,
--[[
	on_rightclick = function(self, clicker)

		local tool = clicker:get_wielded_item()
		local name = clicker:get_player_name()

		if tool:get_name() == "default:sand" then

			self.owner = name
			self.type = "npc"

			mobs:force_capture(self, clicker)
		end
	end,
]]
})

mobs:spawn({
	name = "mobs_monster:sand_monster",
	nodes = {"default:desert_sand"},
	chance = 7000,
	active_object_count = 2,
	min_height = 0,
})

mobs:register_egg("mobs_monster:sand_monster", S("Sand Monster"), "default_desert_sand.png", 1)

mobs:alias_mob("mobs:sand_monster", "mobs_monster:sand_monster") -- compatibility