From c7e0479498ef66098b6c6c810d3188c014e41307 Mon Sep 17 00:00:00 2001 From: epCode Date: Wed, 25 Aug 2021 19:17:37 -0700 Subject: [PATCH] Make compatible with "new" mob api --- cod.lua | 178 ++++++++++++++++++++++++++++++----- dolphin.lua | 176 ++++++++++++++++++++++++++++++---- fox.lua | 119 ++++++++++++----------- glow_squid.lua | 159 ++++++++++++++++++++++++++++++- golum.lua | 77 --------------- hoglin+zoglin.lua | 47 ++++++++- init.lua | 5 +- models/extra_mobs_salmon.b3d | Bin 253657 -> 31110 bytes piglin.lua | 38 +++++--- salmon.lua | 171 ++++++++++++++++++++++++++++++++- strider.lua | 53 +++++++++-- textures/mobs_mc_golum.png | Bin 2868 -> 0 bytes 12 files changed, 813 insertions(+), 210 deletions(-) delete mode 100644 golum.lua delete mode 100644 textures/mobs_mc_golum.png diff --git a/cod.lua b/cod.lua index 5d37d63..0fc83fa 100644 --- a/cod.lua +++ b/cod.lua @@ -39,6 +39,7 @@ local cod = { xp_min = 1, xp_max = 3, armor = 100, + rotate = 90, collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, visual = "mesh", mesh = "extra_mobs_cod.b3d", @@ -67,34 +68,12 @@ local cod = { }, visual_size = {x=3, y=3}, makes_footstep_sound = false, - fly = true, - fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, + swim = true, breathes_in_water = true, jump = false, view_range = 16, runaway = true, fear_height = 4, - do_custom = function(self) - self.object:set_bone_position("body", vector.new(0,1,0), vector.new(degrees(dir_to_pitch(self.object:get_velocity())) * -1 + 90,0,0)) - if minetest.get_item_group(self.standing_in, "water") ~= 0 then - if self.object:get_velocity().y < 2.5 then - self.object:add_velocity({ x = 0 , y = math.random(-.002, .002) , z = 0 }) - end - end - for _,object in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 10)) do - local lp = object:get_pos() - local s = self.object:get_pos() - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - if not object:is_player() and object:get_luaentity().name == "extra_mobs:cod" then - self.state = "runaway" - self.object:set_rotation({x=0,y=(atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate,z=0}) - end - end - end } mobs:register_mob("extra_mobs:cod", cod) @@ -102,7 +81,158 @@ mobs:register_mob("extra_mobs:cod", cod) --spawning TODO: in schools local water = mobs_mc.spawn_height.water -mobs:spawn_specific("extra_mobs:cod", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 4000, 3, water-16, water) +mobs:spawn_specific( +"extra_mobs:cod", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +3000, +3, +water-16, +water+1) --spawn egg mobs:register_egg("extra_mobs:cod", S("Cod"), "extra_mobs_spawn_icon_cod.png", 0) diff --git a/dolphin.lua b/dolphin.lua index 473bdf8..8c3a4d5 100644 --- a/dolphin.lua +++ b/dolphin.lua @@ -3,15 +3,6 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local pi = math.pi -local atann = math.atan -local atan = function(x) - if not x or x ~= x then - return 0 - else - return atann(x) - end -end local dir_to_pitch = function(dir) local dir2 = vector.normalize(dir) @@ -39,8 +30,9 @@ local dolphin = { xp_min = 1, xp_max = 3, armor = 100, - walk_chance = 100, + walk_chance = 1000, breath_max = 120, + rotate = -90, collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, visual = "mesh", mesh = "extra_mobs_dolphin.b3d", @@ -65,8 +57,7 @@ local dolphin = { }, visual_size = {x=3, y=3}, makes_footstep_sound = false, - fly = true, - fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, + swim = true, breathes_in_water = true, jump = false, view_range = 16, @@ -78,20 +69,165 @@ local dolphin = { attack_type = "dogfight", do_custom = function(self) self.object:set_bone_position("body", vector.new(0,1,0), vector.new(degrees(dir_to_pitch(self.object:get_velocity())) * -1 + 90,0,0)) - if minetest.get_item_group(self.standing_in, "water") ~= 0 then - if self.object:get_velocity().y < 5 then - self.object:add_velocity({ x = 0 , y = math.random(-.007, .007), z = 0 }) - end - end end, } mobs:register_mob("extra_mobs:dolphin", dolphin) - ---spawning TODO: in schools local water = mobs_mc.spawn_height.water -mobs:spawn_specific("extra_mobs:dolphin", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 4000, 3, water-16, water) +--spawning TODO: in schools +mobs:spawn_specific( +"extra_mobs:dolphin", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +3, +water-16, +water+1) --spawn egg mobs:register_egg("extra_mobs:dolphin", S("dolphin"), "extra_mobs_spawn_icon_dolphin.png", 0) diff --git a/fox.lua b/fox.lua index b972fee..240998a 100644 --- a/fox.lua +++ b/fox.lua @@ -2,15 +2,6 @@ --maikerumine --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local pi = math.pi -local atann = math.atan -local atan = function(x) - if not x or x ~= x then - return 0 - else - return atann(x) - end -end local S = minetest.get_translator("extra_mobs") @@ -33,6 +24,7 @@ local fox = { hp_max = 10, xp_min = 1, xp_max = 2, + rotate = -90, armor = {fleshy = 90}, attack_type = "dogfight", damage = 2, @@ -55,7 +47,7 @@ local fox = { }, animation = { stand_speed = 7, - walk_speed = 7, + walk_speed = 17, run_speed = 15, stand_start = 11, stand_end = 11, @@ -68,53 +60,12 @@ local fox = { lay_start = 34, lay_end = 34, }, - runaway = true, + skittish = true, on_spawn = function(self) if minetest.find_node_near(self.object:get_pos(), 4, "mcl_core:snow") ~= nil or minetest.find_node_near(self.object:get_pos(), 4, "mcl_core:dirt_with_grass_snow") ~= nil then - minetest.chat_send_all("true") self.object:set_properties({textures={"extra_mobs_artic_fox.png", "extra_mobs_trans.png"}}) end end, - do_custom = function(self) - if self.child == true then - self.object:set_properties({textures={self.base_texture[1], self.base_texture[1]}}) - end - if self.state ~= "attack" and math.random(1, 5000) == 1 then - self.state = "lay" - self.object:set_animation({x= 12, y=16}) - minetest.after(math.random(10, 500), function() - if self.state == "lay" then - self.state = "stand" - end - end) - end - for _,object in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 8)) do - if not object:is_player() and object:get_luaentity().name == "extra_mobs:fox" and self.state ~= "attack" and math.random(1, 500) == 1 then - self.horny = true - end - local lp = object:get_pos() - local s = self.object:get_pos() - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - if object:is_player() and not object:get_player_control().sneak or not object:is_player() and object:get_luaentity().name == "mobs_mc:wolf" then - self.state = "runaway" - self.object:set_rotation({x=0,y=(atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate,z=0}) - if self.reach > vector.distance(self.object:get_pos(), object:get_pos()) and self.timer > .9 then - self.timer = 0 - object:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = self.damage} - }, nil) - end - end - end - end, - do_punch = function(self) - self.state = "runaway" - end, follow = followitem, fear_height = 4, view_range = 16, @@ -124,10 +75,66 @@ local fox = { mobs:register_mob("extra_mobs:fox", fox) -- spawning -mobs:spawn_specific("extra_mobs:fox", {"mcl_core:dirt_with_grass"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, 0, 500) - -mobs:spawn_specific("extra_mobs:fox", {"mcl_core:dirt_with_grass_snow"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, 0, 500) -mobs:spawn_specific("extra_mobs:artic_fox", {"mcl_core:snow"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, 0, 500) +mobs:spawn_specific( +"extra_mobs:fox", +"overworld", +"ground", +{ + "FlowerForest_beach", + "Forest_beach", + "StoneBeach", + "ColdTaiga_beach_water", + "Taiga_beach", + "Savanna_beach", + "Plains_beach", + "ExtremeHills_beach", + "ColdTaiga_beach", + "Swampland_shore", + "JungleM_shore", + "Jungle_shore", + "MesaPlateauFM_sandlevel", + "MesaPlateauF_sandlevel", + "MesaBryce_sandlevel", + "Mesa_sandlevel", + "Mesa", + "FlowerForest", + "Swampland", + "Taiga", + "ExtremeHills", + "Jungle", + "Savanna", + "BirchForest", + "MegaSpruceTaiga", + "MegaTaiga", + "ExtremeHills+", + "Forest", + "Plains", + "Desert", + "ColdTaiga", + "IcePlainsSpikes", + "SunflowerPlains", + "IcePlains", + "RoofedForest", + "ExtremeHills+_snowtop", + "MesaPlateauFM_grasstop", + "JungleEdgeM", + "ExtremeHillsM", + "JungleM", + "BirchForestM", + "MesaPlateauF", + "MesaPlateauFM", + "MesaPlateauF_grasstop", + "MesaBryce", + "JungleEdge", + "SavannaM", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +3, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("extra_mobs:fox", S("Fox"), "extra_mobs_spawn_icon_fox.png", 0) diff --git a/glow_squid.lua b/glow_squid.lua index d437fe0..e508e64 100644 --- a/glow_squid.lua +++ b/glow_squid.lua @@ -15,6 +15,8 @@ mobs:register_mob("extra_mobs:glow_squid",{ xp_min = 1, xp_max = 3, armor = 100, + tilt_swim = true, + rotate = -90, -- FIXME: If the qlow squid is near the floor, it turns black collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.9, 0.4}, visual = "mesh", @@ -45,8 +47,7 @@ mobs:register_mob("extra_mobs:glow_squid",{ }, visual_size = {x=3, y=3}, makes_footstep_sound = false, - fly = true, - fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, + swim = true, breathes_in_water = true, jump = false, view_range = 16, @@ -75,7 +76,159 @@ mobs:register_mob("extra_mobs:glow_squid",{ -- spawning local water = mobs_mc.spawn_height.water -mobs:spawn_specific("extra_mobs:glow_squid", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 10000, 3, water-16, water) +mobs:spawn_specific( +"extra_mobs:glow_squid", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +5500, +3, +water-16, +water+1) + -- spawn egg mobs:register_egg("extra_mobs:glow_squid", S("Glow Squid"), "extra_mobs_spawn_icon_glow_squid.png", 0) diff --git a/golum.lua b/golum.lua deleted file mode 100644 index 26bd4d1..0000000 --- a/golum.lua +++ /dev/null @@ -1,77 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("extra_mobs") - ---################### ---################### gollum ---################### - - - -local gollum = { - description = S("gollum"), - type = "monster", - spawn_class = "hostile", - passive = true, - hostile = true, - always_climb = true, - docile_by_day = true, - attack_type = "punch", - punch_timer_cooloff = 0.5, - rotate = 270, - damage = 2, - reach = 2, - hp_min = 20, - hp_max = 20, - xp_min = 5, - xp_max = 5, - eye_height = 0.475, - armor = {fleshy = 100}, - collisionbox = {-0.45, 0, -0.45, 0.45, 0.9, 0.45}, - visual = "mesh", - mesh = "mobs_mc_golum.b3d", - textures = { - {"mobs_mc_golum.png"}, - }, - visual_size = {x=5, y=5}, - makes_footstep_sound = false, - sounds = { - attack = "mobs_mc_golum", - damage = "mobs_mc_golum_hiss", - death = "mobs_mc_golum_death", - -- TODO: sounds: walk - distance = 16, - }, - walk_velocity = 4, - run_velocity = 6, --gollum can become extremely difficult if any higher - jump = true, - jump_height = 4, - view_range = 16, - floats = 1, - do_custom = function(self) - if self.health < 5 and self.state ~= "runaway" then - self.state = "runaway" - --[[ - self.object:set_yaw(self.object:get_yaw())]] - end - end, - fear_height = 4, - animation = { - stand_speed = 25, - walk_speed = 25, - run_speed = 50, - stand_start = 1, - stand_end = 40, - walk_start = 41, - walk_end = 70, - run_start = 41, - run_end = 70, - jump_start = 72, - jump_end = 107, - jump_loop = false, - }, -} -mobs:register_mob("extra_mobs:gollum", gollum) diff --git a/hoglin+zoglin.lua b/hoglin+zoglin.lua index 81460c0..d2f247d 100644 --- a/hoglin+zoglin.lua +++ b/hoglin+zoglin.lua @@ -12,6 +12,7 @@ local S = minetest.get_translator("extra_mobs") local hoglin = { type = "monster", passive = false, + --hostile = true, spawn_class = "hostile", hp_min = 40, hp_max = 40, @@ -21,6 +22,7 @@ local hoglin = { attack_type = "dogfight", damage = 4, reach = 3, + rotate = -90, collisionbox = {-.6, -0.01, -.6, .6, 1.4, .6}, visual = "mesh", mesh = "extra_mobs_hoglin.b3d", @@ -115,7 +117,50 @@ baby_hoglin.child = 1 mobs:register_mob("extra_mobs:baby_hoglin", baby_hoglin)]] -- Regular spawning in the Nether -mobs:spawn_specific("extra_mobs:hoglin", {"mcl_nether:netherrack"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) +--[[ +mobs:spawn_specific( +"extra_mobs:hoglin", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +8500, +4, +smin, +smax)]] -- spawn eggs mobs:register_egg("extra_mobs:hoglin", S("Hoglin"), "extra_mobs_spawn_icon_hoglin.png", 0) diff --git a/init.lua b/init.lua index ae4d7c4..2c8b6d1 100644 --- a/init.lua +++ b/init.lua @@ -10,14 +10,13 @@ if not minetest.get_modpath("mobs_mc_gameconfig") then end --Monsters -dofile(path .. "/herobrine.lua") +--dofile(path .. "/herobrine.lua") dofile(path .. "/hoglin+zoglin.lua") dofile(path .. "/piglin.lua") -dofile(path .. "/golum.lua") --Animals dofile(path .. "/strider.lua") ---dofile(path .. "/fox.lua") +dofile(path .. "/fox.lua") dofile(path .. "/cod.lua") dofile(path .. "/salmon.lua") dofile(path .. "/dolphin.lua") diff --git a/models/extra_mobs_salmon.b3d b/models/extra_mobs_salmon.b3d index 50180af957ba5578eca2fde06f05e6aa45704f43..0a69f1e6ad2bcb36ce4dfd85b38a6cae1f2e80c5 100644 GIT binary patch literal 31110 zcmeHPcYGAp_8$-hq^gLBJPlRUP_jEgNOpHZ5^6}NC;@3nAP^uF+oNQ`!UIA_T2Mr) zN(pR`mSiJE=|vDwd4LrZMMM#l_B-EOvXjZ~X7YJ|ywA_){d_KGX86vTbI(2Z-1FVp zYxUc~Fo@V;$6kWr;o@@MG&oglE5r?;Xw~{{C`~|Z)huMs4 zxYu)y-)nq^w|l+$z}wioJ)=18T#^4gF?Q+{pEfZByTmK1I0@vQBO=w8pY zrkWa8HMeHQMXm6wXA5||ggG{Sc$Qr|(e@*s= zUZ-PUo6WhkNMGFu+#AMvog>vZ;o8+noycBXQyfojX}IYe-TNE6#>VUTsq&Y(xW@0r zwJ^tL*A^6Hk8Z4e`Nu7~SD|Z8`={dCx{vmWYl_n4n_BLSI@=s;*){eIC01NJ$L_^7 zr+xRN2Q=W`YlQWoIB{){xc0&?OdnlSlmm`=4m_7%bJ}rjkGS?OyBF7-c5nXk<`-}N z^X6x7{`2M+Z~pV(0p|Nv>>Bs;SK`_z=2Jc& z<;A_Dxu5A?MR_9i11sYB`GVPQ8P7dVRtrX)Rt%J}+f;k?k@CTaanChHYfvM|iff*G z6>Z{yE{=L5-q+eDHx5&jjx@)G_L<_^rW=SMuLV!GzJH_mV`Vxy@xpK?2%@gCDxr|25=d9Lw$Jf_^puRP;0`j6jRe2y@0M;zY9(KVq{;&LivP~V`QL0yA(7j>MY-9!Cu>J_M06z4d; zmwILDD2b>W!&4qW-uz$MKWYpP=59`cvW@$IYoX zqaH}Tg*eBtg?bS6mej4{9LKGw2UAz6KP}F2974Sf_14rw#W{{?G8AlZHtH0_>>S78 z)Z0=IqaHyW=QwUpy&d&P>K(*6jyqHDM7<;RC~=PC80yi~yHJl6=QvKF9#1`vdZIYT zad+z7sCT8_L!9HdC-rBkKSMo9oa6X8>bffS1}u`RS-nWcX0b@tX0f%(fJM?bs~4MuSu8dYv)DRiz+y8ps~4M> zSu8d;v)FoNz+#g$s~4N9Su8ePv)F(#VC$Cw+n@~ChGoDuDg(B08L%iq%=!#Pidk&a zGGI~cnAMBo$SfAclUZzF8L-XDfJM<})&>-HX0a&n%wka-n#H1kF^fg9X%>ruXf*{U z`>eBnzX3y(7VZdFljj?2*CyAes?<{viQ~p`6KWFv`YKdJ&b#PQqM;f>L#2Zz{|glg z8mbR8R2FEc8qiP?pkcR1!%mKdT^dc6aM)eZuydkeS46{(hlbq@4LcPYb|EzEFlg94 z(6BS0A?u?dqoW~PqahQcA|<#I0Owr0|h~|alt4E4narIs9a_(OvtuEh6@=XWTcSoglsQl2O&EO*-6OGLPiPM zMaXC&V}y(qGET^NArpiIWkKu81*0rD1bsmRbwL9~L2QG%K!V0Vg2F(8sz8FmK!VOd z_7SqLko|=0FXR9rlZ8wXGF8ZdLJkr#O~}DQ4iPe4$e}_G6LPqaMn+2 zoXtPjXHH8Cs@KYDLr&0RfsuXEuCdyom+R9jj~y+h&3(a!yx|MmyWUvsLir#^zqmS< zb4@1MkX!Uvy$v;|jMeh0Jnk6Wzon&o?Mxf;j~*+Z51F-boR*zd$&q+E#*!ZsXG4zi zh2495ymn($uKmkLAGOT?xUvm-%old?zD#Y)v_|&jUq5Nd?=U75xy~0>*i)2ukq>=g zp?BM~M)~I(2Ik~-7_%KY(-#)@-W-*iKX7S4i$xz-&O=`Hg%y4%P(F_i+7T0%huo{j z!oRmgJP7|5bO~yZQ=xWd9`dsui}A?$z`T85KB$1^ZR3|sCgmZA8?kae5D$l6u3zx} z2NgF`JmewI>#=yg)QdQqyZMLwcGsRvP|r2(Zh~w4trZqc`Hy-dbeZ`o|y2x>N8_Sh>~Mm%lx}g<)_1 z`)o)#frYGG7^Yx@pk6_4s>sIX2ugHr=XKv3!u<#iF`5jGSjj zEwQZS9EN?k`FXpHb;SEGZ(6jyv47^bJ!NrU*l@_+h_HvpF4bVe#n)~Y*#NyiMOw6F z^(q%!inO>3GrqE;Ch5QA4W@U+z#ocXUGpv4lrNM5lJ4IR9k-)ysoOSHYf5?-Y}-_1 zFKih<(yAR;b2xw8NUQs^vG3ba+w}joBC}!0b4f*5jIp4%s-3O)dOk^a?Vi2usDH+< z>EeJNu3mRhx#7tVJHAo118EoYNV+E`@35gpGCOamqoPh8%ZJ`$Ip1uTxdHP2i>mf~ z?PE5Q?oKi5@=$B7SQ=aa?BuH{dGHl*kcVfh+JMQu?MG*;?#F&^m5+KX>e1c|dnsU6 zo}4$}AFiQle~fy^PSPFI`1O3$Y-hhrW7z#?7v%wij(aR`Tea{xJMGrDt?q|1m*%6c z`zdJ%!;VrGGrhnfcE-PC)fxpHvQK!)>h2!=UOsBSJ=X3F`^aZgnZ3{ndzWmtYPTO>U8@ka}%-*+psM@X3|FSRbp}Nl|^~*;MS+nJ0=CcoSXB6{U z{7F>{tzXria8h;Wq@T}2of&l3+&uW~-ewC!($IAt4yVu@tJ60~(J=uO`I~a-C zc>^PPjW)T_{nFBvg5)`_7B}~3>Gj`nNk>DbrrWgzIi0Ob)j)UP4^u3EEi&TNI2mzj zNWvH|CnHX+9y|YECnHXcG79qxCnHXcRunrAW0JoY!C|;K|Nlis_Ej_3GV|FiW}3&=>ymFceLloyVrjd#h- zQ09d>Lqb_zh&{jD0y45_$Rd_QhNn&{p|{zBM23xgJIewxlKs?DR}ksVNPU-Kkx-@H zAu)D_-P+_*5Xi{Uz$r}c@AD@z8>Ah`O+g=P3_EY^d<)1(%6o4x?Dy(|5_+w*Z48?= zV7>)pBzwpVS4*;CcHUAfs7kddxS zvzXqwllPRshP}&ec=FQo7LXCM^9C|fyY4Jz!@ru&Eupv5k&evX>5(%mAS2mH^Igr@ z*xqsJH$(Vr>eg6>t+*rH0y1*+M?SXS=U*tH_ltRh8TO+!Sr(9yqic9PoanP?Bj!tP zve3KXDj(avXD$VSjATER#q2$MU}OoskKfPd_|J`1Eg&Oz2J^XCbMQLD>f_VGVf4v|hO1cM&n3Nqh z$l9d^>3s~?0B)}mu(ZS+FA;T4bHWAy+jTaJ2j!mO3@gV6y?y=}#p0p+ms2euBg*xO z92+p9M4rrhI)q^-pX_G=8BzMqU~5z98<`88vY>h8;8N_Ii*JMOn%H8~1IAu_Yc$U^XbBmn|S8in5B^dn7Vf>VEBOBcVPC8O^>mFj3|ZKd~7wVFrNV@vC$RVFnepiIMV_$qBzI%v9<18!oLNNgfZ-h zx_K6m5yd%O#LgvVgFg2yuhfWP=XURG0U1%0*MtpsmC&2^RtmFs>X9iHkP)S(h~JtY zmB@Wh3=Cp=XSVKY0U1$d^SrLiJYVDo84t~ebzs;hx6H7Bj9lKz^Q02U_gLU0w#g@a zT`bx=#bSkClj{v+WHN1XscFNSv$rGv2>s0A=rP&R`E+B(mf;k1eAk1%^WmoNixl8H zAAc=EQrg=Qr^b>a`GF-qk}Ro_41lw#v1CM&B^r_}iIC(8;y-;m;?!7h)ALy1lH@_@ z)L6jLb67BuM4+ItARwu-Gya7v9RB@wggd18+mXKxAu+ptK}dkr#9BupF|PHxVy%Oa z)FW&g!X{8&@P?In0fYqDFfTa--x=#dIfU{@L2b$*ASBY>P+h*kCqgpcNE<*%ptpn0 zUYP);-a0}r2#M6|AidCM9GkQkgap`d(i^U`!CTG)A(1|dD+LQeBC%a`SpC?f4Im`a z-qP|e2nn#EVlL#kyx9vvqPIcL8>IBFv;l+!Soop6&R%bNK}e*%?MlIdkN}H#@Z~c( z#~>uq246mtSP&A#gN^idFxVjDLB`nw0&6F1G-18@LF%m~Y{0tcWYBB$83>8=LuvB{ zLShyRLShyRLShyRLShyRLShyRLh^`+9r#SHOT>6QR)irYjXpyy0sn>&w!82H zbbHGss5gMcdJ8JWXCNf7A(F6i-ef+Ju`bsIdpkl{tRcIwSI)B$3qk_DZ3$~N*dWIy z*Cq%Fuul`#7!O7)2#MKw10jK4|qLgJ+#q`jy!p%?KRWw1f&mG+_*H9K!0B!?a1`&#^OQ(rl|J@ogX4Yga&8X+(T z+>e>nf032Au)EcTY!|&J(TYG+t8G0{$?zOhEEwl@LUWv7A#1`d+ z`VDOl4YX^uMp$hJTLikX-i=tPck1VF*}|T&Yv=OT*JqXCD4sr=L=iTkav*}ePNS(Fum>_?=ihBXZpf+-@)v4x8wG*yy^?vvO4pFdouR} z%e}s^t#&d0x-HzlEI<3gCi8i7hw*u1Iouca4vz=-Y90?P&l|Ba&d%^SbI;&$#`Xdu zR>s*%9>4C<87zL;exb(#C-n}#!q$a5up(O*Y){c+v7bo2#(BfOV-}0O$t)K8msu?K zII~z#60=xPlFRYAtZsPX{j4^6KLj0_YW@6jko(W1HLf#NTC?vQtg5nvVck0`Zqs8A zjcILNvh7~?#SNdiPBrPlJ_cOB?G=X2ui+0pRqh6^%+o7{49-4nSE_7F|@chHUZQFcDSWpsI^l8U6!oHkTuh z&UGAV`}L=``4O+R4vAl%sezIV+tp2j-Z`D$WM!os+rl3%+G+=e=P%jd3aOf%sezKr z2%W>Qm(G7)goQ1MZ#A$l8WW!Xd)~DW`@~EQlq7%pQVlko{rEB~L1j#4zF@H*S{$DL z!sUvgQ(w%~KuO{@yutKlzk9|Goa~KyH?>!Phx9s>(3J6+8Ys!N8ee>NS8{p@_ zl*;z%IpO&a#~uy&ab~6lO47D+CG9HNko;9dG3<9+Hrc*+hv!?B{=%%AZN_fQ)Idqh&KoF6uPvYCL+`MTamBubwS()mKe>(R zb%T;LzdyJD*n?M=7Q>z(d(XSW?VCn3d)=TU$EWvV*c){U85a2gb~h$JRLu#u&+N(k z;07g0O-N(dQz!T4$=HF9>ydw}yc2HU5Xt=O1|@m%z+i?QaD8797WceF^LAiyxV_2m zY~I|UByr2TF>K|d+ltw+dT|5$q2=NBpLbsid2C{)8y)w&FOPyDnze9;j0-lYD| zuP)l&-W+a^+UyEhz9`cTO49JYZ056oeT|t7uoYuF8#>aq^P_NkgE_53)~?HRgOW^` zG$Ri_3!eK1TSL+hO+OtMdT@WZ{l2Mf+w|O&=>{b+J8z&QQ)!bM)NfdF^O0!-2aQ%n z7R+5y@ zG%Q;*EJ^qo%MB7s2@=Z$5=#IL;f;pSMMGGkA>_~yPG|@fG=u>fe@o)jg4vl_#C z5Fc}yoi|Vtvsh3Pvsh3Pvsh3Pvsh3Pvsh3Pv)Fosg@0x2z^`)NjQ;%xVKa2|Cd(u2 zi$?6DLT?E!y}*80O8o>%0zb%@^k*+>2^s69 z=|#OEZ78jVLrwCM$+4ksfgg-H)!SU4wlVrl&arV1K>eeS2kBqnjdP3|$?UwLj)Go& zKJztisI_3P9_!0q)MIikqt!#UZ94e%#tBu@4r0sf0KlK<9U zwL3NXWQ!X8<*|_bC5cnBv2*^zS~#SjV2y%;wJ;&u3K=eBgpiR!wiB|wkR62VC}bxg zI|~^lWEUZ$g^Uq0R>(LZjm3q}IH(@kK( zNPsn?7mQ>*VP$U8S0~6zJw$FAO1TM)#OMcPRm3;2-E~+n68+eq7dUj}Jc&il10(Tg zuO16V;?ECyEEtK=UcC+aybDGGteJTOBQauq`2mc?XoDWB_b(U;=0ZPjzOY~<(5uJ# z8XFjievTzh&V}9&U?fI+CEmDKfssJ3nV1A4F>5aviCG)KNX%lvNX%lvNX%lvNX%lv zNX%lvNPyMPv5bdA!x{o30ahQs5^J0{Fp_m*-m2>A5v)<@)yD%E3G~jQyi zV*)F4iHsW=XZp1nAg~x)HDLpuk8aElU?kFK5-W8Zv0x<957J&eRzEf{5|_chdaT}F zFp`ag^))uVUeqL57g@SoEqw-@e$9iCtTkX^gSWXrZ6j^K*rctH#yJKfkv=P}=0uI; z53BbB7>Pcw`?CRz1XwdZ10#_(cpIDE1~3v}5tF5j4U7a>eU8%4h184v4U7c#n$ZhJ zVw_{?3%NFjkWTDxU?gVk1tWo8tYi2AaR9wC9;Cg{3q~S+=FJa!EEoy?s(nyOzhq^V zV?)bb@1D@K*H=^;OkqNT8jmD<(-(7q}Ey(@A{jJkcX)SuzyPt3N<7C9CaWdl6I2mzjoQ%+y zk(r*=Mr2XBj^77&A;BvB(?Ble;3F|?q}s&=yMa^5bN!&GABuGUpdJIGLm@D z1dHBYnJ8r*`}d3_wR)9A7s$xR4_9d6&)(5Aww#(tE|8I4$8QuHo6&|b^OMvibz)s0 zBQsmQ8njdAGb47wv?TSzfJ7I_h}n4q8M$`Pt3i5uje1k&CaEKD#koL6CblWx0yg-X zive#Wsm{9-T_7V{tChFt?KS!=|Lr7oUezcU$Vd|l_gPyn@qjt*PyTIiUz7`EWY-@~ zHW%SOu>BU(9Dm!{1v2vGb&mBGXV5!<=D6C|;VzJoc|Vq8_Bwp*Rriq}MtsrP1v1iX z|0~6OW{k;YGn3TEj>fq_MlRi+-qPQ?SVA_e*c0yp88JI=AR}h6AR}h6AR}h6AR}h6 zAR}h6AS251%_Zsv#1Gb6bDFokWBaI8H^jR@Mik4QmiqXWb%w;w3X4_iEsb}9j3}ww zisk}wF1y73{Adp~cTj>0WJEb|xX1=s$mwmU+q{Q*<-2$n$jGr~$6D&wg)!D;of81P z`KOB3JmN-g17h+;%9G`z5?ml7%C@>2cKcaxE2bo=8Q&zjKt`0M85{liVcEPS_17sK zT_7W|r|!wsuT5k8cAJ!>?phJ;0vQ=m)on%m`dULnXkB#vXOs(M33~DK>J1Di3AtOh}n4q8F{tkvUSF>>Fxc4@^99>1Q*Ci#MN>evA6j0*`qYJ&fmqk zKt`4&6+hDj5b6rNK)@4N4r2qe!KJf27h`R)4X+A z6z>8VnNr`~vQWf2bQ@Udu>VKff>BaWV2_0X!}H zRr)c!U#L5m9I$3QcjhnlJ6r$h-;g-j_ebF?mT5>Li{Km?0u8Gl4J#WBs}>C_5)G>j z4J!!^s{{=z01eTNhR8)jRH7l`@Ek-FBq9Y8Q2?nj`S+i-b4KFpM}Pl1jKu8v1tYoI zFJ1lE&swju>43Fbr8Dezw(|B3RrmS9F0OIVde>X0+3##kY&uvy=m$G%#eVCVt0&m+ zY@G=mtbS4ocE*bR7BG@QeFm$C{a|O4-e&E;V!yMMHFLar#19rWKra|ci$>|D^fE^B zN2+?%kKUCpAF@74Hh_^hjto=x_`yn_fsvS|VlxkvMac{puZjYd4!WFp>qsQc9f**Z@Y- zWZ7u-m>(O)9o=JndEQU#ceXCf816TI7g7A)Lp}o|`Q%c%U;oN=0Y+kW-oQxAV!=qv zV!=qvV!=qvV!=qvV!=pWyERz-g685!A9cg34xd=7-T96E&Q`!jFQ~f&R?i${jZtaU zcI(`+i`egMT^Kp4C>~Jt$S$$a`ylBBBY9zOn);cac!1tTq!)}NF*98~?gu-8>YU+J z=L8T|dHXr_Q^Nj0W0TK^ls3ffI$(AD^9=u;t$G91Q-1U|dh?()ZNX>!ceYlxQa>WB z^qKU9)O&l#KI@fp7x?dNWkwXkVsA&6*vY5%Tl+oowFULY`rl7j;a^`h+#p(S$Wf?C z4%${T|4JK-db4O9PozAFy5-ii*HyRBi}3@i_XF}y5a~s2)9kz6e)BrzUaLx2)IS+# zpJ)4!FB=xp+N?%v6E%|Ac|#qwHeoocW&P=`PI^&m&HvYn>KQ*igS}6ay{O0HQ(p9& zcYw7M7B$<>KZdG@baQOj}YRzFR)_v*4T--}OL!GG}N-x@5yv4)AR6jgO^#f{Av-9?U*oFK$ literal 253657 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 OrZj8{FxL6Prv3+=Qh|^F diff --git a/piglin.lua b/piglin.lua index 23a7a53..bc88898 100644 --- a/piglin.lua +++ b/piglin.lua @@ -26,8 +26,8 @@ local mod_bows = minetest.get_modpath("mcl_bows") ~= nil --################### local piglin = { type = "monster", - passive = false, spawn_class = "hostile", + hostile = false, hp_min = 16, hp_max = 16, xp_min = 9, @@ -35,6 +35,7 @@ local piglin = { armor = {fleshy = 90}, damage = 4, reach = 3, + rotate = -90, collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3}, visual = "mesh", mesh = "extra_mobs_piglin.b3d", @@ -69,8 +70,11 @@ local piglin = { run_start = 440, run_end = 459, }, + eye_height = 1.65, fear_height = 4, view_range = 16, + punch_timer_cooloff = 0.5, + pathfinding = 1, on_spawn = function(self) self.weapon = self.base_texture[2] self.gold_items = 0 @@ -98,17 +102,19 @@ local piglin = { if self.state ~= "attack" then self._attacked_by_player = false end - if self.state == "attack" and self.attack:is_player() then - for i=1, 6 do - local stack = self.attack:get_inventory():get_stack("armor", i) - local item = stack:get_name() - if item == "mcl_armor:chestplate_gold" or item == "mcl_armor:leggings_gold" or item == "mcl_armor:helmet_gold" or item == "mcl_armor:boots_gold" then - if self._attacked_by_player == false then - self.state = "stand" + if self.attacking then + if self.state == "attack" and self.attacking:is_player() then + for i=1, 6 do + local stack = self.attacking:get_inventory():get_stack("armor", i) + local item = stack:get_name() + if item == "mcl_armor:chestplate_gold" or item == "mcl_armor:leggings_gold" or item == "mcl_armor:helmet_gold" or item == "mcl_armor:boots_gold" then + if self._attacked_by_player == false then + self.state = "stand" + end end - end - end - end + end + end + end end, on_rightclick = function(self, clicker) if clicker:is_player() and clicker:get_wielded_item():get_name() == "mcl_core:gold_ingot" and self.state ~= "attack" and self.gold_items < 3 then @@ -137,9 +143,11 @@ local piglin = { do_punch = function(self, hitter) if hitter:is_player() then self._attacked_by_player = true + self.state = "attack" + self.attacking = hitter end end, - attack_type = "dogshoot", + attack_type = "shoot", arrow = "mcl_bows:arrow_entity", shoot_arrow = function(self, pos, dir) if mod_bows then @@ -171,7 +179,7 @@ sword_piglin.drops = { min = 1, max = 1,}, } -sword_piglin.attack_type = "dogfight" +sword_piglin.attack_type = "punch" sword_piglin.animation = { stand_speed = 30, walk_speed = 30, @@ -264,8 +272,8 @@ mobs:register_mob("extra_mobs:piglin_brute", piglin_brute) -- Regular spawning in the Nether -mobs:spawn_specific("extra_mobs:piglin", {"mcl_nether:netherrack"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) -mobs:spawn_specific("extra_mobs:sword_piglin", {"mcl_nether:netherrack"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) +--mobs:spawn_specific("extra_mobs:piglin", {"mcl_nether:netherrack"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) +--mobs:spawn_specific("extra_mobs:sword_piglin", {"mcl_nether:netherrack"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) -- spawn eggs mobs:register_egg("extra_mobs:piglin", S("piglin"), "extra_mobs_spawn_icon_piglin.png", 0) mobs:register_egg("extra_mobs:piglin_brute", S("piglin Brute"), "extra_mobs_spawn_icon_piglin.png", 0) diff --git a/salmon.lua b/salmon.lua index 84dd8a2..6f107c7 100644 --- a/salmon.lua +++ b/salmon.lua @@ -3,6 +3,17 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes +local dir_to_pitch = function(dir) + local dir2 = vector.normalize(dir) + local xz = math.abs(dir.x) + math.abs(dir.z) + return -math.atan2(-dir.y, xz) +end + +local function degrees(rad) + return rad * 180.0 / math.pi +end + + local S = minetest.get_translator("extra_mobs") --################### @@ -19,11 +30,13 @@ local salmon = { xp_min = 1, xp_max = 3, armor = 100, + walk_chance = 1000, + rotate = -90, collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.79, 0.4}, visual = "mesh", mesh = "extra_mobs_salmon.b3d", textures = { - {"extra_mobs_salmon.png"} + {"extra_mobs_salmon.png", "extra_mobs_salmon.png"} }, sounds = { }, @@ -47,8 +60,7 @@ local salmon = { }, visual_size = {x=3, y=3}, makes_footstep_sound = false, - fly = true, - fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, + swim = true, breathes_in_water = true, jump = false, view_range = 16, @@ -61,7 +73,158 @@ mobs:register_mob("extra_mobs:salmon", salmon) --spawning TODO: in schools local water = mobs_mc.spawn_height.water -mobs:spawn_specific("extra_mobs:salmon", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 4000, 3, water-16, water) +mobs:spawn_specific( +"extra_mobs:salmon", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +3, +water-16, +water+1) --spawn egg mobs:register_egg("extra_mobs:salmon", S("Salmon"), "extra_mobs_spawn_icon_salmon.png", 0) diff --git a/strider.lua b/strider.lua index 359be8c..17f840d 100644 --- a/strider.lua +++ b/strider.lua @@ -22,6 +22,7 @@ local strider = { attack_type = "dogfight", damage = 2, reach = 2, + rotate = -90, collisionbox = {-.6, -0.01, -.6, .6, 1.94, .6}, visual = "mesh", mesh = "extra_mobs_strider.b3d", @@ -35,7 +36,7 @@ local strider = { makes_footstep_sound = true, walk_velocity = 2, run_velocity = 4, - runaway = true, + skittish = true, drops = { {name = "mcl_mobsitems:string", chance = 1, @@ -124,7 +125,6 @@ local strider = { if wielditem:get_name() ~= controlitem then if mobs:feed_tame(self, clicker, 1, true, true) then return end end - if mobs:protect(self, clicker) then return end if self.child then return @@ -190,9 +190,6 @@ local strider = { inv:set_stack("main",self.driver:get_wield_index(), wielditem) end return - - elseif not self.driver and clicker:get_wielded_item():get_name() ~= "" then - mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end end, } @@ -215,9 +212,51 @@ baby_strider.run_velocity = 2.4 baby_strider.child = 1 mobs:register_mob("extra_mobs:baby_strider", baby_strider) - +--[[ -- Regular spawning in the Nether -mobs:spawn_specific("extra_mobs:strider", {"mcl_nether:nether_lava_source"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) +mobs:spawn_specific( +"extra_mobs:strider", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +2500, +4, +smin, +smax)]] -- spawn eggs mobs:register_egg("extra_mobs:strider", S("Strider"), "extra_mobs_spawn_icon_strider.png", 0) diff --git a/textures/mobs_mc_golum.png b/textures/mobs_mc_golum.png deleted file mode 100644 index 0cfd45551e59b2afba6519a20cdafb0accd1eee3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2868 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 STxzBO0000