diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0460841 --- /dev/null +++ b/LICENSE @@ -0,0 +1,29 @@ +MIT License + +Copyright (c) 2021 Skandarella + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +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 THE +SOFTWARE. + + +Lincense for original Code (mobs redo + mobs_animal + pmobs + mobs_monster): (MIT) Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1 + +Modified Code by Liil/Wilhelmine/Liil (c) 2021 +Sounds, Textures, Models and Animation by Liil/Wilhelmine/Liil under (MIT) License (c) 2021 + + diff --git a/cyst.lua b/cyst.lua new file mode 100644 index 0000000..eb3c221 --- /dev/null +++ b/cyst.lua @@ -0,0 +1,73 @@ +mobs:register_mob("livingnether:cyst", { + type = "monster", + passive = false, + attack_type = "explode", + explosion_radius = 2, + explosion_damage__radius = 6, + explosion_timer = 2, + reach = 3, + damage = 25, + hp_min = 45, + hp_max = 60, + armor = 100, + collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.8, 0.4}, + visual = "mesh", + mesh = "Cyst.b3d", + visual_size = {x = 1.0, y = 1.0}, + textures = { + {"texturecyst.png"}, + }, + sounds = { + damage = "livingnether_cyst", + fuse = "livingnether_cyst2", + distance = 16, + }, + makes_footstep_sound = false, + walk_velocity = 0, + run_velocity = 0, + jump = false, + jump_height = 6, + fly = false, + stepheight = 1, + water_damage = 0, + lava_damage = 4, + light_damage = 0, + fear_height = 0, + animation = { + speed_normal = 50, + speed_run = 10, + stand_start = 0, + stand_end = 100, + run_start = 100, + run_end = 200, + walk_start = 0, + walk_end = 100, + hurt_start = 100, + hurt_end = 200, + }, + +view_range = 6, + + on_rightclick = function(self, clicker) + + -- feed or tame + if mobs:feed_tame(self, clicker, 4, false, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end + end, +}) + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "livingnether:cyst", + nodes = {"nether:sand", "nether:basalt"}, + min_light = 0, + interval = 60, + active_object_count = 5, + chance = 8000, -- 15000 + min_height = -8000, + max_height = -3000, +}) +end + +mobs:register_egg("livingnether:cyst", ("Cyst"), "acyst.png") diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..5630f2b --- /dev/null +++ b/depends.txt @@ -0,0 +1,3 @@ +mobs +default +nether diff --git a/description.txt b/description.txt new file mode 100644 index 0000000..8eb5249 --- /dev/null +++ b/description.txt @@ -0,0 +1 @@ +Adds various creatures to your Nether. \ No newline at end of file diff --git a/flyingrod.lua b/flyingrod.lua new file mode 100644 index 0000000..8b6ebc7 --- /dev/null +++ b/flyingrod.lua @@ -0,0 +1,77 @@ +mobs:register_mob("livingnether:flyingrod", { +stepheight = 3, + type = "animal", + passive = true, + attack_type = "dogfight", + attack_animals = false, + reach = 2, + damage = 1, + hp_min = 45, + hp_max = 60, + armor = 100, + collisionbox = {-0.3, -0.01, -1, 0.3, 0.3, 0.3}, + visual = "mesh", + mesh = "Flyingrod.b3d", + visual_size = {x = 1.0, y = 1.0}, + textures = { + {"textureflyingrod.png"}, + }, + sounds = { + random = "livingnether_flyingrod", + }, + makes_footstep_sound = false, + walk_velocity = 13, + run_velocity = 13, + walk_chance = 100, + fall_speed = 0, + jump = true, + jump_height = 6, + fly = true, + stepheight = 3, + drops = { + {name = "animalworld:chicken_raw", chance = 1, min = 1, max = 1}, + {name = "animalworld:chicken_feather", chance = 1, min = 1, max = 1}, + + }, + water_damage = 0, + lava_damage = 4, + light_damage = 0, + fear_height = 0, + animation = { + speed_normal = 130, + stand_start = 0, + stand_end = 100, + walk_start = 0, + walk_end = 100, + fly_start = 0, -- swim animation + fly_end = 100, + -- 50-70 is slide/water idle + }, + +fly_in = {"air"}, + floats = 0, +view_range = 4, + + on_rightclick = function(self, clicker) + + -- feed or tame + if mobs:feed_tame(self, clicker, 4, false, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end + end, +}) + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "livingnether:flyingrod", + nodes = {"nether:rack"}, + min_light = 0, + interval = 60, + active_object_count = 5, + chance = 8000, -- 15000 + min_height = -8000, + max_height = -3000, +}) +end + +mobs:register_egg("livingnether:flyingrod", ("Flyingrod"), "aflyingrod.png") diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..eb5b51d --- /dev/null +++ b/init.lua @@ -0,0 +1,41 @@ + +-- Load support for intllib. +local path = minetest.get_modpath(minetest.get_current_modname()) .. "/" + +local S = minetest.get_translator and minetest.get_translator("livingnether") or + dofile(path .. "intllib.lua") + +mobs.intllib = S + + +-- Check for custom mob spawn file +local input = io.open(path .. "spawn.lua", "r") + +if input then + mobs.custom_spawn_animal = true + input:close() + input = nil +end + + +-- Animals +dofile(path .. "razorback.lua") -- +dofile(path .. "lavawalker.lua") -- +dofile(path .. "tardigrade.lua") -- +dofile(path .. "flyingrod.lua") -- +dofile(path .. "cyst.lua") -- +dofile(path .. "whip.lua") -- +dofile(path .. "noodlemaster.lua") -- +dofile(path .. "sokaarcher.lua") -- +dofile(path .. "sokameele.lua") -- + + + +-- Load custom spawning +if mobs.custom_spawn_animal then + dofile(path .. "spawn.lua") +end + + + +print (S("[MOD] Mobs Redo Animals loaded")) diff --git a/intllib.lua b/intllib.lua new file mode 100644 index 0000000..adb0f88 --- /dev/null +++ b/intllib.lua @@ -0,0 +1,3 @@ +-- Support for the old multi-load method +dofile(minetest.get_modpath("intllib").."/init.lua") + diff --git a/lavawalker.lua b/lavawalker.lua new file mode 100644 index 0000000..aced313 --- /dev/null +++ b/lavawalker.lua @@ -0,0 +1,74 @@ +mobs:register_mob("livingnether:lavawalker", { +stepheight = 4, + type = "monster", + passive = false, + attack_type = "dogfight", + attack_animals = true, + reach = 4, + damage = 17, + hp_min = 200, + hp_max = 700, + armor = 100, + collisionbox = {-1.5, -0.01, -1.5, 1.5, 1.5, 1.5}, + visual = "mesh", + mesh = "Lavawalker.b3d", + visual_size = {x = 1.0, y = 1.0}, + textures = { + {"texturelavawalker.png"}, + }, + sounds = { + random = "livingnether_lavawalker", + attack = "livingnether_lavawalker2", + distance = 12, + }, + makes_footstep_sound = true, + walk_velocity = 2, + run_velocity = 3, + runaway = false, + jump = false, + jump_height = 6, + stepheight = 2, + drops = { + {name = "default:steel_ingot", chance = 1, min = 1, max = 2}, + }, + water_damage = 4, + lava_damage = 4, + light_damage = 0, + animation = { + speed_normal = 100, + stand_speed = 40, + stand_start = 0, + stand_end = 100, + walk_start = 100, + walk_end = 200, + punch_speed = 150, + punch_start = 200, + punch_end = 300, + -- 50-70 is slide/water idle + }, + view_range = 8, + + on_rightclick = function(self, clicker) + + -- feed or tame + if mobs:feed_tame(self, clicker, 4, false, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end + end, +}) + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "livingnether:lavawalker", + nodes = {"nether:rack"}, + min_light = 0, + interval = 60, + active_object_count = 3, + chance = 8000, -- 15000 + min_height = -8000, + max_height = -3000, + +}) +end + +mobs:register_egg("livingnether:lavawalker", ("Lavawalker"), "alavawalker.png") diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..2b491be --- /dev/null +++ b/mod.conf @@ -0,0 +1 @@ +name = livingnether \ No newline at end of file diff --git a/noodlemaster.lua b/noodlemaster.lua new file mode 100644 index 0000000..5694cc8 --- /dev/null +++ b/noodlemaster.lua @@ -0,0 +1,148 @@ +mobs:register_mob("livingnether:noodlemaster", { +stepheight = 3, + type = "monster", + passive = false, + attack_animals = false, + damage = 15, + reach = 5, + attack_type = "dogshoot", + dogshoot_switch = 1, + dogshoot_count_max = 12, -- shoot for 10 seconds + dogshoot_count2_max = 3, -- dogfight for 3 seconds + shoot_interval = 0.2, + arrow = "livingnether:lavaball", + shoot_offset = 0.8, + hp_min = 250, + hp_max = 1000, + armor = 100, +collisionbox = {-3,-1.0,-3,3,3,3}, + visual = "mesh", + mesh = "Noodlemaster.b3d", + visual_size = {x = 4.0, y = 4.0}, + textures = { + {"texturenoodlemaster.png"}, + }, + sounds = { + death = "livingnether_noodlemaster", + random = "livingnether_noodlemaster2", + distance = 30, + }, + makes_footstep_sound = false, + walk_velocity = 3, + run_velocity = 4, + fall_speed = 0, + jump = true, + jump_height = 6, + stepheight = 3, + fly = true, + drops = { + {name = "default:mese_crystal", chance = 1, min = 1, max = 3}, + + }, + water_damage = 1, + lava_damage = 0, + light_damage = 0, + fear_height = 0, + animation = { + speed_normal = 50, + stand_start = 0, + stand_end = 100, + walk_start = 100, + walk_end = 200, + fly_start = 100, -- swim animation + fly_end = 200, + punch_start = 250, + punch_end = 350, + shoot_start = 250, + shoot_end = 350, + -- 50-70 is slide/water idle + }, + +fly_in = {"air"}, + floats = 0, +view_range = 20, + + on_rightclick = function(self, clicker) + + -- feed or tame + if mobs:feed_tame(self, clicker, 4, false, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end + end, +}) + +if not mobs.custom_spawn_monster then +mobs:spawn({ + name = "livingnether:noodlemaster", + nodes = {"nether:rack_deep"}, + min_light = 0, + interval = 1200, + chance = 8000, -- 15000 + min_height = -8000, + max_height = -3000, +}) +end + +mobs:register_egg("livingnether:noodlemaster", ("Noodlemaster"), "anoodlemaster.png") + +-- fireball (weapon) +mobs:register_arrow("livingnether:lavaball", { + visual = "sprite", +-- visual = "wielditem", + visual_size = {x = 0.5, y = 0.5}, + textures = {"lavaball.png"}, + collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, + velocity = 7, + tail = 1, + tail_texture = "lavaball.png", + tail_size = 10, + glow = 5, + expire = 0.1, + + on_activate = function(self, staticdata, dtime_s) + -- make fireball indestructable + self.object:set_armor_groups({immortal = 1, fleshy = 100}) + end, + + -- if player has a good weapon with 7+ damage it can deflect fireball + on_punch = function(self, hitter, tflp, tool_capabilities, dir) + + if hitter and hitter:is_player() and tool_capabilities and dir then + + local damage = tool_capabilities.damage_groups and + tool_capabilities.damage_groups.fleshy or 1 + + local tmp = tflp / (tool_capabilities.full_punch_interval or 1.4) + + if damage > 6 and tmp < 4 then + + self.object:set_velocity({ + x = dir.x * self.velocity, + y = dir.y * self.velocity, + z = dir.z * self.velocity, + }) + end + end + end, + + -- direct hit, no fire... just plenty of pain + hit_player = function(self, player) + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 8}, + }, nil) + end, + + hit_mob = function(self, player) + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 8}, + }, nil) + end, + + -- node hit + hit_node = function(self, pos, node) + mobs:boom(self, pos, 1) + + end +}) \ No newline at end of file diff --git a/razorback.lua b/razorback.lua new file mode 100644 index 0000000..262cedf --- /dev/null +++ b/razorback.lua @@ -0,0 +1,76 @@ +mobs:register_mob("livingnether:razorback", { +stepheight = 2, + type = "monster", + passive = false, + attack_type = "dogfight", + attack_animals = true, + reach = 2, + damage = 5, + hp_min = 120, + hp_max = 300, + armor = 100, + collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5}, + visual = "mesh", + mesh = "Razorback.b3d", + visual_size = {x = 1.0, y = 1.0}, + textures = { + {"texturerazorback.png"}, + }, + sounds = { + random = "livingnether_razorback", + attack = "livingnether_razorback2", + distance = 12, + }, + makes_footstep_sound = true, + walk_velocity = 2, + run_velocity = 3, + runaway = false, + walk_chance = 20, + jump = true, + jump_height = 6, + stepheight = 2, + drops = { + {name = "default:copper_ingot", chance = 1, min = 1, max = 1}, + }, + water_damage = 4, + lava_damage = 4, + light_damage = 0, + animation = { + speed_normal = 125, + stand_speed = 50, + stand_start = 0, + stand_end = 100, + walk_start = 100, + walk_end = 200, + punch_speed = 90, + punch_start = 250, + punch_end = 350, + -- 50-70 is slide/water idle + }, + + view_range = 4, + + on_rightclick = function(self, clicker) + + -- feed or tame + if mobs:feed_tame(self, clicker, 4, false, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end + end, +}) + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "livingnether:razorback", + nodes = {"nether:rack"}, + min_light = 0, + interval = 60, + active_object_count = 3, + chance = 8000, -- 15000 + min_height = -8000, + max_height = -3000, + +}) +end + +mobs:register_egg("livingnether:razorback", ("Razorback"), "arazorback.png") diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..2d85b68 Binary files /dev/null and b/screenshot.png differ diff --git a/sokaarcher.lua b/sokaarcher.lua new file mode 100644 index 0000000..03eb799 --- /dev/null +++ b/sokaarcher.lua @@ -0,0 +1,93 @@ + +mobs:register_mob("livingnether:sokaarcher", { + -- animal, monster, npc + type = "monster", + -- aggressive, shoots shuriken + passive = false, + damage = 13, + attack_type = "shoot", + shoot_interval = 2, + arrow = "livingnether:sarrow", + shoot_offset = 2, + attacks_monsters = false, + -- health & armor + hp_min = 50, hp_max = 100, armor = 100, + -- textures and model + collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35}, + visual = "mesh", + mesh = "Sokaarcher.b3d", + drawtype = "front", + textures = { + {"texturesokaarcher.png"}, + }, + visual_size = {x=1, y=1}, + -- sounds + makes_footstep_sound = true, + sounds = { + shoot_attack = "livingnether_sokaarcher", + damage = "livingnether_sokaarcher2", + distance = 20, +}, + -- speed and jump + walk_velocity = 2, + run_velocity = 3, + jump = true, + drops = { + {name = "default:gold_lump", + chance = 1, min = 1, max = 1}, + }, + -- damaged by + water_damage = 0, + lava_damage = 4, + light_damage = 0, + fall_damage = 0, + view_range = 15, + -- model animation + animation = { + speed_normal = 70, speed_run = 100, + stand_start = 0, stand_end = 100, + walk_start = 100, walk_end = 200, + run_start = 100, run_end = 200, + shoot_start = 200, shoot_end = 300, + }, +}) + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "livingnether:sokaarcher", + nodes = {"nether:rack_deep"}, + min_light = 0, + interval = 60, + active_object_count = 3, + chance = 8000, -- 15000 + min_height = -8000, + max_height = -3000, +}) +end + +mobs:register_egg("livingnether:sokaarcher", "Soka Archer", "asokaarcher.png") + +mobs:register_arrow("livingnether:sarrow", { + visual = "sprite", + visual_size = {x=.5, y=.5}, + textures = {"sarrow.png"}, + velocity = 12, + drop = true, + + hit_player = function(self, player) + player:punch(self.object, 1.0, { + full_punch_interval=1.0, + damage_groups = {fleshy=13}, + }, 0) + end, + + hit_mob = function(self, player) + player:punch(self.object, 1.0, { + full_punch_interval=1.0, + damage_groups = {fleshy=13}, + }, 0) + end, + + hit_node = function(self, pos, node) + end, +}) diff --git a/sokameele.lua b/sokameele.lua new file mode 100644 index 0000000..e4a578f --- /dev/null +++ b/sokameele.lua @@ -0,0 +1,68 @@ +mobs:register_mob("livingnether:sokameele", { + type = "monster", + passive = false, + attack_type = "dogfight", + attack_animals = true, + reach = 2, + damage = 13, + hp_min = 80, + hp_max = 125, + armor = 100, + collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5}, + visual = "mesh", + mesh = "Sokameele.b3d", + visual_size = {x = 1.0, y = 1.0}, + textures = { + {"texturesokameele.png"}, + }, + sounds = { + attack = "livingnether_sokameele3", + damage = "livingnether_sokameele", + distance = 20, + }, + makes_footstep_sound = true, + walk_velocity = 2, + run_velocity = 4, + runaway = false, + jump = true, + drops = { + {name = "default:gold_lump", chance = 1, min = 1, max = 1}, + }, + water_damage = 0, + lava_damage = 4, + light_damage = 0, + animation = { + speed_normal = 100, + stand_start = 0, + stand_end = 100, + walk_start = 100, + walk_end = 200, + punch_start = 200, + punch_end = 300, + -- 50-70 is slide/water idle + }, + view_range = 15, + + on_rightclick = function(self, clicker) + + -- feed or tame + if mobs:feed_tame(self, clicker, 4, false, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end + end, +}) + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "livingnether:sokameele", + nodes = {"nether:rack_deep"}, + min_light = 0, + interval = 60, + active_object_count = 3, + chance = 8000, -- 15000 + min_height = -8000, + max_height = -3000, +}) +end + +mobs:register_egg("livingnether:sokameele", ("Soka Meele"), "asokameele.png") diff --git a/tardigrade.lua b/tardigrade.lua new file mode 100644 index 0000000..a145f2f --- /dev/null +++ b/tardigrade.lua @@ -0,0 +1,77 @@ +mobs:register_mob("livingnether:tardigrade", { + stepheight = 2, + type = "animal", + passive = true, + attack_type = "dogfight", + group_attack = true, + owner_loyal = true, + attack_npcs = false, + reach = 2, + damage = 2, + hp_min = 90, + hp_max = 120, + armor = 100, + collisionbox = {-0.6, -0.01, -0.6, 0.6, 0.95, 0.6}, + visual = "mesh", + mesh = "Tardigrade.b3d", + textures = { + {"texturetardigrade.png"}, + }, + makes_footstep_sound = true, + sounds = { + random = "livingnether_tardigrade", + }, + walk_velocity = 1, + run_velocity = 2, + walk_chance = 17, + runaway = true, + runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "player"}, + jump = false, + jump_height = 3, + pushable = true, + view_range = 7, + water_damage = 0, + lava_damage = 5, + light_damage = 0, + fear_height = 3, + animation = { + speed_normal = 75, + stand_start = 0, + stand_end = 100, + walk_start = 100, + walk_end = 200, + punch_start = 200, + punch_end = 300, + + 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) + + if mobs:feed_tame(self, clicker, 8, true, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then return end + end, +}) + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "livingnether:tardigrade", + nodes = {"nether:rack"}, + min_light = 0, + interval = 60, + active_object_count = 4, + chance = 8000, -- 15000 + min_height = -8000, + max_height = -3000, +}) +end + +mobs:register_egg("livingnether:tardigrade", ("Tardigrade"), "atardigrade.png") + + +mobs:alias_mob("livingnether:tardigrade", "livingnether:tardigrade") -- compatibility + diff --git a/whip.lua b/whip.lua new file mode 100644 index 0000000..a3aa1b9 --- /dev/null +++ b/whip.lua @@ -0,0 +1,72 @@ +mobs:register_mob("livingnether:whip", { + type = "monster", + passive = false, + attack_type = "dogfight", + attack_animals = false, + damage = 15, + reach = 4, + damage = 25, + hp_min = 45, + hp_max = 60, + armor = 100, + collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.8, 0.4}, + visual = "mesh", + mesh = "Whip.b3d", + visual_size = {x = 1.0, y = 1.0}, + textures = { + {"texturewhip.png"}, + }, + sounds = { + attack = "livingnether_whip", + distance = 16, + }, + makes_footstep_sound = false, + walk_velocity = 0, + run_velocity = 0, + jump = false, + jump_height = 6, + fly = false, + stepheight = 1, + water_damage = 0, + lava_damage = 4, + light_damage = 0, + fear_height = 0, + animation = { + speed_normal = 50, + speed_run = 50, + stand_start = 0, + stand_end = 100, + run_start = 100, + run_end = 200, + walk_start = 0, + walk_end = 100, + speed_punch = 100, + punch_start = 200, + punch_end = 300, + }, + +view_range = 4, + + on_rightclick = function(self, clicker) + + -- feed or tame + if mobs:feed_tame(self, clicker, 4, false, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end + end, +}) + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "livingnether:whip", + nodes = {"nether:rack_deep"}, + min_light = 0, + interval = 60, + active_object_count = 5, + chance = 8000, -- 15000 + min_height = -8000, + max_height = -3000, +}) +end + +mobs:register_egg("livingnether:whip", ("Flesh Whip"), "awhip.png")