123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- local S = mobs.intllib
- -- Duck by JK Murray and Tirifto
- mobs:register_mob("mobs_animal:duck", {
- type = "animal",
- passive = true,
- hp_min = 10,
- hp_max = 40,
- 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_duck_drake.png", "mobs_duck_drake.png", "mobs_duck_drake.png", "mobs_duck_drake.png",
- "mobs_duck_drake.png", "mobs_duck_drake.png", "mobs_duck_drake.png", "mobs_duck_drake.png",
- "mobs_duck_drake.png"},
- {"mobs_duck_female.png", "mobs_duck_female.png", "mobs_duck_female.png", "mobs_duck_female.png",
- "mobs_duck_female.png", "mobs_duck_female.png", "mobs_duck_female.png", "mobs_duck_female.png",
- "mobs_duck_female.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_duck",
- },
- walk_velocity = 3,
- run_velocity = 5,
- runaway = true,
- drops = {
- {name = "mobs:duck_raw", chance = 3, min = 1, max = 2},
- {name = "mobs:chicken_feather", chance = 5, min = 1, max = 3},
- },
- water_damage = 0,
- lava_damage = 5,
- light_damage = 0,
- fall_damage = 0,
- fall_speed = -8,
- fear_height = 100,
- animation = {
- speed_normal = 15,
- stand_start = 0,
- stand_end = 1, -- 20
- walk_start = 20,
- walk_end = 40,
- },
- floats = 1,
- follow = {"farming:wheat_seed", "farming:cotton_seed"},
- 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:getpos()
- minetest.add_item(pos, "mobs:duck_egg")
- minetest.sound_play("default_place_node_hard", {
- pos = pos,
- gain = 1.0,
- max_hear_distance = 5,
- })
- end,
- })
- local spawn_on = "default:water_source"
- if minetest.get_modpath("ethereal") then
- spawn_on = "ethereal:bamboo_dirt"
- end
- mobs:spawn({
- name = "mobs_animal:duck",
- nodes = {spawn_on},
- min_light = 5,
- chance = 15000,
- active_object_count = 2,
- min_height = 0,
- day_toggle = true,
- })
- mobs:register_egg("mobs_animal:duck", S("Duck"), "mobs_duck_inv.png", 0)
- mobs:alias_mob("mobs:duck", "mobs_animal:duck") -- compatibility
- -- duck egg entity
- mobs:register_arrow("mobs_animal:duck_egg_entity", {
- visual = "sprite",
- visual_size = {x=.5, y=.5},
- textures = {"mobs_duck_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:duck")
- 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: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:duck_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:duck_egg", {
- description = S("Duck Egg"),
- tiles = {"mobs_duck_egg.png"},
- inventory_image = "mobs_duck_egg.png",
- visual_scale = 0.7,
- drawtype = "plantlike",
- wield_image = "mobs_duck_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:duck_egg", param2 = 1})
- end
- end,
- on_use = mobs_shoot_egg
- })
- minetest.register_craft({
- type = "cooking",
- recipe = "mobs:duck_egg",
- output = "mobs:chicken_egg_fried",
- })
- -- raw chicken
- minetest.register_craftitem(":mobs:duck_raw", {
- description = S("Raw Duck"),
- inventory_image = "mobs_duck_raw.png",
- on_use = minetest.item_eat(3),
- })
- -- cooked chicken
- minetest.register_craftitem(":mobs:duck_cooked", {
- description = S("Cooked Duck"),
- inventory_image = "mobs_duck_cooked.png",
- on_use = minetest.item_eat(9),
- })
- minetest.register_craft({
- type = "cooking",
- recipe = "mobs:duck_raw",
- output = "mobs:duck_cooked",
- })
- -- feather
- minetest.register_craftitem(":mobs:chicken_feather", {
- description = S("Feather"),
- inventory_image = "mobs_chicken_feather.png",
- })
|