diff --git a/mods/bee.lua b/mods/bee.lua new file mode 100644 index 00000000..70e4d386 --- /dev/null +++ b/mods/bee.lua @@ -0,0 +1,204 @@ + +local S = mobs.intllib + +-- Bee by KrupnoPavel (.b3d model by sirrobzeroone) + +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.5, 0.2}, + visual = "mesh", + mesh = "mobs_bee.b3d", + textures = { + {"mobs_bee.png"}, + }, + blood_texture = "mobs_bee_inv.png", + blood_amount = 1, + 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 = 1, + 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, 50, 90, 0, true, "mobs_animal:bee") + end, +-- after_activate = function(self, staticdata, def, dtime) +-- print ("------", self.name, dtime, self.health) +-- end, +}) + +if not mobs.custom_spawn_animal then +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, +}) +end + +mobs:register_egg("mobs_animal:bee", S("Bee"), "mobs_bee_inv.png") + +-- compatibility +mobs:alias_mob("mobs:bee", "mobs_animal:bee") + +-- honey +minetest.register_craftitem(":mobs:honey", { + description = S("Honey"), + inventory_image = "mobs_honey_inv.png", + on_use = minetest.item_eat(4), + groups = {food_honey = 1, food_sugar = 1, flammable = 1}, +}) + +-- beehive (when placed spawns bee) +minetest.register_node(":mobs:beehive", { + description = S("Beehive"), + drawtype = "plantlike", + tiles = {"mobs_beehive.png"}, + inventory_image = "mobs_beehive.png", + paramtype = "light", + sunlight_propagates = true, + walkable = true, + groups = {oddly_breakable_by_hand = 3, flammable = 1, disable_suffocation = 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 and 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_animal: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 = S("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 = 12, + 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 = meta:get_inventory() + local honey = inv:get_stack("beehive", 1):get_count() + + -- is hive full? + if honey > 11 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 +}) diff --git a/mods/bunny.lua b/mods/bunny.lua new file mode 100644 index 00000000..39480035 --- /dev/null +++ b/mods/bunny.lua @@ -0,0 +1,180 @@ + +local S = mobs.intllib + + +-- Bunny by ExeterDad + +mobs:register_mob("mobs_animal:bunny", { +stepheight = 0.6, + 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, + runaway_from = {"mobs_animal:pumba", "player"}, + jump = true, + jump_height = 6, + drops = { + {name = "mobs:rabbit_raw", chance = 1, min = 1, max = 1}, + {name = "mobs:rabbit_hide", chance = 1, min = 0, max = 1}, + }, + water_damage = 0, + 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", "default:grass_1"}, + 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 + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) then return end + + -- Monty Python tribute + local item = clicker:get_wielded_item() + + if item:get_name() == "mobs:lava_orb" then + + if not mobs.is_creative(clicker:get_player_name()) then + item:take_item() + clicker:set_wielded_item(item) + end + + self.object:set_properties({ + textures = {"mobs_bunny_evil.png"}, + }) + + self.type = "monster" + self.health = 20 + self.passive = false + + return + end + end, + on_spawn = function(self) + + local pos = self.object:get_pos() ; pos.y = pos.y - 1 + + -- white snowy bunny + if minetest.find_node_near(pos, 1, + {"default:snow", "default:snowblock", "default:dirt_with_snow"}) then + self.base_texture = {"mobs_bunny_white.png"} + self.object:set_properties({textures = self.base_texture}) + -- brown desert bunny + elseif minetest.find_node_near(pos, 1, + {"default:desert_sand", "default:desert_stone"}) then + self.base_texture = {"mobs_bunny_brown.png"} + self.object:set_properties({textures = self.base_texture}) + -- grey stone bunny + elseif minetest.find_node_near(pos, 1, + {"default:stone", "default:gravel"}) then + self.base_texture = {"mobs_bunny_grey.png"} + self.object:set_properties({textures = self.base_texture}) + end + + return true -- run only once, false/nil runs every activation + end, + attack_type = "dogfight", + damage = 5, +}) + + +local spawn_on = "default:dirt_with_grass" + +if minetest.get_modpath("ethereal") then + spawn_on = "ethereal:prairie_dirt" +end + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "mobs_animal:bunny", + nodes = {spawn_on}, + neighbors = {"group:grass"}, + min_light = 14, + interval = 60, + chance = 8000, -- 15000 + min_height = 5, + max_height = 200, + day_toggle = true, +}) +end + + +mobs:register_egg("mobs_animal:bunny", S("Bunny"), "mobs_bunny_inv.png", 0) + + +mobs:alias_mob("mobs:bunny", "mobs_animal:bunny") -- compatibility + + +-- raw rabbit +minetest.register_craftitem(":mobs:rabbit_raw", { + description = S("Raw Rabbit"), + inventory_image = "mobs_rabbit_raw.png", + on_use = minetest.item_eat(3), + groups = {food_meat_raw = 1, food_rabbit_raw = 1, flammable = 2}, +}) + +-- cooked rabbit +minetest.register_craftitem(":mobs:rabbit_cooked", { + description = S("Cooked Rabbit"), + inventory_image = "mobs_rabbit_cooked.png", + on_use = minetest.item_eat(5), + groups = {food_meat = 1, food_rabbit = 1, flammable = 2}, +}) + +minetest.register_craft({ + type = "cooking", + output = "mobs:rabbit_cooked", + recipe = "mobs:rabbit_raw", + cooktime = 5, +}) + +-- rabbit hide +minetest.register_craftitem(":mobs:rabbit_hide", { + description = S("Rabbit Hide"), + inventory_image = "mobs_rabbit_hide.png", + groups = {flammable = 2}, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "mobs:rabbit_hide", + burntime = 2, +}) + +minetest.register_craft({ + output = "mobs:leather", + type = "shapeless", + recipe = { + "mobs:rabbit_hide", "mobs:rabbit_hide", + "mobs:rabbit_hide", "mobs:rabbit_hide" + } +}) diff --git a/mods/chicken.lua b/mods/chicken.lua new file mode 100644 index 00000000..dd2eb8c4 --- /dev/null +++ b/mods/chicken.lua @@ -0,0 +1,312 @@ + +local S = mobs.intllib + + +-- Chicken by JK Murray and Sirrobzeroone + +mobs:register_mob("mobs_animal:chicken", { +stepheight = 0.6, + 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.b3d", + textures = { + {"mobs_chicken.png"}, -- white + {"mobs_chicken_brown.png"}, + {"mobs_chicken_black.png"}, + }, + child_texture = { + {"mobs_chick.png"}, + }, + makes_footstep_sound = true, + sounds = { + random = "mobs_chicken", + }, + walk_velocity = 1, + run_velocity = 3, + runaway = true, + runaway_from = {"player", "mobs_animal:pumba"}, + drops = { + {name = "mobs:chicken_raw", chance = 1, min = 1, max = 1}, + {name = "mobs:chicken_feather", chance = 1, min = 0, max = 2}, + }, + water_damage = 1, + lava_damage = 5, + light_damage = 0, + fall_damage = 0, + fall_speed = -4, + fear_height = 5, + animation = { + speed_normal = 15, + stand_start = 1, + stand_end = 30, + stand_speed = 28, + stand1_start = 31, + stand1_end = 70, + stand1_speed = 32, + walk_start = 71, + walk_end = 90, + walk_speed = 24, + run_start = 91, + run_end = 110, + run_speed = 24, + }, + follow = { + "farming:seed_wheat", "farming:seed_cotton", "farming:seed_barley", + "farming:seed_oat", "farming:seed_rye" + }, + 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:get_pos() + + minetest.add_item(pos, "mobs:egg") + + minetest.sound_play("default_place_node_hard", { + pos = pos, + gain = 1.0, + max_hear_distance = 5, + }) + end, +}) + + +local spawn_on = {"default:dirt_with_grass"} + +if minetest.get_modpath("ethereal") then + spawn_on = {"ethereal:bamboo_dirt", "ethereal:prairie_dirt"} +end + + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "mobs_animal:chicken", + nodes = spawn_on, + neighbors = {"group:grass"}, + min_light = 14, + interval = 60, + chance = 8000, -- 15000 + min_height = 5, + max_height = 200, + day_toggle = true, +}) +end + + +mobs:register_egg("mobs_animal:chicken", S("Chicken"), "mobs_chicken_inv.png", 0) + + +mobs:alias_mob("mobs:chicken", "mobs_animal:chicken") -- compatibility + + +-- 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(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: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 +}) + + +-- 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:get_pos() + + 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 = S("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 = {food_egg = 1, 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 = S("Fried Egg"), + inventory_image = "mobs_chicken_egg_fried.png", + on_use = minetest.item_eat(2), + groups = {food_egg_fried = 1, flammable = 2}, +}) + +minetest.register_craft({ + type = "cooking", + recipe = "mobs:egg", + output = "mobs:chicken_egg_fried", +}) + +-- raw chicken +minetest.register_craftitem(":mobs:chicken_raw", { +description = S("Raw Chicken"), + inventory_image = "mobs_chicken_raw.png", + on_use = minetest.item_eat(2), + groups = {food_meat_raw = 1, food_chicken_raw = 1, flammable = 2}, +}) + +-- cooked chicken +minetest.register_craftitem(":mobs:chicken_cooked", { +description = S("Cooked Chicken"), + inventory_image = "mobs_chicken_cooked.png", + on_use = minetest.item_eat(6), + groups = {food_meat = 1, food_chicken = 1, flammable = 2}, +}) + +minetest.register_craft({ + type = "cooking", + recipe = "mobs:chicken_raw", + output = "mobs:chicken_cooked", +}) + +-- feather +minetest.register_craftitem(":mobs:chicken_feather", { + description = S("Feather"), + inventory_image = "mobs_chicken_feather.png", + groups = {flammable = 2}, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "mobs:chicken_feather", + burntime = 1, +}) diff --git a/mods/cow.lua b/mods/cow.lua new file mode 100644 index 00000000..2ceb8ada --- /dev/null +++ b/mods/cow.lua @@ -0,0 +1,262 @@ + +local S = mobs.intllib + + +-- Cow by sirrobzeroone + +mobs:register_mob("mobs_animal:cow", { + type = "animal", + passive = false, + attack_type = "dogfight", + attack_npcs = false, + reach = 2, + damage = 4, + hp_min = 5, + hp_max = 20, + armor = 200, + collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.2, 0.4}, + visual = "mesh", + mesh = "mobs_cow.b3d", + textures = { + {"mobs_cow.png"}, + {"mobs_cow2.png"}, + }, + makes_footstep_sound = true, + sounds = { + random = "mobs_cow", + }, + walk_velocity = 1, + run_velocity = 2, + jump = true, + jump_height = 6, + pushable = true, + drops = { + {name = "mobs:meat_raw", chance = 1, min = 1, max = 3}, + {name = "mobs:leather", chance = 1, min = 0, max = 2}, + }, + water_damage = 0, + lava_damage = 5, + light_damage = 0, + animation = { + stand_start = 0, + stand_end = 30, + stand_speed = 20, + stand1_start = 35, + stand1_end = 75, + stand1_speed = 20, + walk_start = 85, + walk_end = 114, + walk_speed = 20, + run_start = 120, + run_end = 140, + run_speed = 30, + punch_start = 145, + punch_end = 160, + punch_speed = 20, + die_start = 165, + die_end = 185, + die_speed = 10, + die_loop = false, + }, + follow = { + "farming:wheat", "default:grass_1", "farming:barley", + "farming:oat", "farming:rye" + }, + view_range = 8, + replace_rate = 10, + replace_what = { + {"group:grass", "air", 0}, + {"default:dirt_with_grass", "default:dirt", -1} + }, +-- stay_near = {{"farming:straw", "group:grass"}, 10}, + fear_height = 2, + on_rightclick = function(self, clicker) + + -- feed or tame + if mobs:feed_tame(self, clicker, 8, true, true) then + + -- if fed 7x wheat or grass then cow can be milked again + if self.food and self.food > 6 then + self.gotten = false + end + + return + end + + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) then return end + + local tool = clicker:get_wielded_item() + local name = clicker:get_player_name() + + -- 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(name, + S("Cow already milked!")) + return + end + + local inv = clicker:get_inventory() + + tool:take_item() + clicker:set_wielded_item(tool) + + 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:get_pos() + pos.y = pos.y + 0.5 + minetest.add_item(pos, {name = "mobs:bucket_milk"}) + end + + self.gotten = true -- milked + + return + end + end, + + on_replace = function(self, pos, oldnode, newnode) + + self.food = (self.food or 0) + 1 + + -- if cow replaces 8x grass then it can be milked again + if self.food >= 8 then + self.food = 0 + self.gotten = false + end + end, +}) + + +if not mobs.custom_spawn_animal then +mobs:spawn({ + name = "mobs_animal:cow", + nodes = {"default:dirt_with_grass", "ethereal:green_dirt"}, + neighbors = {"group:grass"}, + min_light = 14, + interval = 60, + chance = 8000, -- 15000 + min_height = 5, + max_height = 200, + day_toggle = true, +}) +end + + +mobs:register_egg("mobs_animal:cow", S("Cow"), "mobs_cow_inv.png") + + +mobs:alias_mob("mobs:cow", "mobs_animal:cow") -- compatibility + + +-- bucket of milk +minetest.register_craftitem(":mobs:bucket_milk", { + description = S("Bucket of Milk"), + inventory_image = "mobs_bucket_milk.png", + stack_max = 1, + on_use = minetest.item_eat(8, "bucket:bucket_empty"), + groups = {food_milk = 1, flammable = 3, drink = 1}, +}) + +-- glass of milk +minetest.register_craftitem(":mobs:glass_milk", { + description = S("Glass of Milk"), + inventory_image = "mobs_glass_milk.png", + on_use = minetest.item_eat(2, "vessels:drinking_glass"), + groups = {food_milk_glass = 1, flammable = 3, vessel = 1, drink = 1}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "mobs:glass_milk 4", + recipe = { + "vessels:drinking_glass", "vessels:drinking_glass", + "vessels:drinking_glass", "vessels:drinking_glass", + "mobs:bucket_milk" + }, + replacements = { {"mobs:bucket_milk", "bucket:bucket_empty"} } +}) + +minetest.register_craft({ + type = "shapeless", + output = "mobs:bucket_milk", + recipe = { + "mobs:glass_milk", "mobs:glass_milk", + "mobs:glass_milk", "mobs:glass_milk", + "bucket:bucket_empty" + }, + replacements = { {"mobs:glass_milk", "vessels:drinking_glass 4"} } +}) + + +-- butter +minetest.register_craftitem(":mobs:butter", { + description = S("Butter"), + inventory_image = "mobs_butter.png", + on_use = minetest.item_eat(1), + groups = {food_butter = 1, flammable = 2}, +}) + +if minetest.get_modpath("farming") and farming and farming.mod then +minetest.register_craft({ + type = "shapeless", + output = "mobs:butter", + recipe = {"mobs:bucket_milk", "farming:salt"}, + replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}} +}) +else -- some saplings are high in sodium so makes a good replacement item +minetest.register_craft({ + type = "shapeless", + output = "mobs:butter", + recipe = {"mobs:bucket_milk", "default:sapling"}, + replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}} +}) +end + +-- cheese wedge +minetest.register_craftitem(":mobs:cheese", { + description = S("Cheese"), + inventory_image = "mobs_cheese.png", + on_use = minetest.item_eat(4), + groups = {food_cheese = 1, flammable = 2}, +}) + +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 = S("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"}, + } +}) diff --git a/mods/depends.txt b/mods/depends.txt new file mode 100644 index 00000000..3168c5af --- /dev/null +++ b/mods/depends.txt @@ -0,0 +1,4 @@ +default +mobs +lucky_block? +intllib?