diff --git a/mods/readme.md b/mods/readme.md new file mode 100644 index 00000000..85d8a009 --- /dev/null +++ b/mods/readme.md @@ -0,0 +1,45 @@ +# ANIMAL MOBS + +### Bee +Tends to buzz around flowers and gives honey when killed, you can also right-click a bee to pick it up and place in inventory. 3x bee's in a row can craft a beehive. + +--- +### Bunny +Bunnies appear in green grass areas (prairie biome in ethereal) and can be tamed with 4 carrots or grass. Can also be picked up and placed in inventory and gives 1 raw rabbit and 1 rabbit hide when killed. + +--- +### Chicken +Found in green areas (bamboo biome in ethereal) and lays eggs on flat ground, Can be picked up and placed in inventory and gives 1-2 raw chicken when killed. Feed 8x wheat seed to breed. + +--- +### Cow +Wanders around eating grass/wheat and can be right-clicked with empty bucket to get milk. Cows will defend themselves when hit and can be right-clicked with 8x wheat to tame and breed. + +--- +### 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. + +--- +### Rat +Typically found around stone they can be picked up and cooked for eating. + +--- +### Sheep +Green grass and wheat munchers that can be clipped using shears to give 1-3 wool. Feed sheep 8x wheat to regrow wool, tame and breed. Right-click a tamed sheep with dye to change it's colour. Will drop 1-3 raw mutton when killed. + +--- +### Warthog +Warthogs unlike pigs defend themselves when hit and give 1-3 raw pork when killed, they can also be right-clicked with 8x apples to tame or breed. + +--- +### Penguin +These little guys can be found in glacier biomes on top of snow and have the ability to swim if they fall into water. + +--- +### Panda +These monochrome cuties spawn in Ethereal's bamboo biome and can be tamed with bamboo stalks :) Remember they have claws though. + +--- +*Note: After breeding, animals need to rest for 4 minutes and baby animals take 4 minutes to grow up, also feeding them helps them grow quicker...* + +#### Lucky Blocks: 20 diff --git a/mods/screenshot.png b/mods/screenshot.png new file mode 100644 index 00000000..51c24174 Binary files /dev/null and b/mods/screenshot.png differ diff --git a/mods/sheep.lua b/mods/sheep.lua new file mode 100644 index 00000000..31daab13 --- /dev/null +++ b/mods/sheep.lua @@ -0,0 +1,254 @@ + +local S = mobs.intllib + +local all_colours = { + {"black", S("Black"), "#000000b0"}, + {"blue", S("Blue"), "#015dbb70"}, + {"brown", S("Brown"), "#663300a0"}, + {"cyan", S("Cyan"), "#01ffd870"}, + {"dark_green", S("Dark Green"), "#005b0770"}, + {"dark_grey", S("Dark Grey"), "#303030b0"}, + {"green", S("Green"), "#61ff0170"}, + {"grey", S("Grey"), "#5b5b5bb0"}, + {"magenta", S("Magenta"), "#ff05bb70"}, + {"orange", S("Orange"), "#ff840170"}, + {"pink", S("Pink"), "#ff65b570"}, + {"red", S("Red"), "#ff0000a0"}, + {"violet", S("Violet"), "#2000c970"}, + {"white", S("White"), "#abababc0"}, + {"yellow", S("Yellow"), "#e3ff0070"}, +} + + +-- Sheep by PilzAdam, texture converted to minetest by AMMOnym from Summerfield pack + +for _, col in ipairs(all_colours) do + + mobs:register_mob("mobs_animal:sheep_"..col[1], { + stay_near = {"farming:straw", 10}, + stepheight = 0.6, + 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, + jump_height = 6, + pushable = true, + drops = { + {name = "mobs:mutton_raw", chance = 1, min = 1, max = 2}, + {name = "wool:"..col[1], chance = 1, min = 1, max = 1}, + }, + water_damage = 0, + 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, + + 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, + }, + follow = { + "farming:wheat", "default:grass_1", "farming:barley", + "farming:oat", "farming:rye" + }, + view_range = 8, + replace_rate = 10, + replace_what = { + {"group:grass", "air", -1}, + {"default:dirt_with_grass", "default:dirt", -2} + }, + fear_height = 3, + on_replace = function(self, pos, oldnode, newnode) + + self.food = (self.food or 0) + 1 + + -- if sheep replaces 8x grass then it regrows wool + if self.food >= 8 then + + self.food = 0 + self.gotten = false + + self.object:set_properties({ + textures = {"mobs_sheep_base.png^(mobs_sheep_wool.png^[colorize:" .. col[3] .. ")"}, + mesh = "mobs_sheep.b3d", + }) + end + end, + on_rightclick = function(self, clicker) + + --are we feeding? + if mobs:feed_tame(self, clicker, 8, true, true) then + + --if fed 7 times then sheep regrows wool + if self.food and self.food > 6 then + + self.gotten = false + + 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() + local name = clicker:get_player_name() + + --are we giving a haircut> + if itemname == "mobs:shears" then + + if self.gotten ~= false + or self.child ~= false + or name ~= self.owner + or not minetest.get_modpath("wool") then + return + end + + self.gotten = true -- shaved + + local obj = minetest.add_item( + self.object:get_pos(), + 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 + + --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:get_pos() + + 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 mobs.is_creative(clicker:get_player_name()) then + item:take_item() + clicker:set_wielded_item(item) + end + + break + end + end + end + + return + end + + -- protect mod with mobs:protector item + if mobs:protect(self, clicker) then return end + + --are we capturing? + if mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) then return end + end + }) + +mobs:register_egg("mobs_animal:sheep_"..col[1], S("@1 Sheep", col[2]), "wool_"..col[1]..".png^mobs_sheep_inv.png") + + -- compatibility + mobs:alias_mob("mobs:sheep_" .. col[1], "mobs_animal:sheep_" .. col[1]) + +end + + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "mobs_animal:sheep_white", + nodes = {"default:dirt_with_grass", "ethereal:green_dirt"}, + neighbors = {"group:grass"}, + min_light = 14, + interval = 60, + chance = 8000, -- 15000 + min_height = 0, + max_height = 200, + day_toggle = true, +}) +end + + +mobs:alias_mob("mobs:sheep", "mobs_animal:sheep_white") -- compatibility + +-- raw mutton +minetest.register_craftitem(":mobs:mutton_raw", { + description = S("Raw Mutton"), + inventory_image = "mobs_mutton_raw.png", + on_use = minetest.item_eat(2), + groups = {food_meat_raw = 1, food_mutton_raw = 1, flammable = 2}, +}) + +-- cooked mutton +minetest.register_craftitem(":mobs:mutton_cooked", { + description = S("Cooked Mutton"), + inventory_image = "mobs_mutton_cooked.png", + on_use = minetest.item_eat(6), + groups = {food_meat = 1, food_mutton = 1, flammable = 2}, +}) + +minetest.register_craft({ + type = "cooking", + output = "mobs:mutton_cooked", + recipe = "mobs:mutton_raw", + cooktime = 5, +}) diff --git a/mods/spawn_example.lua b/mods/spawn_example.lua new file mode 100644 index 00000000..22814c19 --- /dev/null +++ b/mods/spawn_example.lua @@ -0,0 +1,195 @@ + +--[[ Spawn Template, defaults to values shown if line not provided + +mobs:spawn({ + + name = "", + + - Name of mob, must be provided e.g. "mymod:my_mob" + + nodes = {"group:soil, "group:stone"}, + + - Nodes to spawn on top of. + + neighbors = {"air"}, + + - Nodes to spawn beside. + + min_light = 0, + + - Minimum light level. + + max_light = 15, + + - Maximum light level, 15 is sunlight only. + + interval = 30, + + - Spawn interval in seconds. + + chance = 5000, + + - Spawn chance, 1 in every 5000 nodes. + + active_object_count = 1, + + - Active mobs of this type in area. + + min_height = -31000, + + - Minimum height level. + + max_height = 31000, + + - Maximum height level. + + day_toggle = nil, + + - Daytime toggle, true to spawn during day, false for night, nil for both + + on_spawn = nil, + + - On spawn function to run when mob spawns in world + + on_map_load = nil, + + - On map load, when true mob only spawns in newly generated map areas +}) +]]-- + + +-- Bee + +mobs:spawn({ + name = "mobs_animal:bee", + nodes = {"group:flower"}, + min_light = 14, + interval = 60, + chance = 7000, + min_height = 3, + max_height = 200, + day_toggle = true, +}) + +-- Bunny + +mobs:spawn({ + name = "mobs_animal:bunny", + nodes = {"default:dirt_with_grass"}, + neighbors = {"group:grass"}, + min_light = 14, + interval = 60, + chance = 8000, + min_height = 5, + max_height = 200, + day_toggle = true, +}) + +-- Chicken + +mobs:spawn({ + name = "mobs_animal:chicken", + nodes = {"default:dirt_with_grass"}, + neighbors = {"group:grass"}, + min_light = 14, + interval = 60, + chance = 8000, + min_height = 5, + max_height = 200, + day_toggle = true, +}) + +-- Cow + +mobs:spawn({ + name = "mobs_animal:cow", + nodes = {"default:dirt_with_grass", "ethereal:green_dirt"}, + neighbors = {"group:grass"}, + min_light = 14, + interval = 60, + chance = 8000, + min_height = 5, + max_height = 200, + day_toggle = true, +}) + +-- Kitten + +mobs:spawn({ + name = "mobs_animal:kitten", + nodes = {"default:dirt_with_grass"}, + neighbors = {"group:grass"}, + min_light = 14, + interval = 60, + chance = 10000, + min_height = 5, + max_height = 50, + day_toggle = true, +}) + +-- Panda + +mobs:spawn({ + name = "mobs_animal:panda", + nodes = {"ethereal:bamboo_dirt"}, + neighbors = {"group:grass"}, + min_light = 14, + interval = 60, + chance = 8000, + min_height = 10, + max_height = 80, + day_toggle = true, +}) + +-- Penguin + +mobs:spawn({ + name = "mobs_animal:penguin", + nodes = {"default:snowblock"}, + min_light = 14, + interval = 60, + chance = 20000, + min_height = 0, + max_height = 200, + day_toggle = true, +}) + +-- Rat + +mobs:spawn({ + name = "mobs_animal:rat", + nodes = {"default:stone"}, + min_light = 3, + max_light = 9, + interval = 60, + chance = 8000, + max_height = 0, +}) + +-- Sheep + +mobs:spawn({ + name = "mobs_animal:sheep_white", + nodes = {"default:dirt_with_grass", "ethereal:green_dirt"}, + neighbors = {"group:grass"}, + min_light = 14, + interval = 60, + chance = 8000, + min_height = 0, + max_height = 200, + day_toggle = true, +}) + +-- Warthog + +mobs:spawn({ + name = "mobs_animal:pumba", + nodes = {"default:dirt_with_dry_grass", "default:dry_dirt_with_dry_grass"}, + neighbors = {"group:dry_grass"}, + min_light = 14, + interval = 60, + chance = 8000, + min_height = 0, + max_height = 200, + day_toggle = true, +}) diff --git a/mods/warthog.lua b/mods/warthog.lua new file mode 100644 index 00000000..4c56d5bb --- /dev/null +++ b/mods/warthog.lua @@ -0,0 +1,116 @@ + +local S = mobs.intllib + + +-- Warthog originally by KrupnoPavel, B3D model by sirrobzeroone + +mobs:register_mob("mobs_animal:pumba", { + stepheight = 0.6, + type = "animal", + passive = false, + attack_type = "dogfight", + group_attack = true, + owner_loyal = true, + attack_npcs = false, + reach = 2, + damage = 2, + hp_min = 5, + hp_max = 15, + armor = 200, + collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.95, 0.4}, + visual = "mesh", + mesh = "mobs_pumba.b3d", + textures = { + {"mobs_pumba.png"}, + }, + makes_footstep_sound = true, + sounds = { + random = "mobs_pig", + attack = "mobs_pig_angry", + }, + walk_velocity = 2, + run_velocity = 3, + jump = true, + jump_height = 6, + pushable = true, + follow = {"default:apple", "farming:potato"}, + view_range = 10, + drops = { + {name = "mobs:pork_raw", chance = 1, min = 1, max = 3}, + }, + water_damage = 0, + 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 + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then return end + end, +}) + +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 +mobs:spawn({ + name = "mobs_animal:pumba", + nodes = spawn_on, + neighbors = spawn_by, + min_light = 14, + interval = 60, + chance = 8000, -- 15000 + min_height = 0, + max_height = 200, + day_toggle = true, +}) +end + +mobs:register_egg("mobs_animal:pumba", S("Warthog"), "mobs_pumba_inv.png") + + +mobs:alias_mob("mobs:pumba", "mobs_animal:pumba") -- compatibility + + +-- raw porkchop +minetest.register_craftitem(":mobs:pork_raw", { + description = S("Raw Porkchop"), + inventory_image = "mobs_pork_raw.png", + on_use = minetest.item_eat(4), + groups = {food_meat_raw = 1, food_pork_raw = 1, flammable = 2}, +}) + +-- cooked porkchop +minetest.register_craftitem(":mobs:pork_cooked", { + description = S("Cooked Porkchop"), + inventory_image = "mobs_pork_cooked.png", + on_use = minetest.item_eat(8), + groups = {food_meat = 1, food_pork = 1, flammable = 2}, +}) + +minetest.register_craft({ + type = "cooking", + output = "mobs:pork_cooked", + recipe = "mobs:pork_raw", + cooktime = 5, +})