Merge remote-tracking branch 'upstream/master'

This commit is contained in:
bri cassa 2024-09-15 09:25:21 +02:00
commit 39f4ffa2d9
17 changed files with 366 additions and 361 deletions

77
bee.lua
View File

@ -1,4 +1,4 @@
-- Translation support
local S = minetest.get_translator("mobs_animal") local S = minetest.get_translator("mobs_animal")
-- Bee by KrupnoPavel (.b3d model by sirrobzeroone) -- Bee by KrupnoPavel (.b3d model by sirrobzeroone)
@ -12,15 +12,11 @@ mobs:register_mob("mobs_animal:bee", {
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.5, 0.2}, collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.5, 0.2},
visual = "mesh", visual = "mesh",
mesh = "mobs_bee.b3d", mesh = "mobs_bee.b3d",
textures = { textures = { {"mobs_bee.png"} },
{"mobs_bee.png"}
},
blood_texture = "mobs_bee_inv.png", blood_texture = "mobs_bee_inv.png",
blood_amount = 1, blood_amount = 1,
makes_footstep_sound = false, makes_footstep_sound = false,
sounds = { sounds = { random = "mobs_bee" },
random = "mobs_bee"
},
walk_velocity = 1, walk_velocity = 1,
jump = true, jump = true,
drops = { drops = {
@ -33,10 +29,8 @@ mobs:register_mob("mobs_animal:bee", {
fall_speed = -3, fall_speed = -3,
animation = { animation = {
speed_normal = 15, speed_normal = 15,
stand_start = 0, stand_start = 0, stand_end = 30,
stand_end = 30, walk_start = 35, walk_end = 65
walk_start = 35,
walk_end = 65
}, },
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
@ -48,6 +42,8 @@ mobs:register_mob("mobs_animal:bee", {
-- end, -- end,
}) })
-- where to spawn
if not mobs.custom_spawn_animal then if not mobs.custom_spawn_animal then
mobs:spawn({ mobs:spawn({
@ -62,25 +58,27 @@ if not mobs.custom_spawn_animal then
}) })
end end
-- spawn egg -- spawn egg
mobs:register_egg("mobs_animal:bee", S("Bee"), "mobs_bee_inv.png") mobs:register_egg("mobs_animal:bee", S("Bee"), "mobs_bee_inv.png")
-- compatibility (only required if moving from old mobs to mobs_redo) -- compatibility (only required if moving from old mobs to mobs_redo)
mobs:alias_mob("mobs:bee", "mobs_animal:bee") mobs:alias_mob("mobs:bee", "mobs_animal:bee")
-- honey -- honey
minetest.register_craftitem(":mobs:honey", { minetest.register_craftitem(":mobs:honey", {
description = S("Honey"), description = S("Honey"),
inventory_image = "mobs_honey_inv.png", inventory_image = "mobs_honey_inv.png",
on_use = minetest.item_eat(4), on_use = minetest.item_eat(4),
groups = {food_honey = 1, food_sugar = 1, flammable = 1} groups = {food_honey = 1, food_sugar = 1}
}) })
mobs.add_eatable("mobs:honey", 4)
-- beehive (1 in 4 chance of spawning bee when placed)
-- beehive (when placed spawns bee)
minetest.register_node(":mobs:beehive", { minetest.register_node(":mobs:beehive", {
description = S("Beehive"), description = S("Beehive"),
drawtype = "plantlike", drawtype = "plantlike",
@ -90,7 +88,8 @@ minetest.register_node(":mobs:beehive", {
sunlight_propagates = true, sunlight_propagates = true,
walkable = true, walkable = true,
groups = {oddly_breakable_by_hand = 3, flammable = 1, disable_suffocation = 1}, groups = {oddly_breakable_by_hand = 3, flammable = 1, disable_suffocation = 1},
sounds = default and default.node_sound_defaults(), is_ground_content = false,
sounds = mobs.node_sound_defaults(),
on_construct = function(pos) on_construct = function(pos)
@ -126,47 +125,42 @@ minetest.register_node(":mobs:beehive", {
local hp = puncher and puncher:get_hp() local hp = puncher and puncher:get_hp()
if hp then if hp then puncher:set_hp(hp - 4) end
puncher:set_hp(hp - 4)
end
end) end)
end, end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player) allow_metadata_inventory_put = function(pos, listname, index, stack, player)
if listname == "beehive" then if listname == "beehive" then return 0 end
return 0
end
return stack:get_count() return stack:get_count()
end, end,
can_dig = function(pos,player) can_dig = function(pos,player) -- can only dig when no honey inside
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
-- only dig beehive if no honey inside
return meta:get_inventory():is_empty("beehive") return meta:get_inventory():is_empty("beehive")
end end
}) })
-- beehive recipe -- beehive recipe
minetest.register_craft({ minetest.register_craft({
output = "mobs:beehive", output = "mobs:beehive",
recipe = { recipe = {{"mobs:bee","mobs:bee","mobs:bee"}}
{"mobs:bee","mobs:bee","mobs:bee"}
}
}) })
-- honey block -- honey block and craft recipes
minetest.register_node(":mobs:honey_block", { minetest.register_node(":mobs:honey_block", {
description = S("Honey Block"), description = S("Honey Block"),
tiles = {"mobs_honey_block.png"}, tiles = {"mobs_honey_block.png"},
groups = {snappy = 3, flammable = 2}, groups = {snappy = 3, flammable = 2},
sounds = default and default.node_sound_dirt_defaults() is_ground_content = false,
sounds = mobs.node_sound_dirt_defaults()
}) })
-- recipe
minetest.register_craft({ minetest.register_craft({
output = "mobs:honey_block", output = "mobs:honey_block",
recipe = { recipe = {
@ -183,38 +177,31 @@ minetest.register_craft({
} }
}) })
-- beehive workings -- beehive workings
minetest.register_abm({ minetest.register_abm({
nodenames = {"mobs:beehive"}, nodenames = {"mobs:beehive"},
interval = 12, interval = 12,
chance = 6, chance = 6,
catch_up = false, catch_up = false,
action = function(pos, node) action = function(pos, node)
-- bee's only make honey during the day -- bee's only make honey during the day
local tod = (minetest.get_timeofday() or 0) * 24000 local tod = (minetest.get_timeofday() or 0) * 24000
if tod < 5500 or tod > 18500 then if tod < 5500 or tod > 18500 then return end
return
end
-- is hive full? local meta = minetest.get_meta(pos) ; if not meta then return end
local meta = minetest.get_meta(pos)
if not meta then return end -- for older beehives
local inv = meta:get_inventory() local inv = meta:get_inventory()
local honey = inv:get_stack("beehive", 1):get_count() local honey = inv:get_stack("beehive", 1):get_count()
-- is hive full? if honey > 11 then return end -- return if hive full
if honey > 11 then
return
end
-- no flowers no honey, nuff said! -- no flowers no honey, nuff said!
if #minetest.find_nodes_in_area_under_air( 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},
{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
"group:flower") > 3 then
inv:add_item("beehive", "mobs:honey") inv:add_item("beehive", "mobs:honey")
end end

View File

@ -1,4 +1,4 @@
-- Translation support
local S = minetest.get_translator("mobs_animal") local S = minetest.get_translator("mobs_animal")
-- Bunny by ExeterDad -- Bunny by ExeterDad
@ -38,12 +38,9 @@ mobs:register_mob("mobs_animal:bunny", {
fear_height = 2, fear_height = 2,
animation = { animation = {
speed_normal = 15, speed_normal = 15,
stand_start = 1, stand_start = 1, stand_end = 15,
stand_end = 15, walk_start = 16, walk_end = 24,
walk_start = 16, punch_start = 16, punch_end = 24
walk_end = 24,
punch_start = 16,
punch_end = 24
}, },
follow = {"farming:carrot", "farming_plus:carrot_item", "default:grass_1"}, follow = {"farming:carrot", "farming_plus:carrot_item", "default:grass_1"},
view_range = 8, view_range = 8,
@ -93,9 +90,7 @@ mobs:register_mob("mobs_animal:bunny", {
obj:set_properties({textures = {"mobs_bunny_evil.png"}, hp_max = 20}) obj:set_properties({textures = {"mobs_bunny_evil.png"}, hp_max = 20})
-- remove old bunny -- remove old bunny
if obj:get_luaentity() then if obj:get_luaentity() then mobs:remove(self, true) end
mobs:remove(self, true)
end
end end
end, end,
@ -126,15 +121,16 @@ mobs:register_mob("mobs_animal:bunny", {
end end
}) })
-- where to spawn
local spawn_on = "default:dirt_with_grass"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:prairie_dirt"
end
if not mobs.custom_spawn_animal then if not mobs.custom_spawn_animal then
local spawn_on = "default:dirt_with_grass"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:prairie_dirt"
end
mobs:spawn({ mobs:spawn({
name = "mobs_animal:bunny", name = "mobs_animal:bunny",
nodes = {spawn_on}, nodes = {spawn_on},
@ -148,29 +144,36 @@ if not mobs.custom_spawn_animal then
}) })
end end
-- spawn egg
mobs:register_egg("mobs_animal:bunny", S("Bunny"), "mobs_bunny_inv.png", 0) mobs:register_egg("mobs_animal:bunny", S("Bunny"), "mobs_bunny_inv.png", 0)
-- compatibility (only used for older mobs compatibility)
mobs:alias_mob("mobs:bunny", "mobs_animal:bunny") -- compatibility mobs:alias_mob("mobs:bunny", "mobs_animal:bunny")
-- raw rabbit -- raw rabbit
minetest.register_craftitem(":mobs:rabbit_raw", { minetest.register_craftitem(":mobs:rabbit_raw", {
description = S("Raw Rabbit"), description = S("Raw Rabbit"),
inventory_image = "mobs_rabbit_raw.png", inventory_image = "mobs_rabbit_raw.png",
on_use = minetest.item_eat(3), on_use = minetest.item_eat(3),
groups = {food_meat_raw = 1, food_rabbit_raw = 1, flammable = 2} groups = {food_meat_raw = 1, food_rabbit_raw = 1}
}) })
mobs.add_eatable("mobs:rabbit_raw", 3)
-- cooked rabbit -- cooked rabbit
minetest.register_craftitem(":mobs:rabbit_cooked", { minetest.register_craftitem(":mobs:rabbit_cooked", {
description = S("Cooked Rabbit"), description = S("Cooked Rabbit"),
inventory_image = "mobs_rabbit_cooked.png", inventory_image = "mobs_rabbit_cooked.png",
on_use = minetest.item_eat(5), on_use = minetest.item_eat(5),
groups = {food_meat = 1, food_rabbit = 1, flammable = 2} groups = {food_meat = 1, food_rabbit = 1}
}) })
mobs.add_eatable("mobs:rabbit_cooked", 5)
minetest.register_craft({ minetest.register_craft({
type = "cooking", type = "cooking",
output = "mobs:rabbit_cooked", output = "mobs:rabbit_cooked",
@ -178,18 +181,15 @@ minetest.register_craft({
cooktime = 5 cooktime = 5
}) })
-- rabbit hide -- rabbit hide and recipes
minetest.register_craftitem(":mobs:rabbit_hide", { minetest.register_craftitem(":mobs:rabbit_hide", {
description = S("Rabbit Hide"), description = S("Rabbit Hide"),
inventory_image = "mobs_rabbit_hide.png", inventory_image = "mobs_rabbit_hide.png",
groups = {flammable = 2, pelt = 1} groups = {flammable = 2, pelt = 1}
}) })
minetest.register_craft({ minetest.register_craft({type = "fuel", recipe = "mobs:rabbit_hide", burntime = 2})
type = "fuel",
recipe = "mobs:rabbit_hide",
burntime = 2
})
minetest.register_craft({ minetest.register_craft({
output = "mobs:leather", output = "mobs:leather",

View File

@ -1,4 +1,4 @@
-- Translation support
local S = minetest.get_translator("mobs_animal") local S = minetest.get_translator("mobs_animal")
-- Chicken by JK Murray and Sirrobzeroone -- Chicken by JK Murray and Sirrobzeroone
@ -18,13 +18,9 @@ mobs:register_mob("mobs_animal:chicken", {
{"mobs_chicken_brown.png"}, {"mobs_chicken_brown.png"},
{"mobs_chicken_black.png"} {"mobs_chicken_black.png"}
}, },
child_texture = { child_texture = {{"mobs_chick.png"}},
{"mobs_chick.png"}
},
makes_footstep_sound = true, makes_footstep_sound = true,
sounds = { sounds = {random = "mobs_chicken"},
random = "mobs_chicken"
},
walk_velocity = 1, walk_velocity = 1,
run_velocity = 3, run_velocity = 3,
runaway = true, runaway = true,
@ -41,18 +37,10 @@ mobs:register_mob("mobs_animal:chicken", {
fear_height = 5, fear_height = 5,
animation = { animation = {
speed_normal = 15, speed_normal = 15,
stand_start = 1, stand_start = 1, stand_end = 30, stand_speed = 28,
stand_end = 30, stand1_start = 31, stand1_end = 70, stand1_speed = 32,
stand_speed = 28, walk_start = 71, walk_end = 90, walk_speed = 24,
stand1_start = 31, run_start = 91, run_end = 110, run_speed = 24
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 = { follow = {
"farming:seed_wheat", "farming:seed_cotton", "farming:seed_barley", "farming:seed_wheat", "farming:seed_cotton", "farming:seed_barley",
@ -84,38 +72,36 @@ mobs:register_mob("mobs_animal:chicken", {
do_custom = function(self, dtime) do_custom = function(self, dtime)
self.egg_timer = (self.egg_timer or 0) + dtime self.egg_timer = (self.egg_timer or 0) + dtime
if self.egg_timer < 10 then if self.egg_timer < 10 then return end
return
end
self.egg_timer = 0 self.egg_timer = 0
if self.child if self.child then return end
or math.random(100) > 1 then
return
end
local pos = self.object:get_pos() ; if not pos then return end local pos = self.object:get_pos() ; if not pos then return end
minetest.add_item(pos, "mobs:egg") if math.random(100) == 1 then
minetest.sound_play("default_place_node_hard", { minetest.add_item(pos, "mobs:egg")
pos = pos,
gain = 1.0, minetest.sound_play("default_place_node_hard",
max_hear_distance = 5 {pos = pos, gain = 1.0, max_hear_distance = 5}, true)
}, true)
elseif math.random(100) < 3 then
minetest.add_item(pos, "mobs:chicken_feather")
end
end end
}) })
-- where to spawn
local spawn_on = {"default:dirt_with_grass"}
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:bamboo_dirt", "ethereal:prairie_dirt"}
end
if not mobs.custom_spawn_animal then if not mobs.custom_spawn_animal then
local spawn_on = {"default:dirt_with_grass"}
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:bamboo_dirt", "ethereal:prairie_dirt"}
end
mobs:spawn({ mobs:spawn({
name = "mobs_animal:chicken", name = "mobs_animal:chicken",
nodes = spawn_on, nodes = spawn_on,
@ -129,22 +115,24 @@ if not mobs.custom_spawn_animal then
}) })
end end
-- spawn egg
mobs:register_egg("mobs_animal:chicken", S("Chicken"), "mobs_chicken_inv.png", 0) mobs:register_egg("mobs_animal:chicken", S("Chicken"), "mobs_chicken_inv.png", 0)
-- compatibility with older mobs mod
mobs:alias_mob("mobs:chicken", "mobs_animal:chicken") -- compatibility mobs:alias_mob("mobs:chicken", "mobs_animal:chicken")
-- egg entity -- egg entity
mobs:register_arrow("mobs_animal:egg_entity", { mobs:register_arrow("mobs_animal:egg_entity", {
visual = "sprite", visual = "sprite",
visual_size = {x=.5, y=.5}, visual_size = {x = .5, y = .5},
textures = {"mobs_chicken_egg.png"}, textures = {"mobs_chicken_egg.png"},
velocity = 6, velocity = 6,
hit_player = function(self, player) hit_player = function(self, player)
player:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, { player:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, {
full_punch_interval = 1.0, full_punch_interval = 1.0,
damage_groups = {fleshy = 1} damage_groups = {fleshy = 1}
@ -152,6 +140,7 @@ mobs:register_arrow("mobs_animal:egg_entity", {
end, end,
hit_mob = function(self, player) hit_mob = function(self, player)
player:punch(self.object, 1.0, { player:punch(self.object, 1.0, {
full_punch_interval = 1.0, full_punch_interval = 1.0,
damage_groups = {fleshy = 1} damage_groups = {fleshy = 1}
@ -160,16 +149,13 @@ mobs:register_arrow("mobs_animal:egg_entity", {
hit_node = function(self, pos, node) hit_node = function(self, pos, node)
if math.random(10) > 1 then if math.random(10) > 1 then return end
return
end
pos.y = pos.y + 1 pos.y = pos.y + 1
local nod = minetest.get_node_or_nil(pos) local nod = minetest.get_node_or_nil(pos)
if not nod if not nod or not minetest.registered_nodes[nod.name]
or not minetest.registered_nodes[nod.name]
or minetest.registered_nodes[nod.name].walkable == true then or minetest.registered_nodes[nod.name].walkable == true then
return return
end end
@ -184,22 +170,17 @@ mobs:register_arrow("mobs_animal:egg_entity", {
end end
}) })
-- egg throwing function
-- egg throwing item
local egg_GRAVITY = 9 local egg_GRAVITY = 9
local egg_VELOCITY = 19 local egg_VELOCITY = 19
-- shoot egg
local mobs_shoot_egg = function (item, player, pointed_thing) local mobs_shoot_egg = function (item, player, pointed_thing)
local playerpos = player:get_pos() local playerpos = player:get_pos()
minetest.sound_play("default_place_node_hard", { minetest.sound_play("default_place_node_hard",
pos = playerpos, {pos = playerpos, gain = 1.0, max_hear_distance = 5}, true)
gain = 1.0,
max_hear_distance = 5
})
local obj = minetest.add_entity({ local obj = minetest.add_entity({
x = playerpos.x, x = playerpos.x,
@ -215,16 +196,10 @@ local mobs_shoot_egg = function (item, player, pointed_thing)
ent._is_arrow = true -- tell advanced mob protection this is an arrow ent._is_arrow = true -- tell advanced mob protection this is an arrow
obj:set_velocity({ obj:set_velocity({
x = dir.x * egg_VELOCITY, x = dir.x * egg_VELOCITY, y = dir.y * egg_VELOCITY, z = dir.z * egg_VELOCITY})
y = dir.y * egg_VELOCITY,
z = dir.z * egg_VELOCITY
})
obj:set_acceleration({ obj:set_acceleration({
x = dir.x * -3, x = dir.x * -3, y = -egg_GRAVITY, z = dir.z * -3})
y = -egg_GRAVITY,
z = dir.z * -3
})
-- pass player name to egg for chick ownership -- pass player name to egg for chick ownership
local ent2 = obj:get_luaentity() local ent2 = obj:get_luaentity()
@ -236,8 +211,8 @@ local mobs_shoot_egg = function (item, player, pointed_thing)
return item return item
end end
-- egg -- egg
minetest.register_node(":mobs:egg", { minetest.register_node(":mobs:egg", {
description = S("Chicken Egg"), description = S("Chicken Egg"),
tiles = {"mobs_chicken_egg.png"}, tiles = {"mobs_chicken_egg.png"},
@ -247,30 +222,33 @@ minetest.register_node(":mobs:egg", {
wield_image = "mobs_chicken_egg.png", wield_image = "mobs_chicken_egg.png",
paramtype = "light", paramtype = "light",
walkable = false, walkable = false,
is_ground_content = true, is_ground_content = false,
sunlight_propagates = true, sunlight_propagates = true,
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2} fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
}, },
groups = {food_egg = 1, snappy = 2, dig_immediate = 3}, groups = {food_egg = 1, snappy = 2, dig_immediate = 3},
sounds = mobs.node_sound_defaults(),
after_place_node = function(pos, placer, itemstack) after_place_node = function(pos, placer, itemstack)
if placer:is_player() then minetest.set_node(pos, {name = "mobs:egg", param2 = 1})
minetest.set_node(pos, {name = "mobs:egg", param2 = 1})
end
end, end,
on_use = mobs_shoot_egg on_use = mobs_shoot_egg
}) })
-- fried egg and recipe
-- fried egg
minetest.register_craftitem(":mobs:chicken_egg_fried", { minetest.register_craftitem(":mobs:chicken_egg_fried", {
description = S("Fried Egg"), description = S("Fried Egg"),
inventory_image = "mobs_chicken_egg_fried.png", inventory_image = "mobs_chicken_egg_fried.png",
on_use = minetest.item_eat(2), on_use = minetest.item_eat(2),
groups = {food_egg_fried = 1, flammable = 2} groups = {food_egg_fried = 1}
}) })
mobs.add_eatable("mobs:chicken_egg_fried", 2)
minetest.register_craft({ minetest.register_craft({
type = "cooking", type = "cooking",
recipe = "mobs:egg", recipe = "mobs:egg",
@ -278,36 +256,39 @@ minetest.register_craft({
}) })
-- raw chicken -- raw chicken
minetest.register_craftitem(":mobs:chicken_raw", { minetest.register_craftitem(":mobs:chicken_raw", {
description = S("Raw Chicken"), description = S("Raw Chicken"),
inventory_image = "mobs_chicken_raw.png", inventory_image = "mobs_chicken_raw.png",
on_use = minetest.item_eat(2), on_use = minetest.item_eat(2),
groups = {food_meat_raw = 1, food_chicken_raw = 1, flammable = 2} groups = {food_meat_raw = 1, food_chicken_raw = 1}
}) })
-- cooked chicken mobs.add_eatable("mobs:chicken_raw", 2)
-- cooked chicken and recipe
minetest.register_craftitem(":mobs:chicken_cooked", { minetest.register_craftitem(":mobs:chicken_cooked", {
description = S("Cooked Chicken"), description = S("Cooked Chicken"),
inventory_image = "mobs_chicken_cooked.png", inventory_image = "mobs_chicken_cooked.png",
on_use = minetest.item_eat(6), on_use = minetest.item_eat(6),
groups = {food_meat = 1, food_chicken = 1, flammable = 2} groups = {food_meat = 1, food_chicken = 1}
}) })
mobs.add_eatable("mobs:chicken_cooked", 6)
minetest.register_craft({ minetest.register_craft({
type = "cooking", type = "cooking",
recipe = "mobs:chicken_raw", recipe = "mobs:chicken_raw",
output = "mobs:chicken_cooked" output = "mobs:chicken_cooked"
}) })
-- feather -- feather and fuel
minetest.register_craftitem(":mobs:chicken_feather", { minetest.register_craftitem(":mobs:chicken_feather", {
description = S("Feather"), description = S("Feather"),
inventory_image = "mobs_chicken_feather.png", inventory_image = "mobs_chicken_feather.png",
groups = {flammable = 2, feather = 1} groups = {flammable = 2, feather = 1}
}) })
minetest.register_craft({ minetest.register_craft({type = "fuel", recipe = "mobs:chicken_feather", burntime = 1})
type = "fuel",
recipe = "mobs:chicken_feather",
burntime = 1
})

81
cow.lua
View File

@ -1,4 +1,4 @@
-- Translation support
local S = minetest.get_translator("mobs_animal") local S = minetest.get_translator("mobs_animal")
-- Cow by sirrobzeroone -- Cow by sirrobzeroone
@ -21,9 +21,7 @@ mobs:register_mob("mobs_animal:cow", {
{"mobs_cow2.png"} {"mobs_cow2.png"}
}, },
makes_footstep_sound = true, makes_footstep_sound = true,
sounds = { sounds = {random = "mobs_cow"},
random = "mobs_cow",
},
walk_velocity = 1, walk_velocity = 1,
run_velocity = 2, run_velocity = 2,
jump = true, jump = true,
@ -38,25 +36,12 @@ mobs:register_mob("mobs_animal:cow", {
lava_damage = 5, lava_damage = 5,
light_damage = 0, light_damage = 0,
animation = { animation = {
stand_start = 0, stand_start = 0, stand_end = 30, stand_speed = 20,
stand_end = 30, stand1_start = 35, stand1_end = 75, stand1_speed = 20,
stand_speed = 20, walk_start = 85, walk_end = 114, walk_speed = 20,
stand1_start = 35, run_start = 120, run_end = 140, run_speed = 30,
stand1_end = 75, punch_start = 145, punch_end = 160, punch_speed = 20,
stand1_speed = 20, die_start = 165, die_end = 185, die_speed = 10, die_loop = false
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 = { follow = {
"farming:wheat", "default:grass_1", "farming:barley", "farming:wheat", "default:grass_1", "farming:barley",
@ -77,9 +62,7 @@ mobs:register_mob("mobs_animal:cow", {
if mobs:feed_tame(self, clicker, 8, true, true) then if mobs:feed_tame(self, clicker, 8, true, true) then
-- if fed 7x wheat or grass then cow can be milked again -- if fed 7x wheat or grass then cow can be milked again
if self.food and self.food > 6 then if self.food and self.food > 6 then self.gotten = false end
self.gotten = false
end
return return
end end
@ -96,10 +79,7 @@ mobs:register_mob("mobs_animal:cow", {
or item == "wooden_bucket:bucket_wood_empty" or item == "wooden_bucket:bucket_wood_empty"
or item == "bucket_wooden:bucket_empty" then or item == "bucket_wooden:bucket_empty" then
--if self.gotten == true if self.child == true then return end
if self.child == true then
return
end
if self.gotten == true then if self.gotten == true then
@ -141,14 +121,14 @@ mobs:register_mob("mobs_animal:cow", {
self.food = (self.food or 0) + 1 self.food = (self.food or 0) + 1
-- if cow replaces 8x grass then it can be milked again if self.food >= 8 then -- replace 8x grass and can be milked again
if self.food >= 8 then
self.food = 0 self.food = 0
self.gotten = false self.gotten = false
end end
end end
}) })
-- where to spawn
if not mobs.custom_spawn_animal then if not mobs.custom_spawn_animal then
@ -165,30 +145,36 @@ if not mobs.custom_spawn_animal then
}) })
end end
-- spawn egg
mobs:register_egg("mobs_animal:cow", S("Cow"), "mobs_cow_inv.png") mobs:register_egg("mobs_animal:cow", S("Cow"), "mobs_cow_inv.png")
-- old mobs mod compatibility
mobs:alias_mob("mobs:cow", "mobs_animal:cow") -- compatibility mobs:alias_mob("mobs:cow", "mobs_animal:cow")
-- bucket of milk -- bucket of milk
minetest.register_craftitem(":mobs:bucket_milk", { minetest.register_craftitem(":mobs:bucket_milk", {
description = S("Bucket of Milk"), description = S("Bucket of Milk"),
inventory_image = "mobs_bucket_milk.png", inventory_image = "mobs_bucket_milk.png",
stack_max = 1, stack_max = 1,
on_use = minetest.item_eat(8, "bucket:bucket_empty"), on_use = minetest.item_eat(8, "bucket:bucket_empty"),
groups = {food_milk = 1, flammable = 3, drink = 1} groups = {food_milk = 1, drink = 1}
}) })
-- glass of milk mobs.add_eatable("mobs:bucket_milk", 8)
-- glass of milk and recipes
minetest.register_craftitem(":mobs:glass_milk", { minetest.register_craftitem(":mobs:glass_milk", {
description = S("Glass of Milk"), description = S("Glass of Milk"),
inventory_image = "mobs_glass_milk.png", inventory_image = "mobs_glass_milk.png",
on_use = minetest.item_eat(2, "vessels:drinking_glass"), on_use = minetest.item_eat(2, "vessels:drinking_glass"),
groups = {food_milk_glass = 1, flammable = 3, vessel = 1, drink = 1} groups = {food_milk_glass = 1, vessel = 1, drink = 1}
}) })
mobs.add_eatable("mobs:glass_milk", 2)
minetest.register_craft({ minetest.register_craft({
output = "mobs:glass_milk 4", output = "mobs:glass_milk 4",
recipe = { recipe = {
@ -211,15 +197,17 @@ minetest.register_craft({
} }
}) })
-- butter and recipe
-- butter
minetest.register_craftitem(":mobs:butter", { minetest.register_craftitem(":mobs:butter", {
description = S("Butter"), description = S("Butter"),
inventory_image = "mobs_butter.png", inventory_image = "mobs_butter.png",
on_use = minetest.item_eat(1), on_use = minetest.item_eat(1),
groups = {food_butter = 1, flammable = 2} groups = {food_butter = 1}
}) })
mobs.add_eatable("mobs:butter", 1)
local salt_item = "default:sapling" -- some saplings are high in sodium local salt_item = "default:sapling" -- some saplings are high in sodium
if minetest.get_modpath("farming") and farming and farming.mod then if minetest.get_modpath("farming") and farming and farming.mod then
@ -232,14 +220,17 @@ minetest.register_craft({
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}} replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
}) })
-- cheese wedge -- cheese wedge and recipe
minetest.register_craftitem(":mobs:cheese", { minetest.register_craftitem(":mobs:cheese", {
description = S("Cheese"), description = S("Cheese"),
inventory_image = "mobs_cheese.png", inventory_image = "mobs_cheese.png",
on_use = minetest.item_eat(4), on_use = minetest.item_eat(4),
groups = {food_cheese = 1, flammable = 2} groups = {food_cheese = 1}
}) })
mobs.add_eatable("mobs:cheese", 4)
minetest.register_craft({ minetest.register_craft({
type = "cooking", type = "cooking",
output = "mobs:cheese", output = "mobs:cheese",
@ -248,13 +239,14 @@ minetest.register_craft({
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}} replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
}) })
-- cheese block -- cheese block and recipe
minetest.register_node(":mobs:cheeseblock", { minetest.register_node(":mobs:cheeseblock", {
description = S("Cheese Block"), description = S("Cheese Block"),
tiles = {"mobs_cheeseblock.png"}, tiles = {"mobs_cheeseblock.png"},
is_ground_content = false, is_ground_content = false,
groups = {oddly_breakable_by_hand = 3}, groups = {oddly_breakable_by_hand = 3},
sounds = default and default.node_sound_dirt_defaults() sounds = mobs.node_sound_dirt_defaults()
}) })
minetest.register_craft({ minetest.register_craft({
@ -271,7 +263,7 @@ minetest.register_craft({
recipe = {{"mobs:cheeseblock"}} recipe = {{"mobs:cheeseblock"}}
}) })
-- Dung (from factory's fertilizer) -- NALC: Dung (from factory's fertilizer)
minetest.register_node( minetest.register_node(
":mobs:dung", ":mobs:dung",
{ {
@ -301,6 +293,7 @@ minetest.register_craft({
}) })
-- check for either of the wood bucket mods and add compatibility -- check for either of the wood bucket mods and add compatibility
local wb = minetest.get_modpath("wooden_bucket") local wb = minetest.get_modpath("wooden_bucket")
local bw = minetest.get_modpath("bucket_wooden") local bw = minetest.get_modpath("bucket_wooden")

View File

@ -1,9 +1,11 @@
-- translation and mod path
local S = minetest.get_translator("mobs_animal")
local path = minetest.get_modpath(minetest.get_current_modname()) .. "/" local path = minetest.get_modpath(minetest.get_current_modname()) .. "/"
-- Translation support
local S = minetest.get_translator("mobs_animal")
-- Check for custom mob spawn file -- Check for custom mob spawn file
local input = io.open(path .. "spawn.lua", "r") local input = io.open(path .. "spawn.lua", "r")
if input then if input then
@ -12,8 +14,8 @@ if input then
input = nil input = nil
end end
-- helper function -- helper function
local function ddoo(mob) local function ddoo(mob)
if minetest.settings:get_bool("mobs_animal." .. mob) == false then if minetest.settings:get_bool("mobs_animal." .. mob) == false then
@ -25,6 +27,7 @@ local function ddoo(mob)
end end
-- Animals -- Animals
ddoo("chicken") -- JKmurray ddoo("chicken") -- JKmurray
ddoo("cow") -- KrupnoPavel ddoo("cow") -- KrupnoPavel
ddoo("rat") -- PilzAdam ddoo("rat") -- PilzAdam
@ -37,16 +40,16 @@ ddoo("penguin") -- D00Med
ddoo("panda") -- AspireMint ddoo("panda") -- AspireMint
dofile(path .. "goat.lua") -- NALC(sys4 fork MFF) dofile(path .. "goat.lua") -- NALC(sys4 fork MFF)
-- Load custom spawning if found
-- Load custom spawning
if mobs.custom_spawn_animal then if mobs.custom_spawn_animal then
dofile(path .. "spawn.lua") dofile(path .. "spawn.lua")
end end
-- Lucky Blocks -- Lucky Blocks
if minetest.get_modpath("lucky_block") then if minetest.get_modpath("lucky_block") then
dofile(path .. "lucky_block.lua") dofile(path .. "lucky_block.lua")
end end
print ("[MOD] Mobs Redo Animals loaded")
print ("[MOD] Mobs Animal loaded")

View File

@ -1,7 +1,10 @@
-- Translation support
local S = minetest.get_translator("mobs_animal")
local hairball = minetest.settings:get("mobs_hairball") -- translation and hairball setting
local S = minetest.get_translator("mobs_animal")
local hairball = minetest.settings:get_bool("mobs_animal.hairball") ~= false
-- custom kitty types
local kitten_types = { local kitten_types = {
@ -37,9 +40,7 @@ mobs:register_mob("mobs_animal:kitten", {
{"mobs_kitten_sandy.png"} {"mobs_kitten_sandy.png"}
}, },
makes_footstep_sound = false, makes_footstep_sound = false,
sounds = { sounds = {random = "mobs_kitten"},
random = "mobs_kitten"
},
walk_velocity = 0.6, walk_velocity = 0.6,
walk_chance = 15, walk_chance = 15,
run_velocity = 2, run_velocity = 2,
@ -53,12 +54,9 @@ mobs:register_mob("mobs_animal:kitten", {
fear_height = 3, fear_height = 3,
animation = { animation = {
speed_normal = 42, speed_normal = 42,
stand_start = 97, stand_start = 97, stand_end = 192,
stand_end = 192, walk_start = 0, walk_end = 96,
walk_start = 0, stoodup_start = 0, stoodup_end = 0,
walk_end = 96,
stoodup_start = 0,
stoodup_end = 0,
}, },
follow = { follow = {
"mobs_animal:rat", "group:food_fish_raw", "mobs_animal:rat", "group:food_fish_raw",
@ -112,19 +110,13 @@ mobs:register_mob("mobs_animal:kitten", {
do_custom = function(self, dtime) do_custom = function(self, dtime)
if hairball == "false" then if not hairball then return end
return
end
self.hairball_timer = (self.hairball_timer or 0) + dtime self.hairball_timer = (self.hairball_timer or 0) + dtime
if self.hairball_timer < 10 then if self.hairball_timer < 10 then return end
return
end
self.hairball_timer = 0 self.hairball_timer = 0
if self.child or math.random(250) > 1 then if self.child or math.random(250) > 1 then return end
return
end
local pos = self.object:get_pos() local pos = self.object:get_pos()
@ -135,15 +127,16 @@ mobs:register_mob("mobs_animal:kitten", {
end end
}) })
-- where to spawn
local spawn_on = "default:dirt_with_grass"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:grove_dirt"
end
if not mobs.custom_spawn_animal then if not mobs.custom_spawn_animal then
local spawn_on = "default:dirt_with_grass"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:grove_dirt"
end
mobs:spawn({ mobs:spawn({
name = "mobs_animal:kitten", name = "mobs_animal:kitten",
nodes = {spawn_on}, nodes = {spawn_on},
@ -157,12 +150,15 @@ if not mobs.custom_spawn_animal then
}) })
end end
-- spawn egg
mobs:register_egg("mobs_animal:kitten", S("Kitten"), "mobs_kitten_inv.png", 0) mobs:register_egg("mobs_animal:kitten", S("Kitten"), "mobs_kitten_inv.png", 0)
-- compatibility with old mobs mod
mobs:alias_mob("mobs:kitten", "mobs_animal:kitten") -- compatibility mobs:alias_mob("mobs:kitten", "mobs_animal:kitten")
-- hairball and items
local hairball_items = { local hairball_items = {
"default:stick", "default:coal_lump", "default:dry_shrub", "flowers:rose", "default:stick", "default:coal_lump", "default:dry_shrub", "flowers:rose",
@ -178,6 +174,7 @@ local hairball_items = {
minetest.register_craftitem(":mobs:hairball", { minetest.register_craftitem(":mobs:hairball", {
description = S("Hairball"), description = S("Hairball"),
inventory_image = "mobs_hairball.png", inventory_image = "mobs_hairball.png",
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
local pos = user:get_pos() local pos = user:get_pos()
@ -185,8 +182,7 @@ minetest.register_craftitem(":mobs:hairball", {
local newpos = {x = pos.x + dir.x, y = pos.y + dir.y + 1.5, z = pos.z + dir.z} 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)] local item = hairball_items[math.random(1, #hairball_items)]
if item ~= "" if item ~= "" and minetest.registered_items[item] then
and minetest.registered_items[item] then
minetest.add_item(newpos, {name = item}) minetest.add_item(newpos, {name = item})
end end

View File

@ -24,6 +24,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
Honey block, cheese and Cheese block by TenPlus1 under CC0
Chicken/Cow/Panda/Pig/Sheep sounds from freesounds.org under CC0 Chicken/Cow/Panda/Pig/Sheep sounds from freesounds.org under CC0
@ -49,7 +50,6 @@ Models/Textures/Media by Krupnov Pavel (WTFPL)
Models/Textures by Krupno Pavel (MIT) Models/Textures by Krupno Pavel (MIT)
mobs_bee.b3d (converted to .b3d by sirrobzerrone) mobs_bee.b3d (converted to .b3d by sirrobzerrone)
mobs_bee.png
mobs_pumba.b3d (converted to .b3d by sirrobzerrone) mobs_pumba.b3d (converted to .b3d by sirrobzerrone)
mobs_pumba.png mobs_pumba.png
@ -67,6 +67,7 @@ Models/Textures by JK Murray (CC0)
mobs_chick.png mobs_chick.png
Models/Textures by sirrobzerrone (CC0) Models/Textures by sirrobzerrone (CC0)
mobs_bee.png
mobs_cow.b3d mobs_cow.b3d
mobs_cow.png mobs_cow.png
mobs_cow2.png mobs_cow2.png

50
locale/mobs_animal.eo.tr Normal file
View File

@ -0,0 +1,50 @@
# textdomain: mobs_animal
Bee=Abelo
Honey=Mielo
Beehive=Abelujo
Honey Block=Miela bloko
Bunny=Kuniklo
Raw Rabbit=Kruda kuniklaĵo
Cooked Rabbit=Kuirita kuniklaĵo
Rabbit Hide=Kuniklofelo
Chicken=Koko
Chicken Egg=Koka ovo
Fried Egg=Kuirita ovo
Raw Chicken=Kruda kokaĵo
Cooked Chicken=Kuirita koko
Feather=Plumo
Cow already milked!=Bovo jam melkita!
Cow=Bovo
Bucket of Milk=Sitelo da lakto
Glass of Milk=Glaso da lakto
Butter=Butero
Cheese=Fromaĝo
Cheese Block=Fromaĝa bloko
Wooden Bucket of Milk=Ligna sitelo da lakto
Kitten=Katido
Hairball=Haraĵo
Panda=Ĉina urso
Penguin=Pingveno
Rat=Rato
Cooked Rat=Kuirita rataĵo
Black=Nigra
Blue=Blua
Brown=Bruna
Cyan=Bluverda
Dark Green=Malhela verda
Dark Grey=Malhela griza
Green=Verda
Grey=Griza
Magenta=Fuksina
Orange=Oranĝa
Pink=Rozkolora
Red=Ruĝa
Violet=Violkolora
White=Blanka
Yellow=Flava
@1 Sheep=@1 ŝafo
Raw Mutton=Kruda ŝafaĵo
Cooked Mutton=Kuirita ŝafaĵo
Warthog=Verukapro
Raw Porkchop=Kruda porkaĵo
Cooked Porkchop=Kuirita porkaĵo

View File

@ -1,3 +1,6 @@
-- add lucky blocks
lucky_block:add_blocks({ lucky_block:add_blocks({
{"spw", "mobs:sheep", 5}, {"spw", "mobs:sheep", 5},
{"spw", "mobs:rat", 5}, {"spw", "mobs:rat", 5},
@ -20,6 +23,8 @@ lucky_block:add_blocks({
{"dro", {"mobs:glass_milk"}, 5} {"dro", {"mobs:glass_milk"}, 5}
}) })
-- if nyancat found add special block
if minetest.registered_nodes["default:nyancat"] then if minetest.registered_nodes["default:nyancat"] then
lucky_block:add_blocks({ lucky_block:add_blocks({

View File

@ -1,10 +1,10 @@
-- Translation support
local S = minetest.get_translator("mobs_animal") local S = minetest.get_translator("mobs_animal")
-- Panda by AspireMint (CC BY-SA 3.0) -- Panda by AspireMint (CC BY-SA 3.0)
mobs:register_mob("mobs_animal:panda", { mobs:register_mob("mobs_animal:panda", {
stepheight = 0.6, stepheight = 0.6,
type = "animal", type = "animal",
passive = false, passive = false,
attack_type = "dogfight", attack_type = "dogfight",
@ -19,9 +19,7 @@ stepheight = 0.6,
collisionbox = {-0.4, -0.45, -0.4, 0.4, 0.45, 0.4}, collisionbox = {-0.4, -0.45, -0.4, 0.4, 0.45, 0.4},
visual = "mesh", visual = "mesh",
mesh = "mobs_panda.b3d", mesh = "mobs_panda.b3d",
textures = { textures = {{"mobs_panda.png"}},
{"mobs_panda.png"}
},
makes_footstep_sound = true, makes_footstep_sound = true,
sounds = { sounds = {
random = "mobs_panda", random = "mobs_panda",
@ -43,21 +41,13 @@ stepheight = 0.6,
fear_height = 6, fear_height = 6,
animation = { animation = {
speed_normal = 15, speed_normal = 15,
stand_start = 130, stand_start = 130, stand_end = 270,
stand_end = 270, stand1_start = 0, stand1_end = 0, -- rest
stand1_start = 0, stand2_start = 1, stand2_end = 1, -- covers eyes
stand1_end = 0, stand3_start = 2, stand3_end = 2, -- surprised
stand2_start = 1, walk_start = 10, walk_end = 70,
stand2_end = 1, run_start = 10, run_end = 70,
stand3_start = 2, punch_start = 80, punch_end = 120
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) on_rightclick = function(self, clicker)
@ -68,6 +58,7 @@ stepheight = 0.6,
end end
}) })
-- where to spawn (ethereal bamboo biome only)
if minetest.get_modpath("ethereal") and not mobs.custom_spawn_animal then if minetest.get_modpath("ethereal") and not mobs.custom_spawn_animal then
@ -84,5 +75,6 @@ if minetest.get_modpath("ethereal") and not mobs.custom_spawn_animal then
}) })
end end
-- spawn egg
mobs:register_egg("mobs_animal:panda", S("Panda"), "mobs_panda_inv.png") mobs:register_egg("mobs_animal:panda", S("Panda"), "mobs_panda_inv.png")

View File

@ -1,4 +1,4 @@
-- Translation support
local S = minetest.get_translator("mobs_animal") local S = minetest.get_translator("mobs_animal")
-- Penguin by D00Med -- Penguin by D00Med
@ -15,9 +15,7 @@ stepheight = 0.6,
visual = "mesh", visual = "mesh",
mesh = "mobs_penguin.b3d", mesh = "mobs_penguin.b3d",
visual_size = {x = 0.25, y = 0.25}, visual_size = {x = 0.25, y = 0.25},
textures = { textures = {{"mobs_penguin.png"}},
{"mobs_penguin.png"}
},
sounds = {}, sounds = {},
makes_footstep_sound = true, makes_footstep_sound = true,
walk_velocity = 1, walk_velocity = 1,
@ -34,12 +32,9 @@ stepheight = 0.6,
fear_height = 2, fear_height = 2,
animation = { animation = {
speed_normal = 15, speed_normal = 15,
stand_start = 1, stand_start = 1, stand_end = 20,
stand_end = 20, walk_start = 25, walk_end = 45,
walk_start = 25, fly_start = 75, fly_end = 95 -- swim animation
walk_end = 45,
fly_start = 75, -- swim animation
fly_end = 95
-- 50-70 is slide/water idle -- 50-70 is slide/water idle
}, },
fly_in = {"default:water_source", "default:water_flowing"}, fly_in = {"default:water_source", "default:water_flowing"},
@ -60,6 +55,7 @@ stepheight = 0.6,
end end
}) })
-- where to spawn
if not mobs.custom_spawn_animal then if not mobs.custom_spawn_animal then
@ -75,5 +71,6 @@ if not mobs.custom_spawn_animal then
}) })
end end
-- spawn egg
mobs:register_egg("mobs_animal:penguin", S("Penguin"), "mobs_penguin_inv.png") mobs:register_egg("mobs_animal:penguin", S("Penguin"), "mobs_penguin_inv.png")

21
rat.lua
View File

@ -1,10 +1,10 @@
-- Translation support
local S = minetest.get_translator("mobs_animal") local S = minetest.get_translator("mobs_animal")
-- Rat by KPavel and PilzAdam (B3D model by sirrobzeroone) -- Rat by KPavel and PilzAdam (B3D model by sirrobzeroone)
mobs:register_mob("mobs_animal:rat", { mobs:register_mob("mobs_animal:rat", {
stepheight = 0.6, stepheight = 0.6,
type = "animal", type = "animal",
passive = true, passive = true,
hp_min = 1, hp_min = 1,
@ -18,9 +18,7 @@ stepheight = 0.6,
{"mobs_rat2.png"} {"mobs_rat2.png"}
}, },
makes_footstep_sound = false, makes_footstep_sound = false,
sounds = { sounds = {random = "mobs_rat"},
random = "mobs_rat"
},
walk_velocity = 1, walk_velocity = 1,
run_velocity = 2, run_velocity = 2,
runaway = true, runaway = true,
@ -59,8 +57,8 @@ stepheight = 0.6,
]] ]]
}) })
-- example on_spawn function -- example on_spawn function
local function rat_spawn(self, pos) local function rat_spawn(self, pos)
self = self:get_luaentity() self = self:get_luaentity()
print (self.name, pos.x, pos.y, pos.z) print (self.name, pos.x, pos.y, pos.z)
@ -68,6 +66,7 @@ local function rat_spawn(self, pos)
self.health = 100 self.health = 100
end end
-- where to spawn
if not mobs.custom_spawn_animal then if not mobs.custom_spawn_animal then
@ -83,21 +82,25 @@ if not mobs.custom_spawn_animal then
}) })
end end
-- spawn egg
mobs:register_egg("mobs_animal:rat", S("Rat"), "mobs_rat_inv.png") mobs:register_egg("mobs_animal:rat", S("Rat"), "mobs_rat_inv.png")
-- compatibility with older mobs mod
mobs:alias_mob("mobs:rat", "mobs_animal:rat") -- compatibility mobs:alias_mob("mobs:rat", "mobs_animal:rat")
-- cooked rat, yummy! -- cooked rat, yummy!
minetest.register_craftitem(":mobs:rat_cooked", { minetest.register_craftitem(":mobs:rat_cooked", {
description = S("Cooked Rat"), description = S("Cooked Rat"),
inventory_image = "mobs_cooked_rat.png", inventory_image = "mobs_cooked_rat.png",
on_use = minetest.item_eat(3), on_use = minetest.item_eat(3),
groups = {food_rat = 1, flammable = 2} groups = {food_rat = 1}
}) })
mobs.add_eatable("mobs:rat_cooked", 3)
minetest.register_craft({ minetest.register_craft({
type = "cooking", type = "cooking",
output = "mobs:rat_cooked", output = "mobs:rat_cooked",

View File

@ -17,7 +17,7 @@ Wanders around eating grass/wheat and can be right-clicked with empty bucket to
--- ---
### Kitten ### 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. 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, remember to check just incase it contains an item.
--- ---
### Rat ### Rat

View File

@ -8,3 +8,4 @@ mobs_animal.penguin (Enable Penguin) bool true
mobs_animal.rat (Enable Rat) bool true mobs_animal.rat (Enable Rat) bool true
mobs_animal.sheep (Enable Sheep) bool true mobs_animal.sheep (Enable Sheep) bool true
mobs_animal.warthog (Enable Warthog) bool true mobs_animal.warthog (Enable Warthog) bool true
mobs_animal.hairball (Enable Kitten Hairball drops) bool true

110
sheep.lua
View File

@ -1,7 +1,11 @@
-- Translation support
local S = minetest.get_translator("mobs_animal")
-- translation and localize function
local S = minetest.get_translator("mobs_animal")
local random = math.random local random = math.random
-- sheep colour table
local all_colours = { local all_colours = {
{"black", S("Black"), "#212121b0"}, -- referenced down in mobs:spawn {"black", S("Black"), "#212121b0"}, -- referenced down in mobs:spawn
{"blue", S("Blue"), "#015dbb70"}, {"blue", S("Blue"), "#015dbb70"},
@ -20,7 +24,6 @@ local all_colours = {
{"yellow", S("Yellow"), "#fff80070"} {"yellow", S("Yellow"), "#fff80070"}
} }
-- Sheep by PilzAdam/K Pavel, texture converted to minetest by AMMOnym from Summerfield pack -- Sheep by PilzAdam/K Pavel, texture converted to minetest by AMMOnym from Summerfield pack
for _, col in ipairs(all_colours) do for _, col in ipairs(all_colours) do
@ -87,9 +90,7 @@ for _, col in ipairs(all_colours) do
}, },
gotten_texture = {"mobs_sheep_base.png^mobs_sheep_shaved.png"}, gotten_texture = {"mobs_sheep_base.png^mobs_sheep_shaved.png"},
makes_footstep_sound = true, makes_footstep_sound = true,
sounds = { sounds = {random = "mobs_sheep"},
random = "mobs_sheep"
},
walk_velocity = 1, walk_velocity = 1,
run_velocity = 2, run_velocity = 2,
runaway = true, runaway = true,
@ -101,17 +102,13 @@ for _, col in ipairs(all_colours) do
lava_damage = 5, lava_damage = 5,
light_damage = 0, light_damage = 0,
animation = { animation = {
speed_normal = 15, speed_normal = 15, speed_run = 15,
speed_run = 15, stand_start = 0, stand_end = 80,
stand_start = 0, walk_start = 81, walk_end = 100,
stand_end = 80, -- no death animation so we'll re-use 2 standing frames at a speed of 1 fps
walk_start = 81, -- and have mob rotate while dying.
walk_end = 100, die_start = 1, die_end = 2, die_speed = 1,
die_start = 1, -- we dont have a specific death animation so we will die_loop = false, die_rotate = true
die_end = 2, -- re-use 2 standing frames at a speed of 1 fps and
die_speed = 1, -- have mob rotate when dying.
die_loop = false,
die_rotate = true
}, },
follow = { follow = {
"farming:wheat", "default:grass_1", "farming:barley", "farming:wheat", "default:grass_1", "farming:barley",
@ -183,24 +180,17 @@ for _, col in ipairs(all_colours) do
mob:set_properties({ mob:set_properties({
textures = {textures}, textures = {textures},
visual_size = { visual_size = {
x = parent1.base_size.x * .5, x = parent1.base_size.x * .5, y = parent1.base_size.y * .5
y = parent1.base_size.y * .5
}, },
collisionbox = { collisionbox = {
parent1.base_colbox[1] * .5, parent1.base_colbox[1] * .5, parent1.base_colbox[2] * .5,
parent1.base_colbox[2] * .5, parent1.base_colbox[3] * .5, parent1.base_colbox[4] * .5,
parent1.base_colbox[3] * .5, parent1.base_colbox[5] * .5, parent1.base_colbox[6] * .5
parent1.base_colbox[4] * .5,
parent1.base_colbox[5] * .5,
parent1.base_colbox[6] * .5
}, },
selectionbox = { selectionbox = {
parent1.base_selbox[1] * .5, parent1.base_selbox[1] * .5, parent1.base_selbox[2] * .5,
parent1.base_selbox[2] * .5, parent1.base_selbox[3] * .5, parent1.base_selbox[4] * .5,
parent1.base_selbox[3] * .5, parent1.base_selbox[5] * .5, parent1.base_selbox[6] * .5
parent1.base_selbox[4] * .5,
parent1.base_selbox[5] * .5,
parent1.base_selbox[6] * .5
} }
}) })
@ -214,6 +204,17 @@ for _, col in ipairs(all_colours) do
return false return false
end, end,
-- fix any issue with horns by re-checking
on_spawn = function(self)
if self.child then return end -- baby sheep dont have horns
local textures = horn_texture_sel(self.attribute_horns, self.gotten)
self.object:set_properties({textures = {textures}})
self.base_texture = {textures}
end,
on_grown = function(self) on_grown = function(self)
-- add the horns if we have horns when fully grown -- add the horns if we have horns when fully grown
@ -268,10 +269,8 @@ for _, col in ipairs(all_colours) do
-- are we giving a haircut> -- are we giving a haircut>
if itemname == "mobs:shears" then if itemname == "mobs:shears" then
if self.gotten ~= false if self.gotten ~= false or self.child ~= false
or self.child ~= false or name ~= self.owner or not minetest.get_modpath("wool") then
or name ~= self.owner
or not minetest.get_modpath("wool") then
return return
end end
@ -286,10 +285,7 @@ for _, col in ipairs(all_colours) do
if obj then if obj then
obj:set_velocity({ obj:set_velocity({
x = random(-1, 1), x = random(-1, 1), y = 5, z = random(-1, 1)})
y = 5,
z = random(-1, 1)
})
end end
item:add_wear(650) -- 100 uses item:add_wear(650) -- 100 uses
@ -307,18 +303,15 @@ for _, col in ipairs(all_colours) do
-- are we coloring? -- are we coloring?
if itemname:find("dye:") then if itemname:find("dye:") then
if self.gotten == false if self.gotten == false and self.child == false
and self.child == false and self.tamed == true and name == self.owner then
and self.tamed == true
and name == self.owner then
local colr = string.split(itemname, ":")[2] local colr = string.split(itemname, ":")[2]
for _,c in pairs(all_colours) do for _,c in pairs(all_colours) do
-- only dye if colour option available and sheep not same colour -- only dye if colour option available and sheep not same colour
if c[1] == colr if c[1] == colr and self.name ~= "mobs_animal:sheep_" .. colr then
and self.name ~= "mobs_animal:sheep_" .. colr then
local pos = self.object:get_pos() local pos = self.object:get_pos()
@ -328,9 +321,11 @@ for _, col in ipairs(all_colours) do
if ent then if ent then
local prop = self.object:get_properties()
-- add old sheep attributes -- add old sheep attributes
ent.attribute_horns = self.attribute_horns ent.attribute_horns = self.attribute_horns
ent.nametag = self.nametag ent._nametag = prop.nametag
ent.owner = name ent.owner = name
ent.tamed = true ent.tamed = true
ent.protected = self.protected ent.protected = self.protected
@ -343,8 +338,7 @@ for _, col in ipairs(all_colours) do
ent.base_texture = {textures} ent.base_texture = {textures}
ent.object:set_properties({ ent.object:set_properties({
textures = {textures}, textures = {textures}
nametag = self.nametag
}) })
-- remove old sheep -- remove old sheep
@ -381,6 +375,7 @@ for _, col in ipairs(all_colours) do
mobs:alias_mob("mobs:sheep_" .. col[1], "mobs_animal:sheep_" .. col[1]) mobs:alias_mob("mobs:sheep_" .. col[1], "mobs_animal:sheep_" .. col[1])
end end
-- where to spawn
if not mobs.custom_spawn_animal then if not mobs.custom_spawn_animal then
@ -445,8 +440,8 @@ if not mobs.custom_spawn_animal then
local entity = mobs:add_mob(pos, local entity = mobs:add_mob(pos,
{name = "mobs_animal:sheep_" .. types, child = lamb}) {name = "mobs_animal:sheep_" .. types, child = lamb})
-- nil check -- nil check
if not entity then return end if not entity then return end
if not lamb then if not lamb then
-- Set horns attribute, lower height will be rarer. -- Set horns attribute, lower height will be rarer.
@ -498,25 +493,32 @@ if not entity then return end
}) })
end end
-- compatibility with older mobs mod
mobs:alias_mob("mobs:sheep", "mobs_animal:sheep_white") -- compatibility mobs:alias_mob("mobs:sheep", "mobs_animal:sheep_white")
-- raw mutton -- raw mutton
minetest.register_craftitem(":mobs:mutton_raw", { minetest.register_craftitem(":mobs:mutton_raw", {
description = S("Raw Mutton"), description = S("Raw Mutton"),
inventory_image = "mobs_mutton_raw.png", inventory_image = "mobs_mutton_raw.png",
on_use = minetest.item_eat(2), on_use = minetest.item_eat(2),
groups = {food_meat_raw = 1, food_mutton_raw = 1, flammable = 2} groups = {food_meat_raw = 1, food_mutton_raw = 1}
}) })
-- cooked mutton mobs.add_eatable("mobs:mutton_raw", 2)
-- cooked mutton and recipe
minetest.register_craftitem(":mobs:mutton_cooked", { minetest.register_craftitem(":mobs:mutton_cooked", {
description = S("Cooked Mutton"), description = S("Cooked Mutton"),
inventory_image = "mobs_mutton_cooked.png", inventory_image = "mobs_mutton_cooked.png",
on_use = minetest.item_eat(6), on_use = minetest.item_eat(6),
groups = {food_meat = 1, food_mutton = 1, flammable = 2} groups = {food_meat = 1, food_mutton = 1}
}) })
mobs.add_eatable("mobs:mutton_cooked", 6)
minetest.register_craft({ minetest.register_craft({
type = "cooking", type = "cooking",
output = "mobs:mutton_cooked", output = "mobs:mutton_cooked",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 B

After

Width:  |  Height:  |  Size: 181 B

View File

@ -1,4 +1,4 @@
-- Translation support
local S = minetest.get_translator("mobs_animal") local S = minetest.get_translator("mobs_animal")
-- Warthog originally by KrupnoPavel, B3D model by sirrobzeroone -- Warthog originally by KrupnoPavel, B3D model by sirrobzeroone
@ -19,9 +19,7 @@ mobs:register_mob("mobs_animal:pumba", {
collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.95, 0.4}, collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.95, 0.4},
visual = "mesh", visual = "mesh",
mesh = "mobs_pumba.b3d", mesh = "mobs_pumba.b3d",
textures = { textures = {{"mobs_pumba.png"}},
{"mobs_pumba.png"}
},
makes_footstep_sound = true, makes_footstep_sound = true,
sounds = { sounds = {
random = "mobs_pig", random = "mobs_pig",
@ -44,18 +42,12 @@ mobs:register_mob("mobs_animal:pumba", {
fear_height = 2, fear_height = 2,
animation = { animation = {
speed_normal = 15, speed_normal = 15,
stand_start = 25, stand_start = 25, stand_end = 55,
stand_end = 55, walk_start = 70, walk_end = 100,
walk_start = 70, punch_start = 70, punch_end = 100,
walk_end = 100, -- no specific dying animation, so use 2 frames at 1fps and rotate
punch_start = 70, die_start = 1, die_end = 2, die_speed = 1,
punch_end = 100, die_loop = false, die_rotate = true
die_start = 1, -- we dont have a specific death animation so we will
die_end = 2, -- re-use 2 standing frames at a speed of 1 fps and
die_speed = 1, -- have mob rotate when dying.
die_loop = false,
die_rotate = true
}, },
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
@ -66,22 +58,18 @@ mobs:register_mob("mobs_animal:pumba", {
end end
}) })
-- where to spawn
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
if not mobs.custom_spawn_animal then if not mobs.custom_spawn_animal then
local spawn_on = {"default:dirt_with_grass", "default:dry_dirt_with_dry_grass"}
local spawn_by = {"group:grass"}
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:mushroom_dirt"}
spawn_by = {"flowers:mushroom_brown", "flowers:mushroom_red"}
end
mobs:spawn({ mobs:spawn({
name = "mobs_animal:pumba", name = "mobs_animal:pumba",
nodes = spawn_on, nodes = spawn_on,
@ -95,30 +83,36 @@ if not mobs.custom_spawn_animal then
}) })
end end
-- spawn egg -- spawn egg
mobs:register_egg("mobs_animal:pumba", S("Warthog"), "mobs_pumba_inv.png") mobs:register_egg("mobs_animal:pumba", S("Warthog"), "mobs_pumba_inv.png")
-- old mobs mod compatibility
mobs:alias_mob("mobs:pumba", "mobs_animal:pumba") -- compatibility mobs:alias_mob("mobs:pumba", "mobs_animal:pumba")
-- raw porkchop -- raw porkchop
minetest.register_craftitem(":mobs:pork_raw", { minetest.register_craftitem(":mobs:pork_raw", {
description = S("Raw Porkchop"), description = S("Raw Porkchop"),
inventory_image = "mobs_pork_raw.png", inventory_image = "mobs_pork_raw.png",
on_use = minetest.item_eat(4), on_use = minetest.item_eat(4),
groups = {food_meat_raw = 1, food_pork_raw = 1, flammable = 2} groups = {food_meat_raw = 1, food_pork_raw = 1}
}) })
-- cooked porkchop mobs.add_eatable("mobs:pork_raw", 4)
-- cooked porkchop and recipe
minetest.register_craftitem(":mobs:pork_cooked", { minetest.register_craftitem(":mobs:pork_cooked", {
description = S("Cooked Porkchop"), description = S("Cooked Porkchop"),
inventory_image = "mobs_pork_cooked.png", inventory_image = "mobs_pork_cooked.png",
on_use = minetest.item_eat(8), on_use = minetest.item_eat(8),
groups = {food_meat = 1, food_pork = 1, flammable = 2} groups = {food_meat = 1, food_pork = 1}
}) })
mobs.add_eatable("mobs:pork_cooked", 8)
minetest.register_craft({ minetest.register_craft({
type = "cooking", type = "cooking",
output = "mobs:pork_cooked", output = "mobs:pork_cooked",