This commit is contained in:
kay27 2021-04-06 01:17:34 +04:00
parent a324ac0308
commit 807126c517
41 changed files with 812 additions and 17 deletions

View File

@ -56,16 +56,14 @@ local cod = {
run_end = 20, run_end = 20,
}, },
drops = { drops = {
{name = "mcl_fishing:fish_raw", {name = "mcl_fishing:fish_raw",
chance = 1, chance = 1,
min = 1, min = 1,
max = 1, max = 1,},
looting = "common",}, {name = "mcl_dye:white",
{name = "mcl_dye:white",
chance = 20, chance = 20,
min = 1, min = 1,
max = 1, max = 1,},
looting = "common",},
}, },
visual_size = {x=3, y=3}, visual_size = {x=3, y=3},
makes_footstep_sound = false, makes_footstep_sound = false,
@ -79,7 +77,9 @@ local cod = {
do_custom = function(self) 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)) 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 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 end
for _,object in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 10)) do for _,object in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 10)) do
local lp = object:get_pos() local lp = object:get_pos()

View File

@ -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)

View File

@ -18,6 +18,13 @@ local S = minetest.get_translator("extra_mobs")
--################### fox --################### fox
--################### --###################
local followitem = ""
if minetest.get_modpath("mc_sweet_berry") then
followitem = "mc_sweet_berry:sweet_berry"
else
followitem = nil
end
local fox = { local fox = {
type = "monster", type = "monster",
passive = false, passive = false,
@ -108,9 +115,10 @@ local fox = {
do_punch = function(self) do_punch = function(self)
self.state = "runaway" self.state = "runaway"
end, end,
follow = followitem,
fear_height = 4, fear_height = 4,
view_range = 16, 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) mobs:register_mob("extra_mobs:fox", fox)

View File

@ -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)

View File

@ -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 <https://www.gnu.org/licenses/gpl-3.0.html>.
Source: <https://github.com/22i/amc>
]]
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")
--------------------

View File

@ -18,3 +18,11 @@ dofile(path .. "/piglin.lua")
dofile(path .. "/strider.lua") dofile(path .. "/strider.lua")
dofile(path .. "/fox.lua") dofile(path .. "/fox.lua")
dofile(path .. "/cod.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")

View File

@ -1,3 +1,3 @@
name = extra_mobs name = extra_mobs
depends = mcl_mobs, mobs_mc depends = mcl_mobs, mobs_mc
optional_depends = mc optional_depends = mc_warped_fungus_stick, mc_sweet_berry

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -40,7 +40,7 @@ local piglin = {
mesh = "extra_mobs_piglin.b3d", mesh = "extra_mobs_piglin.b3d",
textures = { { textures = { {
"extra_mobs_piglin.png", "extra_mobs_piglin.png",
"mcl_bows_crossbow_2.png", "mcl_bows_bow_2.png",
} }, } },
visual_size = {x=1, y=1}, visual_size = {x=1, y=1},
sounds = { sounds = {
@ -72,10 +72,15 @@ local piglin = {
fear_height = 4, fear_height = 4,
view_range = 16, view_range = 16,
on_spawn = function(self) on_spawn = function(self)
self.gold_items = 0
self.weapon = self.base_texture[2] self.weapon = self.base_texture[2]
self.gold_items = 0
end, end,
do_custom = function(self) 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 if self.trading == true then
self.state = "trading" self.state = "trading"
self.object:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(20,-20,18)) 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.base_texture[2] = "default_gold_ingot.png"
self.object:set_properties({textures = self.base_texture}) self.object:set_properties({textures = self.base_texture})
else 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.base_texture[2] = self.weapon
self.object:set_properties({textures = self.base_texture}) 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)) 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() zombified_piglin.do_custom = function()
return return
end 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.lava_damage = 0
zombified_piglin.fire_damage = 0 zombified_piglin.fire_damage = 0
zombified_piglin.attack_animals = true zombified_piglin.attack_animals = true
zombified_piglin.mesh = "extra_mobs_sword_piglin.b3d" 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.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.attack_type = "dogfight"
zombified_piglin.animation = { zombified_piglin.animation = {
stand_speed = 30, stand_speed = 30,
@ -215,7 +222,50 @@ zombified_piglin.animation = {
mobs:register_mob("extra_mobs:zombified_piglin", zombified_piglin) 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 -- 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: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 -- spawn eggs
mobs:register_egg("extra_mobs:piglin", S("piglin"), "extra_mobs_spawn_icon_piglin.png", 0) 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)

View File

@ -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)

View File

@ -117,7 +117,7 @@ local strider = {
local controlitem = "" local controlitem = ""
if minetest.get_modpath("mc") then if minetest.get_modpath("mc") then
controlitem = "mc:warped_fungus_stick" controlitem = "mc_warped_fungus_stick:warped_fungus_stick"
else else
controlitem = mobs_mc.items.carrot_on_a_stick controlitem = mobs_mc.items.carrot_on_a_stick
end end

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 984 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 538 B

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 830 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B