diff --git a/cow.lua b/cow.lua index fe372ff..66d5b17 100644 --- a/cow.lua +++ b/cow.lua @@ -33,6 +33,7 @@ mobs:register_mob("mobs_animal:cow", { drops = { {name = "mobs:meat_raw", chance = 1, min = 1, max = 3}, {name = "mobs:leather", chance = 1, min = 0, max = 2}, + {name = "maptools:silver_coin", chance = 10, min = 0, max = 1,}, }, water_damage = 1, lava_damage = 5, @@ -54,10 +55,10 @@ mobs:register_mob("mobs_animal:cow", { replace_rate = 10, -- replace_what = {"default:grass_3", "default:grass_4", "default:grass_5", "farming:wheat_8"}, replace_what = { - {"group:grass", "air", 0}, + {"group:grass", "mobs:dung", 0}, {"default:dirt_with_grass", "default:dirt", -1} }, - replace_with = "air", +-- replace_with = "air", fear_height = 2, on_rightclick = function(self, clicker) @@ -196,3 +197,32 @@ minetest.register_craft({ {'mobs:cheeseblock'}, } }) + +-- Dung (from factory's fertilizer) +minetest.register_node( + ":mobs:dung", + { + tiles = {"default_dirt.png"}, + inventory_image = "mobs_dung.png", + description = "Cow dung", + drawtype = "nodebox", + paramtype = "light", + is_ground_content = true, + groups = {snappy = 3, attached_node = 1}, + node_box = { + type = "fixed", + fixed = { + {-0.1875, -0.5, -0.1875, 0.1875, -0.4375, 0.1875}, + {-0.125, -0.4375, -0.125, 0.125, -0.375, 0.125}, + {0, -0.375, -0.0625, 0.0625, -0.3125, 0.0625}, + {0, -0.3125, -0.0625, 0.0625, -0.25, 0}, + {-0.0625, -0.375, -0.0625, 0, -0.3125, 0}, + } + } + }) + +minetest.register_craft({ + type = "fuel", + recipe = "mobs:dung", + burntime = "8", +}) diff --git a/goat.lua b/goat.lua new file mode 100755 index 0000000..81d9f30 --- /dev/null +++ b/goat.lua @@ -0,0 +1,107 @@ + +-- Goat by DonBatman + +mobs:register_mob("mobs_animal:goat", { + -- animal, monster, npc, barbarian + type = "animal", + -- aggressive, does 5 damage to player when threatened + passive = false, + group_attack = true, + attack_type = "dogfight", + reach = 2, + damage = 3, + -- health & armor + hp_min = 10, + hp_max = 20, + armor = 200, + -- textures and model + collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.75, 0.3}, + visual = "mesh", + mesh = "mobs_goat.b3d", + drawtype = "front", + textures = { + {"mobs_goat_white.png"}, + {"mobs_goat_brown.png"}, + {"mobs_goat_grey.png"}, + }, + blood_texture = "mobs_blood.png", + visual_size = {x=2,y=2}, + -- sounds + makes_footstep_sound = true, + sounds = { + random = "mobs_sheep", + }, + -- speed and jump + walk_velocity = 1.5, + run_velocity = 3, + jump = true, + -- drops raw meat when dead + drops = { + {name = "mobs:meat_raw", + chance = 1, min = 2, max = 4}, + {name = "maptools:silver_coin", + chance = 10, min = 1, max = 1,}, + }, + -- damaged by + water_damage = 1, + lava_damage = 5, + light_damage = 0, + -- model animation + animation = { + speed_normal = 25, speed_run = 30, + stand_start = 0, stand_end = 60, -- head down/up + walk_start = 80, walk_end = 110, -- walk + run_start = 160, run_end = 198, -- walk + punch_start = 120, punch_end = 150, -- attack + }, + -- follows wheat + follow = "farming:wheat", + view_range = 10, + -- replace grass/wheat with air (eat) + replace_rate = 50, + replace_what = {"group:flora"}, + replace_with = "air", + on_rightclick = function(self, clicker) + -- feed or tame + if mobs:feed_tame(self, clicker, 8, true, true) then + return + end + + local tool = clicker:get_wielded_item() + + -- milk goat with empty bucket + if tool:get_name() == "bucket:bucket_empty" then + if self.child == true then + return + end + + if self.gotten == true then + minetest.chat_send_player(clicker:get_player_name(), + "Goat already milked!") + return + end + + local inv = clicker:get_inventory() + + inv:remove_item("main", "bucket:bucket_empty") + + 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:getpos() + pos.y = pos.y + 0.5 + minetest.add_item(pos, {name = "mobs:bucket_milk"}) + end + + self.gotten = true -- milked + return + end + + mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) + end, +}) +-- spawn on dirt_with_grass between -1 and 20 light, 1 in 20000 chance, 1 goat in area up to 31000 in height +mobs:spawn_specific("mobs_animal:goat", {"default:dirt_with_grass"}, {"air"}, -1, 20, 30, 20000, 1, -31000, 31000, true) +-- register spawn egg +mobs:register_egg("mobs_animal:goat", "Goat", "mobs_goat_inv.png", 1) +mobs:alias_mob("mobs:goat", "mobs_animal:goat") diff --git a/init.lua b/init.lua index 0325b81..c8374ae 100644 --- a/init.lua +++ b/init.lua @@ -16,6 +16,7 @@ dofile(path .. "/warthog.lua") -- KrupnoPavel dofile(path .. "/bee.lua") -- KrupnoPavel dofile(path .. "/bunny.lua") -- ExeterDad dofile(path .. "/kitten.lua") -- Jordach/BFD +dofile(path .. "/goat.lua") -- NALC(sys4 fork MFF) dofile(path .. "/penguin.lua") -- D00Med dofile(path .. "/panda.lua") -- AspireMint diff --git a/kitten.lua b/kitten.lua index 0ea1177..ee7f6ee 100644 --- a/kitten.lua +++ b/kitten.lua @@ -51,7 +51,18 @@ reach = 1, stoodup_start = 0, stoodup_end = 0, }, - follow = {"mobs_animal:rat", "ethereal:fish_raw", "mobs_fish:clownfish", "mobs_fish:tropical"}, + follow = { + "mobs_animal:rat", + "ethereal:fish_raw", + "mobs_fish:clownfish", + "mobs_fish:tropical", + "fishing:clownfish_raw", + "fishing:bluewhite_raw", + "fishing:exoticfish_raw", + "fishing:carp_raw", + "fishing:perch_raw", + "fishing:catfish_raw", + }, view_range = 8, on_rightclick = function(self, clicker) diff --git a/models/mobs_goat.b3d b/models/mobs_goat.b3d new file mode 100644 index 0000000..c36ad7e Binary files /dev/null and b/models/mobs_goat.b3d differ diff --git a/penguin.lua b/penguin.lua index 2ee14b9..24adffd 100644 --- a/penguin.lua +++ b/penguin.lua @@ -45,7 +45,18 @@ stepheight = 0.6, }, fly_in = {"default:water_source", "default:water_flowing"}, floats = 0, - follow = {"ethereal:fish_raw", "mobs_fish:clownfish", "mobs_fish:tropical"}, + follow = { + "ethereal:fish_raw", + "mobs_fish:clownfish", + "mobs_fish:tropical", + "fishing:fish_raw", + "fishing:clownfish_raw", + "fishing:bluewhite_raw", + "fishing:exoticfish_raw", + "fishing:carp_raw", + "fishing:perch_raw", + "fishing:catfish_raw", + }, view_range = 5, on_rightclick = function(self, clicker) diff --git a/textures/mobs_dung.png b/textures/mobs_dung.png new file mode 100755 index 0000000..b090cfd Binary files /dev/null and b/textures/mobs_dung.png differ diff --git a/textures/mobs_goat_brown.png b/textures/mobs_goat_brown.png new file mode 100755 index 0000000..b8d9156 Binary files /dev/null and b/textures/mobs_goat_brown.png differ diff --git a/textures/mobs_goat_grey.png b/textures/mobs_goat_grey.png new file mode 100755 index 0000000..2b8d792 Binary files /dev/null and b/textures/mobs_goat_grey.png differ diff --git a/textures/mobs_goat_inv.png b/textures/mobs_goat_inv.png new file mode 100644 index 0000000..91a5b8d Binary files /dev/null and b/textures/mobs_goat_inv.png differ diff --git a/textures/mobs_goat_white.png b/textures/mobs_goat_white.png new file mode 100755 index 0000000..5c20f0e Binary files /dev/null and b/textures/mobs_goat_white.png differ diff --git a/warthog.lua b/warthog.lua index c8d3362..f41b046 100644 --- a/warthog.lua +++ b/warthog.lua @@ -37,6 +37,7 @@ stepheight = 0.6, view_range = 10, drops = { {name = "mobs:pork_raw", chance = 1, min = 1, max = 3}, + {name = "maptools:silver_coin", chance = 10, min = 0, max = 1,}, }, water_damage = 1, lava_damage = 5,