diff options
author | TenPlus1 <kinsellaja@yahoo.com> | 2016-04-15 14:59:43 +0100 |
---|---|---|
committer | TenPlus1 <kinsellaja@yahoo.com> | 2016-04-15 14:59:43 +0100 |
commit | 654c54075a9304333f4636abaa58d0eb8c35b78a (patch) | |
tree | 15a6dca70ea57b69007bb3db5668c447acb2fc05 /chicken.lua |
Initial Animals upload
Diffstat (limited to 'chicken.lua')
-rw-r--r-- | chicken.lua | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/chicken.lua b/chicken.lua new file mode 100644 index 0000000..f5a58bd --- /dev/null +++ b/chicken.lua @@ -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", +}) |