@ -0,0 +1,185 @@ |
|||
|
|||
-- Bee by KrupnoPavel |
|||
|
|||
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.2, 0.2}, |
|||
visual = "mesh", |
|||
mesh = "mobs_bee.x", |
|||
textures = { |
|||
{"mobs_bee.png"}, |
|||
}, |
|||
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 = 2, |
|||
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, 25, 80, 0, true, nil) |
|||
end, |
|||
}) |
|||
|
|||
mobs:register_spawn("mobs_animal:bee", {"group:flower"}, 20, 10, 9000, 1, 31000, true) |
|||
|
|||
mobs:register_egg("mobs_animal:bee", "Bee", "mobs_bee_inv.png", 0) |
|||
|
|||
minetest.register_alias("mobs:bee", "mobs_animal:bee") |
|||
|
|||
-- honey |
|||
minetest.register_craftitem(":mobs:honey", { |
|||
description = "Honey", |
|||
inventory_image = "mobs_honey_inv.png", |
|||
on_use = minetest.item_eat(6), |
|||
}) |
|||
|
|||
-- beehive (when placed spawns bee) |
|||
minetest.register_node(":mobs:beehive", { |
|||
description = "Beehive", |
|||
drawtype = "plantlike", |
|||
visual_scale = 1.0, |
|||
tiles = {"mobs_beehive.png"}, |
|||
inventory_image = "mobs_beehive.png", |
|||
paramtype = "light", |
|||
sunlight_propagates = true, |
|||
walkable = true, |
|||
groups = {oddly_breakable_by_hand = 3, flammable = 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:is_player() then |
|||
|
|||
minetest.set_node(pos, {name = "mobs:beehive", param2 = 1}) |
|||
|
|||
if math.random(1, 4) == 1 then |
|||
minetest.add_entity(pos, "mobs: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 = "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 = 6, |
|||
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 = minetest.get_meta(pos):get_inventory() |
|||
local honey = inv:get_stack("beehive", 1):get_count() |
|||
|
|||
-- is hive full? |
|||
if honey > 19 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 |
|||
}) |
@ -0,0 +1,86 @@ |
|||
|
|||
-- Bunny by ExeterDad |
|||
|
|||
mobs:register_mob("mobs_animal:bunny", { |
|||
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, |
|||
jump = true, |
|||
drops = { |
|||
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1}, |
|||
}, |
|||
water_damage = 1, |
|||
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"}, |
|||
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 |
|||
|
|||
-- Monty Python tribute |
|||
local item = clicker:get_wielded_item() |
|||
|
|||
if item:get_name() == "mobs:lava_orb" then |
|||
|
|||
if not minetest.setting_getbool("creative_mode") then |
|||
item:take_item() |
|||
clicker:set_wielded_item(item) |
|||
end |
|||
|
|||
self.object:set_properties({ |
|||
textures = {"mobs_bunny_evil.png"}, |
|||
}) |
|||
|
|||
self.type = "monster" |
|||
self.object:set_hp(20) |
|||
|
|||
return |
|||
end |
|||
|
|||
mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) |
|||
end, |
|||
|
|||
attack_type = "dogfight", |
|||
damage = 5, |
|||
}) |
|||
|
|||
mobs:register_spawn("mobs_animal:bunny", |
|||
{"default:dirt_with_grass", "ethereal:prairie_dirt"}, 20, 10, 15000, 2, 31000, true) |
|||
|
|||
mobs:register_egg("mobs_animal:bunny", "Bunny", "mobs_bunny_inv.png", 0) |
|||
|
|||
minetest.register_alias("mobs:bunny", "mobs_animal:bunny") |
@ -0,0 +1,254 @@ |
|||
|
|||
-- Chicken by JK Murray |
|||
|
|||
mobs:register_mob("mobs_animal:chicken", { |
|||
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.x", |
|||
-- seems a lot of textures but this fixes the problem with the model |
|||
textures = { |
|||
{"mobs_chicken.png", "mobs_chicken.png", "mobs_chicken.png", "mobs_chicken.png", |
|||
"mobs_chicken.png", "mobs_chicken.png", "mobs_chicken.png", "mobs_chicken.png", "mobs_chicken.png"}, |
|||
{"mobs_chicken_black.png", "mobs_chicken_black.png", "mobs_chicken_black.png", "mobs_chicken_black.png", |
|||
"mobs_chicken_black.png", "mobs_chicken_black.png", "mobs_chicken_black.png", "mobs_chicken_black.png", "mobs_chicken_black.png"}, |
|||
}, |
|||
child_texture = { |
|||
{"mobs_chick.png", "mobs_chick.png", "mobs_chick.png", "mobs_chick.png", |
|||
"mobs_chick.png", "mobs_chick.png", "mobs_chick.png", "mobs_chick.png", "mobs_chick.png"}, |
|||
}, |
|||
makes_footstep_sound = true, |
|||
sounds = { |
|||
random = "mobs_chicken", |
|||
}, |
|||
walk_velocity = 1, |
|||
run_velocity = 3, |
|||
runaway = true, |
|||
jump = true, |
|||
drops = { |
|||
{name = "mobs:chicken_raw", chance = 1, min = 2, 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 = 0, |
|||
stand_end = 1, -- 20 |
|||
walk_start = 20, |
|||
walk_end = 40, |
|||
}, |
|||
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 |
|||
|
|||
mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) |
|||
end, |
|||
|
|||
do_custom = function(self) |
|||
|
|||
if not self.child |
|||
and math.random(1, 500) == 1 then |
|||
|
|||
local pos = self.object:getpos() |
|||
|
|||
minetest.add_item(pos, "mobs:egg") |
|||
|
|||
minetest.sound_play("default_place_node_hard", { |
|||
pos = pos, |
|||
gain = 1.0, |
|||
max_hear_distance = 5, |
|||
}) |
|||
end |
|||
end, |
|||
}) |
|||
|
|||
mobs:register_spawn("mobs_animal:chicken", |
|||
{"default:dirt_with_grass", "ethereal:bamboo_dirt"}, 20, 10, 15000, 1, 31000, true) |
|||
|
|||
mobs:register_egg("mobs_animal:chicken", "Chicken", "mobs_chicken_inv.png", 0) |
|||
|
|||
minetest.register_alias("mobs:chicken", "mobs_animal:chicken") |
|||
|
|||
-- 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(self.object, 1.0, { |
|||
full_punch_interval = 1.0, |
|||
damage_groups = {fleshy = 1}, |
|||
}, nil) |
|||
end, |
|||
|
|||
hit_mob = function(self, player) |
|||
player:punch(self.object, 1.0, { |
|||
full_punch_interval = 1.0, |
|||
damage_groups = {fleshy = 1}, |
|||
}, nil) |
|||
end, |
|||
|
|||
hit_node = function(self, pos, node) |
|||
|
|||
local num = math.random(1, 10) |
|||
|
|||
if num == 1 then |
|||
|
|||
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 |
|||
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:getpos() |
|||
|
|||
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 = "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 = {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 = "Fried Egg", |
|||
inventory_image = "mobs_chicken_egg_fried.png", |
|||
on_use = minetest.item_eat(2), |
|||
}) |
|||
|
|||
minetest.register_craft({ |
|||
type = "cooking", |
|||
recipe = "mobs:egg", |
|||
output = "mobs:chicken_egg_fried", |
|||
}) |
|||
|
|||
-- raw chicken |
|||
minetest.register_craftitem(":mobs:chicken_raw", { |
|||
description = "Raw Chicken", |
|||
inventory_image = "mobs_chicken_raw.png", |
|||
on_use = minetest.item_eat(2), |
|||
}) |
|||
|
|||
-- cooked chicken |
|||
minetest.register_craftitem(":mobs:chicken_cooked", { |
|||
description = "Cooked Chicken", |
|||
inventory_image = "mobs_chicken_cooked.png", |
|||
on_use = minetest.item_eat(6), |
|||
}) |
|||
|
|||
minetest.register_craft({ |
|||
type = "cooking", |
|||
recipe = "mobs:chicken_raw", |
|||
output = "mobs:chicken_cooked", |
|||
}) |
@ -0,0 +1,149 @@ |
|||
|
|||
-- Cow by Krupnovpavel (additional texture by JurajVajda) |
|||
|
|||
mobs:register_mob("mobs_animal:cow", { |
|||
type = "animal", |
|||
passive = false, |
|||
attack_type = "dogfight", |
|||
reach = 2, |
|||
damage = 4, |
|||
hp_min = 5, |
|||
hp_max = 20, |
|||
armor = 200, |
|||
collisionbox = {-0.4, -0.01, -0.4, 0.4, 1, 0.4}, |
|||
visual = "mesh", |
|||
mesh = "mobs_cow.x", |
|||
textures = { |
|||
{"mobs_cow.png"}, |
|||
{"mobs_cow2.png"}, |
|||
}, |
|||
makes_footstep_sound = true, |
|||
sounds = { |
|||
random = "mobs_cow", |
|||
}, |
|||
walk_velocity = 1, |
|||
run_velocity = 2, |
|||
jump = true, |
|||
drops = { |
|||
{name = "mobs:meat_raw", chance = 1, min = 1, max = 3}, |
|||
{name = "mobs:leather", chance = 1, min = 1, max = 2}, |
|||
}, |
|||
water_damage = 1, |
|||
lava_damage = 5, |
|||
light_damage = 0, |
|||
animation = { |
|||
speed_normal = 15, |
|||
speed_run = 15, |
|||
stand_start = 0, |
|||
stand_end = 30, |
|||
walk_start = 35, |
|||
walk_end = 65, |
|||
run_start = 105, |
|||
run_end = 135, |
|||
punch_start = 70, |
|||
punch_end = 100, |
|||
}, |
|||
follow = "farming:wheat", |
|||
view_range = 7, |
|||
replace_rate = 10, |
|||
replace_what = {"default:grass_3", "default:grass_4", "default:grass_5", "farming:wheat_8"}, |
|||
replace_with = "air", |
|||
fear_height = 2, |
|||
on_rightclick = function(self, clicker) |
|||
|
|||
-- feed or tame |
|||
if mobs:feed_tame(self, clicker, 8, true, true) then |
|||
return |
|||
end |
|||
|
|||
local tool = clicker:get_wielded_item() |
|||
|
|||
-- 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(clicker:get_player_name(), |
|||
"Cow already milked!") |
|||
return |
|||
end |
|||
|
|||
local inv = clicker:get_inventory() |
|||
|
|||
inv:remove_item("main", "bucket:bucket_empty") |
|||
|
|||
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:getpos() |
|||
pos.y = pos.y + 0.5 |
|||
minetest.add_item(pos, {name = "mobs:bucket_milk"}) |
|||
end |
|||
|
|||
self.gotten = true -- milked |
|||
|
|||
return |
|||
end |
|||
|
|||
mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) |
|||
end, |
|||
}) |
|||
|
|||
mobs:register_spawn("mobs_animal:cow", |
|||
{"default:dirt_with_grass", "ethereal:green_dirt"}, 20, 10, 15000, 1, 31000, true) |
|||
|
|||
mobs:register_egg("mobs_animal:cow", "Cow", "default_grass.png", 1) |
|||
|
|||
minetest.register_alias("mobs:cow", "mobs_animal:cow") |
|||
|
|||
-- bucket of milk |
|||
minetest.register_craftitem(":mobs:bucket_milk", { |
|||
description = "Bucket of Milk", |
|||
inventory_image = "mobs_bucket_milk.png", |
|||
stack_max = 1, |
|||
on_use = minetest.item_eat(8, 'bucket:bucket_empty'), |
|||
}) |
|||
|
|||
-- cheese wedge |
|||
minetest.register_craftitem(":mobs:cheese", { |
|||
description = "Cheese", |
|||
inventory_image = "mobs_cheese.png", |
|||
on_use = minetest.item_eat(4), |
|||
}) |
|||
|
|||
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 = "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'}, |
|||
} |
|||
}) |
@ -0,0 +1,2 @@ |
|||
default |
|||
mobs |
@ -0,0 +1 @@ |
|||
Adds farm animals. |
@ -0,0 +1,15 @@ |
|||
|
|||
local path = minetest.get_modpath("mobs_animal") |
|||
|
|||
-- 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 |
|||
|
|||
print ("[MOD] Mobs Redo 'Animals' loaded") |
@ -0,0 +1,58 @@ |
|||
|
|||
-- Kitten by Jordach / BFD |
|||
|
|||
mobs:register_mob("mobs_animal:kitten", { |
|||
type = "animal", |
|||
passive = true, |
|||
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, |
|||
run_velocity = 2, |
|||
runaway = true, |
|||
jump = false, |
|||
drops = { |
|||
{name = "farming:string", chance = 1, min = 1, max = 1}, |
|||
}, |
|||
water_damage = 1, |
|||
lava_damage = 5, |
|||
fear_height = 3, |
|||
animation = { |
|||
speed_normal = 42, |
|||
stand_start = 97, |
|||
stand_end = 192, |
|||
walk_start = 0, |
|||
walk_end = 96, |
|||
}, |
|||
follow = {"mobs: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 |
|||
|
|||
mobs:capture_mob(self, clicker, 50, 50, 90, false, nil) |
|||
end |
|||
}) |
|||
|
|||
mobs:register_spawn("mobs_animal:kitten", |
|||
{"default:dirt_with_grass", "ethereal:grove_dirt"}, 20, 12, 22000, 1, 31000, true) |
|||
|
|||
mobs:register_egg("mobs_animal:kitten", "Kitten", "mobs_kitten_inv.png", 0) |
|||
|
|||
minetest.register_alias("mobs:kitten", "mobs_animal:kitten") |
@ -0,0 +1 @@ |
|||
name = mobs_animal |
@ -0,0 +1,58 @@ |
|||
|
|||
-- Rat by PilzAdam |
|||
|
|||
mobs:register_mob("mobs_animal:rat", { |
|||
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, 25, 80, 0, true, nil) |
|||
end, |
|||
--[[ |
|||
do_custom = function(self) |
|||
local pos = self.object:getpos() |
|||
print("rat pos", pos.x, pos.y, pos.z) |
|||
end, |
|||
--]] |
|||
}) |
|||
|
|||
mobs:register_spawn("mobs_animal:rat", {"default:stone"}, 20, 5, 15000, 2, 0) |
|||
|
|||
mobs:register_egg("mobs_animal:rat", "Rat", "mobs_rat_inventory.png", 0) |
|||
|
|||
minetest.register_alias("mobs:rat", "mobs_animal:rat") |
|||
|
|||
-- cooked rat, yummy! |
|||
minetest.register_craftitem(":mobs:rat_cooked", { |
|||
description = "Cooked Rat", |
|||
inventory_image = "mobs_cooked_rat.png", |
|||
on_use = minetest.item_eat(3), |
|||
}) |
|||
|
|||
minetest.register_craft({ |
|||
type = "cooking", |
|||
output = "mobs:rat_cooked", |
|||
recipe = "mobs:rat", |
|||
cooktime = 5, |
|||
}) |
After Width: | Height: | Size: 33 KiB |
@ -0,0 +1,194 @@ |
|||
|
|||
local all_colours = { |
|||
{"black", "Black", "#000000b0"}, |
|||
{"blue", "Blue", "#015dbb70"}, |
|||
{"brown", "Brown", "#663300a0"}, |
|||
{"cyan", "Cyan", "#01ffd870"}, |
|||
{"dark_green", "Dark Green", "#005b0770"}, |
|||
{"dark_grey", "Dark Grey", "#303030b0"}, |
|||
{"green", "Green", "#61ff0170"}, |
|||
{"grey", "Grey", "#5b5b5bb0"}, |
|||
{"magenta", "Magenta", "#ff05bb70"}, |
|||
{"orange", "Orange", "#ff840170"}, |
|||
{"pink", "Pink", "#ff65b570"}, |
|||
{"red", "Red", "#ff0000a0"}, |
|||
{"violet", "Violet", "#2000c970"}, |
|||
{"white", "White", "#abababc0"}, |
|||
{"yellow", "Yellow", "#e3ff0070"}, |
|||
} |
|||
|
|||
-- Sheep by PilzAdam, texture converted to minetest by AMMOnym from Summerfield pack |
|||
|
|||
for _, col in pairs(all_colours) do |
|||
|
|||
mobs:register_mob("mobs_animal:sheep_"..col[1], { |
|||
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, |
|||
drops = { |
|||
{name = "mobs:meat_raw", chance = 1, min = 1, max = 2}, |
|||
--{name = "wool:"..col[1], chance = 1, min = 1, max = 1}, |
|||
}, |
|||
water_damage = 1, |
|||
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_5"}, |
|||
view_range = 8, |
|||
replace_rate = 10, |
|||
replace_what = {"default:grass_3", "default:grass_4", "default:grass_5", "farming:wheat_8"}, |
|||
replace_with = "air", |
|||
replace_offset = -1, |
|||
fear_height = 3, |
|||
|
|||
on_rightclick = function(self, clicker) |
|||
|
|||
--are we feeding? |
|||
if mobs:feed_tame(self, clicker, 8, true, true) then |
|||
|
|||
--if full grow fuzz |
|||
if self.gotten == false then |
|||
|
|||
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() |
|||
|
|||
--are we giving a haircut> |
|||
if itemname == "mobs:shears" then |
|||
|
|||
if self.gotten ~= false |
|||
and self.child ~= false |
|||
and not minetest.get_modpath("wool") then |
|||
return |
|||
end |
|||
|
|||
self.gotten = true -- shaved |
|||
|
|||
local obj = minetest.add_item( |
|||
self.object:getpos(), |
|||
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 |
|||
|
|||
local name = clicker:get_player_name() |
|||
|
|||
--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:getpos() |
|||
|
|||
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 minetest.setting_getbool("creative_mode") then |
|||
item:take_item() |
|||
clicker:set_wielded_item(item) |
|||
end |
|||
|
|||
break |
|||
end |
|||
end |
|||
end |
|||
|
|||
return |
|||
end |
|||
|
|||
--are we capturing? |
|||
mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) |
|||
end |
|||
}) |
|||
|
|||
mobs:register_egg("mobs_animal:sheep_"..col[1], col[2] .. " Sheep", "wool_"..col[1]..".png", 1) |
|||
|
|||
minetest.register_alias("mobs:sheep_"..col[1], "mobs_animal:sheep_"..col[1]) |
|||
|
|||
end |
|||
|
|||
mobs:register_spawn("mobs_animal:sheep_white", |
|||
{"default:dirt_with_grass", "ethereal:green_dirt"}, 20, 10, 15000, 1, 31000, true) |
|||
|
|||
-- compatibility (item and entity) |
|||
minetest.register_alias("mobs:sheep", "mobs:sheep_white") |
|||
|
|||
--[[ |
|||
-- replace old sheep entity with new white sheep |
|||
minetest.register_entity("mobs:sheep", { |
|||
|
|||
on_activate = function(self, staticdata, dtime_s) |
|||
|
|||
self.object:remove() |
|||
|
|||
minetest.add_entity(self.object:getpos(), "mobs_animal:sheep_white") |
|||
end |
|||
}) |
|||
]] |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 934 B |
After Width: | Height: | Size: 513 B |
After Width: | Height: | Size: 241 B |
After Width: | Height: | Size: 999 B |
After Width: | Height: | Size: 809 B |
After Width: | Height: | Size: 771 B |
After Width: | Height: | Size: 466 B |
After Width: | Height: | Size: 809 B |
After Width: | Height: | Size: 247 B |
After Width: | Height: | Size: 609 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 216 B |
After Width: | Height: | Size: 166 B |
After Width: | Height: | Size: 369 B |
After Width: | Height: | Size: 218 B |
After Width: | Height: | Size: 239 B |
After Width: | Height: | Size: 948 B |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 272 B |
After Width: | Height: | Size: 301 B |
After Width: | Height: | Size: 440 B |
After Width: | Height: | Size: 377 B |
After Width: | Height: | Size: 404 B |
After Width: | Height: | Size: 456 B |
After Width: | Height: | Size: 416 B |
After Width: | Height: | Size: 224 B |
After Width: | Height: | Size: 198 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 834 B |
After Width: | Height: | Size: 565 B |
After Width: | Height: | Size: 635 B |
After Width: | Height: | Size: 983 B |
After Width: | Height: | Size: 1.0 KiB |
@ -0,0 +1,82 @@ |
|||
|
|||
-- Warthog by KrupnoPavel |
|||
|
|||
mobs:register_mob("mobs_animal:pumba", { |
|||
type = "animal", |
|||
passive = false, |
|||
attack_type = "dogfight", |
|||
group_attack = true, |
|||
reach = 2, |
|||
damage = 2, |
|||
hp_min = 5, |
|||
hp_max = 15, |
|||
armor = 200, |
|||
collisionbox = {-0.4, -0.01, -0.4, 0.4, 1, 0.4}, |
|||
visual = "mesh", |
|||
mesh = "mobs_pumba.x", |
|||
textures = { |
|||
{"mobs_pumba.png"}, |
|||
}, |
|||
makes_footstep_sound = true, |
|||
sounds = { |
|||
random = "mobs_pig", |
|||
attack = "mobs_pig_angry", |
|||
}, |
|||
walk_velocity = 2, |
|||
run_velocity = 3, |
|||
jump = true, |
|||
follow = {"default:apple", "farming:potato"}, |
|||
view_range = 10, |
|||
drops = { |
|||
{name = "mobs:pork_raw", chance = 1, min = 1, max = 3}, |
|||
}, |
|||
water_damage = 1, |
|||
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 |
|||
|
|||
mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) |
|||
end, |
|||
}) |
|||
|
|||
mobs:register_spawn("mobs_animal:pumba", |
|||
{"ethereal:mushroom_dirt", "default:dirt_with_dry_grass"}, 20, 10, 15000, 1, 31000, true) |
|||
|
|||
mobs:register_egg("mobs_animal:pumba", "Warthog", "wool_pink.png", 1) |
|||
|
|||
minetest.register_alias("mobs:pumba", "mobs_animal:pumba") |
|||
|
|||
-- raw porkchop |
|||
minetest.register_craftitem(":mobs:pork_raw", { |
|||
description = "Raw Porkchop", |
|||
inventory_image = "mobs_pork_raw.png", |
|||
on_use = minetest.item_eat(4), |
|||
}) |
|||
|
|||
-- cooked porkchop |
|||
minetest.register_craftitem(":mobs:pork_cooked", { |
|||
description = "Cooked Porkchop", |
|||
inventory_image = "mobs_pork_cooked.png", |
|||
on_use = minetest.item_eat(8), |
|||
}) |
|||
|
|||
minetest.register_craft({ |
|||
type = "cooking", |
|||
output = "mobs:pork_cooked", |
|||
recipe = "mobs:pork_raw", |
|||
cooktime = 5, |
|||
}) |