diff --git a/mods/ENTITIES/extra_mobs/cod.lua b/mods/ENTITIES/extra_mobs/cod.lua index a2f5ec806..5d37d6352 100644 --- a/mods/ENTITIES/extra_mobs/cod.lua +++ b/mods/ENTITIES/extra_mobs/cod.lua @@ -56,16 +56,14 @@ local cod = { run_end = 20, }, drops = { - {name = "mcl_fishing:fish_raw", + {name = "mcl_fishing:fish_raw", chance = 1, min = 1, - max = 1, - looting = "common",}, - {name = "mcl_dye:white", + max = 1,}, + {name = "mcl_dye:white", chance = 20, min = 1, - max = 1, - looting = "common",}, + max = 1,}, }, visual_size = {x=3, y=3}, makes_footstep_sound = false, @@ -79,7 +77,9 @@ local cod = { 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 - self.object:add_velocity({ x = 0 , y = math.random(-.05, .05) , z = 0 }) + 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() diff --git a/mods/ENTITIES/extra_mobs/dolphin.lua b/mods/ENTITIES/extra_mobs/dolphin.lua new file mode 100644 index 000000000..473bdf832 --- /dev/null +++ b/mods/ENTITIES/extra_mobs/dolphin.lua @@ -0,0 +1,97 @@ +--MCmobs v0.4 +--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 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") + +--################### +--################### dolphin +--################### + +local dolphin = { + type = "monster", + spawn_class = "water", + can_despawn = true, + passive = true, + hp_min = 10, + hp_max = 10, + xp_min = 1, + xp_max = 3, + armor = 100, + walk_chance = 100, + breath_max = 120, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, + visual = "mesh", + mesh = "extra_mobs_dolphin.b3d", + textures = { + {"extra_mobs_dolphin.png"} + }, + sounds = { + }, + animation = { + stand_start = 20, + stand_end = 20, + walk_start = 0, + walk_end = 15, + run_start = 30, + run_end = 45, + }, + drops = { + {name = "mcl_fishing:fish_raw", + chance = 1, + min = 0, + max = 1,}, + }, + 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 }, + breathes_in_water = true, + jump = false, + view_range = 16, + fear_height = 4, + walk_velocity = 3, + run_velocity = 6, + reach = 2, + damage = 2.5, + 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) + +--spawn egg +mobs:register_egg("extra_mobs:dolphin", S("dolphin"), "extra_mobs_spawn_icon_dolphin.png", 0) diff --git a/mods/ENTITIES/extra_mobs/fox.lua b/mods/ENTITIES/extra_mobs/fox.lua index e3f0272ef..b972fee1e 100644 --- a/mods/ENTITIES/extra_mobs/fox.lua +++ b/mods/ENTITIES/extra_mobs/fox.lua @@ -18,6 +18,13 @@ local S = minetest.get_translator("extra_mobs") --################### fox --################### +local followitem = "" +if minetest.get_modpath("mc_sweet_berry") then + followitem = "mc_sweet_berry:sweet_berry" +else + followitem = nil +end + local fox = { type = "monster", passive = false, @@ -108,9 +115,10 @@ local fox = { do_punch = function(self) self.state = "runaway" end, + follow = followitem, fear_height = 4, view_range = 16, - specific_attack = { "mobs_mc:cow", "mobs_mc:sheep", "mobs_mc:chicken" }, + specific_attack = { "mobs_mc:chicken", "extra_mobs:cod", "extra_mobs:salmon" }, } mobs:register_mob("extra_mobs:fox", fox) diff --git a/mods/ENTITIES/extra_mobs/glow_squid.lua b/mods/ENTITIES/extra_mobs/glow_squid.lua new file mode 100644 index 000000000..d437fe08c --- /dev/null +++ b/mods/ENTITIES/extra_mobs/glow_squid.lua @@ -0,0 +1,81 @@ +--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") + +mobs:register_mob("extra_mobs:glow_squid",{ + type = "animal", + spawn_class = "water", + can_despawn = true, + passive = true, + hp_min = 10, + hp_max = 10, + xp_min = 1, + xp_max = 3, + armor = 100, + -- 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", + mesh = "extra_mobs_glow_squid.b3d", + textures = { + {"extra_mobs_glow_squid.png"} + }, + sounds = { + damage = {name="mobs_mc_squid_hurt", gain=0.3}, + death = {name="mobs_mc_squid_death", gain=0.4}, + flop = "mobs_mc_squid_flop", + distance = 16, + }, + animation = { + stand_start = 1, + stand_end = 60, + walk_start = 1, + walk_end = 60, + run_start = 1, + run_end = 60, + }, + drops = { + {name = "extra_mobs:glow_ink_sac", + chance = 1, + min = 1, + max = 3, + looting = "common",}, + }, + 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 }, + breathes_in_water = true, + jump = false, + view_range = 16, + runaway = true, + fear_height = 4, + glow = minetest.LIGHT_MAX, + do_custom = function(self, dtime) + local glowSquidPos = self.object:get_pos() + local chanceOfParticle = math.random(0, 2) + if chanceOfParticle >= 1 then + minetest.add_particle({ + pos = {x=glowSquidPos.x+math.random(-2,2)*math.random()/2,y=glowSquidPos.y+math.random(-1,2),z=glowSquidPos.z+math.random(-2,2)*math.random()/2}, + velocity = {x=math.random(-0.25,0.25), y=math.random(-0.25,0.25), z=math.random(-0.25,0.25)}, + acceleration = {x=math.random(-0.5,0.5), y=math.random(-0.5,0.5), z=math.random(-0.5,0.5)}, + expirationtime = math.random(), + size = 1.5 + math.random(), + collisiondetection = true, + vertical = false, + texture = "glint"..math.random(1, 4)..".png", + glow = minetest.LIGHT_MAX, + }) + end + end +}) + +-- 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) + +-- spawn egg +mobs:register_egg("extra_mobs:glow_squid", S("Glow Squid"), "extra_mobs_spawn_icon_glow_squid.png", 0) diff --git a/mods/ENTITIES/extra_mobs/glow_squid_items.lua b/mods/ENTITIES/extra_mobs/glow_squid_items.lua new file mode 100644 index 000000000..fa4dcd80a --- /dev/null +++ b/mods/ENTITIES/extra_mobs/glow_squid_items.lua @@ -0,0 +1,328 @@ +local S = minetest.get_translator("extra_mobs") + +minetest.register_craftitem("extra_mobs:glow_ink_sac", { + description = S("Glow Ink Sac"), + _doc_items_longdesc = S("Use it to craft the Glow Item Frame."), + _doc_items_usagehelp = S("Use the Glow Ink Sac and the normal Item Frame to craft the Glow Item Frame."), + inventory_image = "extra_mobs_glow_ink_sac.png", + groups = { craftitem = 1 }, +}) + + +-------------------- + +--[[This mod is originally by Zeg9, but heavily modified for MineClone 2. + +Model created by 22i, licensed under the +GNU GPLv3 . + +Source: +]] + + +local VISUAL_SIZE = 0.3 + +minetest.register_entity("extra_mobs:glow_item_frame_item",{ + hp_max = 1, + visual = "wielditem", + visual_size = {x=VISUAL_SIZE, y=VISUAL_SIZE}, + physical = false, + pointable = false, + textures = { "blank.png" }, + _texture = "blank.png", + _scale = 1, + + on_activate = function(self, staticdata) + if staticdata ~= nil and staticdata ~= "" then + local data = staticdata:split(';') + if data and data[1] and data[2] then + self._nodename = data[1] + self._texture = data[2] + if data[3] then + self._scale = data[3] + else + self._scale = 1 + end + end + end + if self._texture ~= nil then + self.object:set_properties({ + textures={self._texture}, + visual_size={x=VISUAL_SIZE/self._scale, y=VISUAL_SIZE/self._scale}, + }) + end + end, + get_staticdata = function(self) + if self._nodename ~= nil and self._texture ~= nil then + local ret = self._nodename .. ';' .. self._texture + if self._scale ~= nil then + ret = ret .. ';' .. self._scale + end + return ret + end + return "" + end, + + _update_texture = function(self) + if self._texture ~= nil then + self.object:set_properties({ + textures={self._texture}, + visual_size={x=VISUAL_SIZE/self._scale, y=VISUAL_SIZE/self._scale}, + }) + end + end, +}) + + +local facedir = {} +facedir[0] = {x=0,y=0,z=1} +facedir[1] = {x=1,y=0,z=0} +facedir[2] = {x=0,y=0,z=-1} +facedir[3] = {x=-1,y=0,z=0} + +local remove_item_entity = function(pos, node) + local objs = nil + if node.name == "extra_mobs:glow_item_frame" then + objs = minetest.get_objects_inside_radius(pos, .5) + end + if objs then + for _, obj in ipairs(objs) do + if obj and obj:get_luaentity() and obj:get_luaentity().name == "extra_mobs:glow_item_frame_item" then + obj:remove() + end + end + end +end + +local update_item_entity = function(pos, node, param2) + remove_item_entity(pos, node) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local item = inv:get_stack("main", 1) + if not item:is_empty() then + if not param2 then + param2 = node.param2 + end + if node.name == "extra_mobs:glow_item_frame" then + local posad = facedir[param2] + pos.x = pos.x + posad.x*6.5/16 + pos.y = pos.y + posad.y*6.5/16 + pos.z = pos.z + posad.z*6.5/16 + end + local e = minetest.add_entity(pos, "extra_mobs:glow_item_frame_item") + local lua = e:get_luaentity() + lua._nodename = node.name + local itemname = item:get_name() + if itemname == "" or itemname == nil then + lua._texture = "blank.png" + lua._scale = 1 + else + lua._texture = itemname + local def = minetest.registered_items[itemname] + if def and def.wield_scale then + lua._scale = def.wield_scale.x + else + lua._scale = 1 + end + end + lua:_update_texture() + if node.name == "extra_mobs:glow_item_frame" then + local yaw = math.pi*2 - param2 * math.pi/2 + e:set_yaw(yaw) + end + end +end + +local drop_item = function(pos, node, meta, clicker) + local cname = "" + if clicker and clicker:is_player() then + cname = clicker:get_player_name() + end + if node.name == "extra_mobs:glow_item_frame" and not minetest.is_creative_enabled(cname) then + local inv = meta:get_inventory() + local item = inv:get_stack("main", 1) + if not item:is_empty() then + minetest.add_item(pos, item) + end + end + meta:set_string("infotext", "") + remove_item_entity(pos, node) +end + +minetest.register_node("extra_mobs:glow_item_frame",{ + description = S("Glow Item Frame"), + _tt_help = S("Can hold an item and glows"), + _doc_items_longdesc = S("Glow Item frames are decorative blocks in which items can be placed."), + _doc_items_usagehelp = S("Just place any item on the item frame. Use the item frame again to retrieve the item."), + drawtype = "mesh", + is_ground_content = false, + mesh = "extra_mobs_glow_item_frame.obj", + selection_box = { type = "fixed", fixed = {-6/16, -6/16, 7/16, 6/16, 6/16, 0.5} }, + collision_box = { type = "fixed", fixed = {-6/16, -6/16, 7/16, 6/16, 6/16, 0.5} }, + tiles = {"extra_mobs_glow_item_frame_border.png", "extra_mobs_glow_item_frame_border.png", "extra_mobs_glow_item_frame_border.png", "extra_mobs_glow_item_frame_border.png", "extra_mobs_glow_item_frame_border.png", "extra_mobs_glow_item_frame_border.png"}, + inventory_image = "extra_mobs_glow_item_frame_item.png", + wield_image = "extra_mobs_glow_item_frame.png", + paramtype = "light", + paramtype2 = "facedir", + + --FIXME: should only be glowing, no light source. How is that possible with a node? + light_source = minetest.LIGHT_MAX, + + sunlight_propagates = true, + groups = { dig_immediate=3,deco_block=1,dig_by_piston=1,container=7,attached_node_facedir=1 }, + sounds = mcl_sounds.node_sound_defaults(), + node_placement_prediction = "", + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + -- Use pointed node's on_rightclick function first, if present + local node = minetest.get_node(pointed_thing.under) + if placer and not placer:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack + end + end + + return minetest.item_place(itemstack, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("main", 1) + end, + on_rightclick = function(pos, node, clicker, itemstack) + if not itemstack then + return + end + local pname = clicker:get_player_name() + if minetest.is_protected(pos, pname) then + minetest.record_protection_violation(pos, pname) + return + end + local meta = minetest.get_meta(pos) + drop_item(pos, node, meta, clicker) + local inv = meta:get_inventory() + if itemstack:is_empty() then + remove_item_entity(pos, node) + meta:set_string("infotext", "") + inv:set_stack("main", 1, "") + return itemstack + end + local put_itemstack = ItemStack(itemstack) + put_itemstack:set_count(1) + inv:set_stack("main", 1, put_itemstack) + update_item_entity(pos, node) + -- Add node infotext when item has been named + local imeta = itemstack:get_meta() + local iname = imeta:get_string("name") + if iname then + meta:set_string("infotext", iname) + end + + if not minetest.is_creative_enabled(clicker:get_player_name()) then + itemstack:take_item() + end + return itemstack + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return 0 + else + return count + end + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return 0 + else + return stack:get_count() + end + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return 0 + else + return stack:get_count() + end + end, + on_destruct = function(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + drop_item(pos, node, meta) + end, + on_rotate = function(pos, node, user, mode, param2) + if mode == screwdriver.ROTATE_FACE then + -- Rotate face + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + + local objs = nil + if node.name == "extra_mobs:glow_item_frame" then + objs = minetest.get_objects_inside_radius(pos, .5) + end + if objs then + for _, obj in ipairs(objs) do + if obj and obj:get_luaentity() and obj:get_luaentity().name == "extra_mobs:glow_item_frame_item" then + update_item_entity(pos, node, (node.param2+1) % 4) + break + end + end + end + return + elseif mode == screwdriver.ROTATE_AXIS then + return false + end + end, + +}) + +minetest.register_craft({ + type = "shapeless", + output = 'extra_mobs:glow_item_frame', + recipe = {'mcl_itemframes:item_frame', 'extra_mobs:glow_ink_sac'}, +}) + +minetest.register_lbm({ + label = "Update legacy item frames", + name = "extra_mobs:update_legacy_glow_item_frames", + nodenames = {"extra_mobs:glow_frame"}, + action = function(pos, node) + -- Swap legacy node, then respawn entity + node.name = "extra_mobs:glow_item_frame" + local meta = minetest.get_meta(pos) + local item = meta:get_string("item") + minetest.swap_node(pos, node) + if item ~= "" then + local itemstack = ItemStack(minetest.deserialize(meta:get_string("itemdata"))) + local inv = meta:get_inventory() + inv:set_size("main", 1) + if not itemstack:is_empty() then + inv:set_stack("main", 1, itemstack) + end + end + update_item_entity(pos, node) + end, +}) + +-- FIXME: Item entities can get destroyed by /clearobjects +minetest.register_lbm({ + label = "Respawn item frame item entities", + name = "extra_mobs:respawn_entities", + nodenames = {"extra_mobs:glow_item_frame"}, + run_at_every_load = true, + action = function(pos, node) + update_item_entity(pos, node) + end, +}) + +minetest.register_alias("extra_mobs:glow_frame", "extra_mobs:glow_item_frame") + +-------------------- \ No newline at end of file diff --git a/mods/ENTITIES/extra_mobs/init.lua b/mods/ENTITIES/extra_mobs/init.lua index 46aeeca69..28fab0eeb 100644 --- a/mods/ENTITIES/extra_mobs/init.lua +++ b/mods/ENTITIES/extra_mobs/init.lua @@ -18,3 +18,11 @@ dofile(path .. "/piglin.lua") dofile(path .. "/strider.lua") dofile(path .. "/fox.lua") dofile(path .. "/cod.lua") +dofile(path .. "/salmon.lua") +dofile(path .. "/dolphin.lua") +dofile(path .. "/glow_squid.lua") + +--Items +dofile(path .. "/glow_squid_items.lua") + + diff --git a/mods/ENTITIES/extra_mobs/mod.conf b/mods/ENTITIES/extra_mobs/mod.conf index 7a96a9824..06298dd4d 100644 --- a/mods/ENTITIES/extra_mobs/mod.conf +++ b/mods/ENTITIES/extra_mobs/mod.conf @@ -1,3 +1,3 @@ name = extra_mobs depends = mcl_mobs, mobs_mc -optional_depends = mc +optional_depends = mc_warped_fungus_stick, mc_sweet_berry diff --git a/mods/ENTITIES/extra_mobs/models/extra_mobs_dolphin.b3d b/mods/ENTITIES/extra_mobs/models/extra_mobs_dolphin.b3d new file mode 100644 index 000000000..37e2e96ae Binary files /dev/null and b/mods/ENTITIES/extra_mobs/models/extra_mobs_dolphin.b3d differ diff --git a/mods/ENTITIES/extra_mobs/models/extra_mobs_glow_item_frame.obj b/mods/ENTITIES/extra_mobs/models/extra_mobs_glow_item_frame.obj new file mode 100644 index 000000000..d0a5b0c5f --- /dev/null +++ b/mods/ENTITIES/extra_mobs/models/extra_mobs_glow_item_frame.obj @@ -0,0 +1,156 @@ +# Blender v2.76 (sub 0) OBJ File: 'itemframe1facedir.blend' +# www.blender.org +mtllib itemframe1facedir.mtl +o right.frame_Cube.005 +v -0.313413 -0.313413 0.435326 +v -0.313413 0.313413 0.435326 +v -0.313413 -0.313413 0.498008 +v -0.313413 0.313413 0.498008 +v -0.376095 -0.313413 0.435326 +v -0.376095 0.313413 0.435326 +v -0.376095 -0.313413 0.498008 +v -0.376095 0.313413 0.498008 +vt 0.875000 0.812500 +vt 0.812500 0.812500 +vt 0.812500 0.187500 +vt 0.875000 0.187500 +vt 1.000000 0.812500 +vt 0.937500 0.812500 +vt 0.937500 0.187500 +vt 1.000000 0.187500 +vt -0.000000 0.937500 +vt 0.062500 0.937500 +vt 0.062500 1.000000 +vt -0.000000 1.000000 +vn 1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +s off +f 2/1/1 4/2/1 3/3/1 1/4/1 +f 4/1/2 8/2/2 7/3/2 3/4/2 +f 8/5/3 6/6/3 5/7/3 7/8/3 +f 6/1/4 2/2/4 1/3/4 5/4/4 +f 1/9/5 3/10/5 7/11/5 5/12/5 +f 6/9/6 8/10/6 4/11/6 2/12/6 +o left.frame_Cube.004 +v 0.376095 -0.313413 0.435326 +v 0.376095 0.313413 0.435326 +v 0.376095 -0.313413 0.498008 +v 0.376095 0.313413 0.498008 +v 0.313413 -0.313413 0.435326 +v 0.313413 0.313413 0.435326 +v 0.313413 -0.313413 0.498008 +v 0.313413 0.313413 0.498008 +vt 0.875000 0.812500 +vt 0.812500 0.812500 +vt 0.812500 0.187500 +vt 0.875000 0.187500 +vt 1.000000 0.812500 +vt 0.937500 0.812500 +vt 0.937500 0.187500 +vt 1.000000 0.187500 +vt -0.000000 0.937500 +vt 0.062500 0.937500 +vt 0.062500 1.000000 +vt -0.000000 1.000000 +vn 1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +s off +f 10/13/7 12/14/7 11/15/7 9/16/7 +f 12/13/8 16/14/8 15/15/8 11/16/8 +f 16/17/9 14/18/9 13/19/9 15/20/9 +f 14/13/10 10/14/10 9/15/10 13/16/10 +f 9/21/11 11/22/11 15/23/11 13/24/11 +f 14/21/12 16/22/12 12/23/12 10/24/12 +o lower.frame_Cube.003 +v 0.376095 -0.376095 0.435326 +v 0.376095 -0.313413 0.435326 +v 0.376095 -0.376095 0.498008 +v 0.376095 -0.313413 0.498008 +v -0.376095 -0.376095 0.435326 +v -0.376095 -0.313413 0.435326 +v -0.376095 -0.376095 0.498008 +v -0.376095 -0.313413 0.498008 +vt 0.187500 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.187500 0.125000 +vt 0.875000 0.187500 +vt 0.875000 0.125000 +vt 0.812500 0.187500 +vt 0.812500 0.125000 +vt 0.875000 0.937500 +vt 0.875000 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.937500 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +s off +f 18/25/13 20/26/13 19/27/13 17/28/13 +f 20/29/14 24/26/14 23/27/14 19/30/14 +f 24/29/15 22/31/15 21/32/15 23/30/15 +f 22/29/16 18/26/16 17/27/16 21/30/16 +f 17/33/17 19/34/17 23/35/17 21/36/17 +f 22/30/18 24/29/18 20/26/18 18/27/18 +o upper.frame_Cube.002 +v 0.376095 0.313413 0.435326 +v 0.376095 0.376095 0.435326 +v 0.376095 0.313413 0.498008 +v 0.376095 0.376095 0.498008 +v -0.376095 0.313413 0.435326 +v -0.376095 0.376095 0.435326 +v -0.376095 0.313413 0.498008 +v -0.376095 0.376095 0.498008 +vt 0.187500 0.875000 +vt 0.125000 0.875000 +vt 0.125000 0.812500 +vt 0.187500 0.812500 +vt 0.875000 0.875000 +vt 0.875000 0.812500 +vt 0.812500 0.875000 +vt 0.812500 0.812500 +vt 0.875000 0.937500 +vt 0.875000 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.937500 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +s off +f 26/37/19 28/38/19 27/39/19 25/40/19 +f 28/41/20 32/38/20 31/39/20 27/42/20 +f 32/41/21 30/43/21 29/44/21 31/42/21 +f 30/41/22 26/38/22 25/39/22 29/42/22 +f 25/45/23 27/46/23 31/47/23 29/48/23 +f 30/48/24 32/38/24 28/41/24 26/45/24 +o background_Plane +v 0.313413 -0.313413 0.466667 +v -0.313413 -0.313413 0.466667 +v 0.313413 0.313413 0.466667 +v -0.313413 0.313413 0.466667 +vt 0.187500 0.187500 +vt 0.812500 0.187500 +vt 0.812500 0.812500 +vt 0.187500 0.812500 +vn -0.000000 0.000000 -1.000000 +usemtl None +s off +f 33/49/25 34/50/25 36/51/25 35/52/25 diff --git a/mods/ENTITIES/extra_mobs/models/extra_mobs_glow_squid.b3d b/mods/ENTITIES/extra_mobs/models/extra_mobs_glow_squid.b3d new file mode 100644 index 000000000..887576b28 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/models/extra_mobs_glow_squid.b3d differ diff --git a/mods/ENTITIES/extra_mobs/models/extra_mobs_salmon.b3d b/mods/ENTITIES/extra_mobs/models/extra_mobs_salmon.b3d new file mode 100644 index 000000000..50180af95 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/models/extra_mobs_salmon.b3d differ diff --git a/mods/ENTITIES/extra_mobs/piglin.lua b/mods/ENTITIES/extra_mobs/piglin.lua index b2ad4ef64..23a7a53fe 100644 --- a/mods/ENTITIES/extra_mobs/piglin.lua +++ b/mods/ENTITIES/extra_mobs/piglin.lua @@ -40,7 +40,7 @@ local piglin = { mesh = "extra_mobs_piglin.b3d", textures = { { "extra_mobs_piglin.png", - "mcl_bows_crossbow_2.png", + "mcl_bows_bow_2.png", } }, visual_size = {x=1, y=1}, sounds = { @@ -72,10 +72,15 @@ local piglin = { fear_height = 4, view_range = 16, on_spawn = function(self) - self.gold_items = 0 self.weapon = self.base_texture[2] + self.gold_items = 0 end, do_custom = function(self) + if self.object:get_pos().y > -100 then + --local zog = minetest.add_entity(self.object:get_pos(), "extra_mobs:zombified_piglin") + --zog:set_rotation(self.object:get_rotation()) + --self.object:remove() + end if self.trading == true then self.state = "trading" self.object:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(20,-20,18)) @@ -83,7 +88,7 @@ local piglin = { self.base_texture[2] = "default_gold_ingot.png" self.object:set_properties({textures = self.base_texture}) else - self.object:set_bone_position("Wield_Item", vector.new(-1.5,7,1.5), vector.new(170,90,90)) + self.object:set_bone_position("Wield_Item", vector.new(.5,4.5,-1.6), vector.new(90,0,20)) self.base_texture[2] = self.weapon self.object:set_properties({textures = self.base_texture}) self.object:set_bone_position("Head", vector.new(0,6.3,0), vector.new(0,0,0)) @@ -188,15 +193,17 @@ zombified_piglin.fire_resistant = 1 zombified_piglin.do_custom = function() return end -zombified_piglin.attacks_monsters = true +zombified_piglin.on_spawn = function() + return +end +zombified_piglin.on_rightclick = function() + return +end zombified_piglin.lava_damage = 0 zombified_piglin.fire_damage = 0 zombified_piglin.attack_animals = true zombified_piglin.mesh = "extra_mobs_sword_piglin.b3d" zombified_piglin.textures = {"extra_mobs_zombified_piglin.png", "default_tool_goldsword.png", "extra_mobs_trans.png"} -zombified_piglin.on_spawn = function() - return -end zombified_piglin.attack_type = "dogfight" zombified_piglin.animation = { stand_speed = 30, @@ -215,7 +222,50 @@ zombified_piglin.animation = { mobs:register_mob("extra_mobs:zombified_piglin", zombified_piglin) +local piglin_brute = table.copy(piglin) +piglin_brute.xp_min = 20 +piglin_brute.xp_max = 20 +piglin_brute.hp_min = 50 +piglin_brute.hp_max = 50 +piglin_brute.fire_resistant = 1 +piglin_brute.do_custom = function() + return +end +piglin_brute.on_spawn = function() + return +end +piglin_brute.on_rightclick = function() + return +end +piglin_brute.attacks_monsters = true +piglin_brute.lava_damage = 0 +piglin_brute.fire_damage = 0 +piglin_brute.attack_animals = true +piglin_brute.mesh = "extra_mobs_sword_piglin.b3d" +piglin_brute.textures = {"extra_mobs_piglin_brute.png", "default_tool_goldaxe.png", "extra_mobs_trans.png"} +piglin_brute.attack_type = "dogfight" +piglin_brute.animation = { + stand_speed = 30, + walk_speed = 30, + punch_speed = 45, + run_speed = 30, + stand_start = 0, + stand_end = 79, + walk_start = 168, + walk_end = 187, + run_start = 440, + run_end = 459, + punch_start = 189, + punch_end = 198, +} +piglin_brute.can_despawn = false +piglin_brute.group_attack = { "extra_mobs:piglin", "extra_mobs:piglin_brute" } +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) -- 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/mods/ENTITIES/extra_mobs/salmon.lua b/mods/ENTITIES/extra_mobs/salmon.lua new file mode 100644 index 000000000..84dd8a214 --- /dev/null +++ b/mods/ENTITIES/extra_mobs/salmon.lua @@ -0,0 +1,67 @@ +--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") + +--################### +--################### salmon +--################### + +local salmon = { + type = "animal", + spawn_class = "water", + can_despawn = true, + passive = true, + hp_min = 3, + hp_max = 3, + xp_min = 1, + xp_max = 3, + armor = 100, + 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"} + }, + sounds = { + }, + animation = { + stand_start = 1, + stand_end = 20, + walk_start = 1, + walk_end = 20, + run_start = 1, + run_end = 20, + }, + drops = { + {name = "mcl_fishing:salmon_raw", + chance = 1, + min = 1, + max = 1,}, + {name = "mcl_dye:white", + chance = 20, + min = 1, + max = 1,}, + }, + 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 }, + breathes_in_water = true, + jump = false, + view_range = 16, + runaway = true, + fear_height = 4, +} + +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) + +--spawn egg +mobs:register_egg("extra_mobs:salmon", S("Salmon"), "extra_mobs_spawn_icon_salmon.png", 0) diff --git a/mods/ENTITIES/extra_mobs/strider.lua b/mods/ENTITIES/extra_mobs/strider.lua index 6115b5e09..359be8cc4 100644 --- a/mods/ENTITIES/extra_mobs/strider.lua +++ b/mods/ENTITIES/extra_mobs/strider.lua @@ -117,7 +117,7 @@ local strider = { local controlitem = "" if minetest.get_modpath("mc") then - controlitem = "mc:warped_fungus_stick" + controlitem = "mc_warped_fungus_stick:warped_fungus_stick" else controlitem = mobs_mc.items.carrot_on_a_stick end diff --git a/mods/ENTITIES/extra_mobs/textures/cod_bucket.png b/mods/ENTITIES/extra_mobs/textures/cod_bucket.png new file mode 100644 index 000000000..f4deb6f68 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/cod_bucket.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_artic_fox.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_artic_fox.png index 3ed9aa2c5..b6073ae58 100644 Binary files a/mods/ENTITIES/extra_mobs/textures/extra_mobs_artic_fox.png and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_artic_fox.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_artic_fox_sleep.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_artic_fox_sleep.png new file mode 100644 index 000000000..e53c458f7 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_artic_fox_sleep.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_cod.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_cod.png index e8036f703..ce6f6dea9 100644 Binary files a/mods/ENTITIES/extra_mobs/textures/extra_mobs_cod.png and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_cod.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_dolphin.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_dolphin.png new file mode 100644 index 000000000..babbea7ef Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_dolphin.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_fox.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_fox.png index 014a8112d..32e8532f9 100644 Binary files a/mods/ENTITIES/extra_mobs/textures/extra_mobs_fox.png and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_fox.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_fox_sleep.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_fox_sleep.png new file mode 100644 index 000000000..fc865bcea Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_fox_sleep.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_ink_sac.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_ink_sac.png new file mode 100644 index 000000000..6628e6abb Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_ink_sac.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_item_frame.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_item_frame.png new file mode 100644 index 000000000..e83b4e060 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_item_frame.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_item_frame_border.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_item_frame_border.png new file mode 100644 index 000000000..e83b4e060 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_item_frame_border.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_item_frame_item.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_item_frame_item.png new file mode 100644 index 000000000..e83b4e060 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_item_frame_item.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_squid.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_squid.png new file mode 100644 index 000000000..ccbdb9707 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_glow_squid.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_hoglin.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_hoglin.png index 52812534e..c85d6a25b 100644 Binary files a/mods/ENTITIES/extra_mobs/textures/extra_mobs_hoglin.png and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_hoglin.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_piglin.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_piglin.png index d64ff373d..c38606550 100644 Binary files a/mods/ENTITIES/extra_mobs/textures/extra_mobs_piglin.png and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_piglin.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_piglin_brute.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_piglin_brute.png new file mode 100644 index 000000000..4a757e61e Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_piglin_brute.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_salmon.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_salmon.png new file mode 100644 index 000000000..ed62d950b Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_salmon.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_spawn_icon_dolphin.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_spawn_icon_dolphin.png new file mode 100644 index 000000000..54819ada6 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_spawn_icon_dolphin.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_spawn_icon_glow_squid.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_spawn_icon_glow_squid.png new file mode 100644 index 000000000..e7b8bbaa4 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_spawn_icon_glow_squid.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_spawn_icon_salmon.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_spawn_icon_salmon.png new file mode 100644 index 000000000..ce5dcf971 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_spawn_icon_salmon.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_strider.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_strider.png index ff02e5ecd..5039afe36 100644 Binary files a/mods/ENTITIES/extra_mobs/textures/extra_mobs_strider.png and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_strider.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_strider_cold.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_strider_cold.png index 6b575d8c5..ecf6bbb90 100644 Binary files a/mods/ENTITIES/extra_mobs/textures/extra_mobs_strider_cold.png and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_strider_cold.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_zoglin.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_zoglin.png index ff1ea13ce..6f5367550 100644 Binary files a/mods/ENTITIES/extra_mobs/textures/extra_mobs_zoglin.png and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_zoglin.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/extra_mobs_zombified_piglin.png b/mods/ENTITIES/extra_mobs/textures/extra_mobs_zombified_piglin.png new file mode 100644 index 000000000..358c22bc3 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/extra_mobs_zombified_piglin.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/glint1.png b/mods/ENTITIES/extra_mobs/textures/glint1.png new file mode 100644 index 000000000..2ed9a013c Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/glint1.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/glint2.png b/mods/ENTITIES/extra_mobs/textures/glint2.png new file mode 100644 index 000000000..deed54099 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/glint2.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/glint3.png b/mods/ENTITIES/extra_mobs/textures/glint3.png new file mode 100644 index 000000000..e0fe8919a Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/glint3.png differ diff --git a/mods/ENTITIES/extra_mobs/textures/glint4.png b/mods/ENTITIES/extra_mobs/textures/glint4.png new file mode 100644 index 000000000..966589fa8 Binary files /dev/null and b/mods/ENTITIES/extra_mobs/textures/glint4.png differ