Compare commits
No commits in common. "master" and "master" have entirely different histories.
178
cod.lua
|
@ -39,7 +39,6 @@ local cod = {
|
||||||
xp_min = 1,
|
xp_min = 1,
|
||||||
xp_max = 3,
|
xp_max = 3,
|
||||||
armor = 100,
|
armor = 100,
|
||||||
rotate = 90,
|
|
||||||
collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3},
|
collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "extra_mobs_cod.b3d",
|
mesh = "extra_mobs_cod.b3d",
|
||||||
|
@ -68,12 +67,34 @@ local cod = {
|
||||||
},
|
},
|
||||||
visual_size = {x=3, y=3},
|
visual_size = {x=3, y=3},
|
||||||
makes_footstep_sound = false,
|
makes_footstep_sound = false,
|
||||||
swim = true,
|
fly = true,
|
||||||
|
fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source },
|
||||||
breathes_in_water = true,
|
breathes_in_water = true,
|
||||||
jump = false,
|
jump = false,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
runaway = true,
|
runaway = true,
|
||||||
fear_height = 4,
|
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)
|
mobs:register_mob("extra_mobs:cod", cod)
|
||||||
|
@ -81,158 +102,7 @@ mobs:register_mob("extra_mobs:cod", cod)
|
||||||
|
|
||||||
--spawning TODO: in schools
|
--spawning TODO: in schools
|
||||||
local water = mobs_mc.spawn_height.water
|
local water = mobs_mc.spawn_height.water
|
||||||
mobs:spawn_specific(
|
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)
|
||||||
"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
|
--spawn egg
|
||||||
mobs:register_egg("extra_mobs:cod", S("Cod"), "extra_mobs_spawn_icon_cod.png", 0)
|
mobs:register_egg("extra_mobs:cod", S("Cod"), "extra_mobs_spawn_icon_cod.png", 0)
|
||||||
|
|
176
dolphin.lua
|
@ -3,6 +3,15 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--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 dir_to_pitch = function(dir)
|
||||||
local dir2 = vector.normalize(dir)
|
local dir2 = vector.normalize(dir)
|
||||||
|
@ -30,9 +39,8 @@ local dolphin = {
|
||||||
xp_min = 1,
|
xp_min = 1,
|
||||||
xp_max = 3,
|
xp_max = 3,
|
||||||
armor = 100,
|
armor = 100,
|
||||||
walk_chance = 1000,
|
walk_chance = 100,
|
||||||
breath_max = 120,
|
breath_max = 120,
|
||||||
rotate = -90,
|
|
||||||
collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3},
|
collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "extra_mobs_dolphin.b3d",
|
mesh = "extra_mobs_dolphin.b3d",
|
||||||
|
@ -57,7 +65,8 @@ local dolphin = {
|
||||||
},
|
},
|
||||||
visual_size = {x=3, y=3},
|
visual_size = {x=3, y=3},
|
||||||
makes_footstep_sound = false,
|
makes_footstep_sound = false,
|
||||||
swim = true,
|
fly = true,
|
||||||
|
fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source },
|
||||||
breathes_in_water = true,
|
breathes_in_water = true,
|
||||||
jump = false,
|
jump = false,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
|
@ -69,165 +78,20 @@ local dolphin = {
|
||||||
attack_type = "dogfight",
|
attack_type = "dogfight",
|
||||||
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 self.object:get_velocity().y < 5 then
|
||||||
|
self.object:add_velocity({ x = 0 , y = math.random(-.007, .007), z = 0 })
|
||||||
|
end
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
mobs:register_mob("extra_mobs:dolphin", dolphin)
|
mobs:register_mob("extra_mobs:dolphin", dolphin)
|
||||||
|
|
||||||
local water = mobs_mc.spawn_height.water
|
|
||||||
--spawning TODO: in schools
|
--spawning TODO: in schools
|
||||||
mobs:spawn_specific(
|
local water = mobs_mc.spawn_height.water
|
||||||
"extra_mobs:dolphin",
|
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)
|
||||||
"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
|
--spawn egg
|
||||||
mobs:register_egg("extra_mobs:dolphin", S("dolphin"), "extra_mobs_spawn_icon_dolphin.png", 0)
|
mobs:register_egg("extra_mobs:dolphin", S("dolphin"), "extra_mobs_spawn_icon_dolphin.png", 0)
|
||||||
|
|
119
fox.lua
|
@ -2,6 +2,15 @@
|
||||||
--maikerumine
|
--maikerumine
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--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")
|
local S = minetest.get_translator("extra_mobs")
|
||||||
|
|
||||||
|
@ -24,7 +33,6 @@ local fox = {
|
||||||
hp_max = 10,
|
hp_max = 10,
|
||||||
xp_min = 1,
|
xp_min = 1,
|
||||||
xp_max = 2,
|
xp_max = 2,
|
||||||
rotate = -90,
|
|
||||||
armor = {fleshy = 90},
|
armor = {fleshy = 90},
|
||||||
attack_type = "dogfight",
|
attack_type = "dogfight",
|
||||||
damage = 2,
|
damage = 2,
|
||||||
|
@ -47,7 +55,7 @@ local fox = {
|
||||||
},
|
},
|
||||||
animation = {
|
animation = {
|
||||||
stand_speed = 7,
|
stand_speed = 7,
|
||||||
walk_speed = 17,
|
walk_speed = 7,
|
||||||
run_speed = 15,
|
run_speed = 15,
|
||||||
stand_start = 11,
|
stand_start = 11,
|
||||||
stand_end = 11,
|
stand_end = 11,
|
||||||
|
@ -60,12 +68,53 @@ local fox = {
|
||||||
lay_start = 34,
|
lay_start = 34,
|
||||||
lay_end = 34,
|
lay_end = 34,
|
||||||
},
|
},
|
||||||
skittish = true,
|
runaway = true,
|
||||||
on_spawn = function(self)
|
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
|
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"}})
|
self.object:set_properties({textures={"extra_mobs_artic_fox.png", "extra_mobs_trans.png"}})
|
||||||
end
|
end
|
||||||
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,
|
follow = followitem,
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
|
@ -75,66 +124,10 @@ local fox = {
|
||||||
mobs:register_mob("extra_mobs:fox", fox)
|
mobs:register_mob("extra_mobs:fox", fox)
|
||||||
|
|
||||||
-- spawning
|
-- spawning
|
||||||
mobs:spawn_specific(
|
mobs:spawn_specific("extra_mobs:fox", {"mcl_core:dirt_with_grass"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, 0, 500)
|
||||||
"extra_mobs:fox",
|
|
||||||
"overworld",
|
mobs:spawn_specific("extra_mobs:fox", {"mcl_core:dirt_with_grass_snow"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, 0, 500)
|
||||||
"ground",
|
mobs:spawn_specific("extra_mobs:artic_fox", {"mcl_core:snow"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, 0, 500)
|
||||||
{
|
|
||||||
"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
|
-- spawn eggs
|
||||||
mobs:register_egg("extra_mobs:fox", S("Fox"), "extra_mobs_spawn_icon_fox.png", 0)
|
mobs:register_egg("extra_mobs:fox", S("Fox"), "extra_mobs_spawn_icon_fox.png", 0)
|
||||||
|
|
234
glow_squid.lua
|
@ -1,234 +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")
|
|
||||||
|
|
||||||
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,
|
|
||||||
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",
|
|
||||||
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,
|
|
||||||
swim = true,
|
|
||||||
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",
|
|
||||||
"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)
|
|
|
@ -1,328 +0,0 @@
|
||||||
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")
|
|
||||||
|
|
||||||
--------------------
|
|
|
@ -10,7 +10,7 @@ minetest.register_entity("extra_mobs:hb_eye", {
|
||||||
on_activate = function(self)
|
on_activate = function(self)
|
||||||
for _,hb in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 1)) do
|
for _,hb in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 1)) do
|
||||||
if not hb:is_player() then
|
if not hb:is_player() then
|
||||||
minetest.chat_send_all("herobrine: I'm watching you...")
|
minetest.chat_send_all(hb:get_luaentity().name)
|
||||||
end
|
end
|
||||||
if not hb:is_player() and hb:get_luaentity().name == "extra_mobs:herobrine" then
|
if not hb:is_player() and hb:get_luaentity().name == "extra_mobs:herobrine" then
|
||||||
self.object:set_attach(hb, "Head", {x=0,y=-13.5,z=0}, {x=0,y=0,z=0})
|
self.object:set_attach(hb, "Head", {x=0,y=-13.5,z=0}, {x=0,y=0,z=0})
|
||||||
|
|
|
@ -12,7 +12,6 @@ local S = minetest.get_translator("extra_mobs")
|
||||||
local hoglin = {
|
local hoglin = {
|
||||||
type = "monster",
|
type = "monster",
|
||||||
passive = false,
|
passive = false,
|
||||||
--hostile = true,
|
|
||||||
spawn_class = "hostile",
|
spawn_class = "hostile",
|
||||||
hp_min = 40,
|
hp_min = 40,
|
||||||
hp_max = 40,
|
hp_max = 40,
|
||||||
|
@ -22,7 +21,6 @@ local hoglin = {
|
||||||
attack_type = "dogfight",
|
attack_type = "dogfight",
|
||||||
damage = 4,
|
damage = 4,
|
||||||
reach = 3,
|
reach = 3,
|
||||||
rotate = -90,
|
|
||||||
collisionbox = {-.6, -0.01, -.6, .6, 1.4, .6},
|
collisionbox = {-.6, -0.01, -.6, .6, 1.4, .6},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "extra_mobs_hoglin.b3d",
|
mesh = "extra_mobs_hoglin.b3d",
|
||||||
|
@ -117,50 +115,7 @@ baby_hoglin.child = 1
|
||||||
mobs:register_mob("extra_mobs:baby_hoglin", baby_hoglin)]]
|
mobs:register_mob("extra_mobs:baby_hoglin", baby_hoglin)]]
|
||||||
|
|
||||||
-- Regular spawning in the Nether
|
-- 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
|
-- spawn eggs
|
||||||
mobs:register_egg("extra_mobs:hoglin", S("Hoglin"), "extra_mobs_spawn_icon_hoglin.png", 0)
|
mobs:register_egg("extra_mobs:hoglin", S("Hoglin"), "extra_mobs_spawn_icon_hoglin.png", 0)
|
||||||
|
|
6
init.lua
|
@ -10,7 +10,7 @@ if not minetest.get_modpath("mobs_mc_gameconfig") then
|
||||||
end
|
end
|
||||||
|
|
||||||
--Monsters
|
--Monsters
|
||||||
--dofile(path .. "/herobrine.lua")
|
dofile(path .. "/herobrine.lua")
|
||||||
dofile(path .. "/hoglin+zoglin.lua")
|
dofile(path .. "/hoglin+zoglin.lua")
|
||||||
dofile(path .. "/piglin.lua")
|
dofile(path .. "/piglin.lua")
|
||||||
|
|
||||||
|
@ -20,7 +20,5 @@ dofile(path .. "/fox.lua")
|
||||||
dofile(path .. "/cod.lua")
|
dofile(path .. "/cod.lua")
|
||||||
dofile(path .. "/salmon.lua")
|
dofile(path .. "/salmon.lua")
|
||||||
dofile(path .. "/dolphin.lua")
|
dofile(path .. "/dolphin.lua")
|
||||||
dofile(path .. "/glow_squid.lua")
|
|
||||||
|
|
||||||
--Items
|
|
||||||
dofile(path .. "/glow_squid_items.lua")
|
|
||||||
|
|
|
@ -1,156 +0,0 @@
|
||||||
# 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
|
|
22
piglin.lua
|
@ -26,8 +26,8 @@ local mod_bows = minetest.get_modpath("mcl_bows") ~= nil
|
||||||
--###################
|
--###################
|
||||||
local piglin = {
|
local piglin = {
|
||||||
type = "monster",
|
type = "monster",
|
||||||
|
passive = false,
|
||||||
spawn_class = "hostile",
|
spawn_class = "hostile",
|
||||||
hostile = false,
|
|
||||||
hp_min = 16,
|
hp_min = 16,
|
||||||
hp_max = 16,
|
hp_max = 16,
|
||||||
xp_min = 9,
|
xp_min = 9,
|
||||||
|
@ -35,7 +35,6 @@ local piglin = {
|
||||||
armor = {fleshy = 90},
|
armor = {fleshy = 90},
|
||||||
damage = 4,
|
damage = 4,
|
||||||
reach = 3,
|
reach = 3,
|
||||||
rotate = -90,
|
|
||||||
collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3},
|
collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "extra_mobs_piglin.b3d",
|
mesh = "extra_mobs_piglin.b3d",
|
||||||
|
@ -70,11 +69,8 @@ local piglin = {
|
||||||
run_start = 440,
|
run_start = 440,
|
||||||
run_end = 459,
|
run_end = 459,
|
||||||
},
|
},
|
||||||
eye_height = 1.65,
|
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
punch_timer_cooloff = 0.5,
|
|
||||||
pathfinding = 1,
|
|
||||||
on_spawn = function(self)
|
on_spawn = function(self)
|
||||||
self.weapon = self.base_texture[2]
|
self.weapon = self.base_texture[2]
|
||||||
self.gold_items = 0
|
self.gold_items = 0
|
||||||
|
@ -102,10 +98,9 @@ local piglin = {
|
||||||
if self.state ~= "attack" then
|
if self.state ~= "attack" then
|
||||||
self._attacked_by_player = false
|
self._attacked_by_player = false
|
||||||
end
|
end
|
||||||
if self.attacking then
|
if self.state == "attack" and self.attack:is_player() then
|
||||||
if self.state == "attack" and self.attacking:is_player() then
|
|
||||||
for i=1, 6 do
|
for i=1, 6 do
|
||||||
local stack = self.attacking:get_inventory():get_stack("armor", i)
|
local stack = self.attack:get_inventory():get_stack("armor", i)
|
||||||
local item = stack:get_name()
|
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 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
|
if self._attacked_by_player == false then
|
||||||
|
@ -114,7 +109,6 @@ local piglin = {
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
on_rightclick = function(self, clicker)
|
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
|
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
|
||||||
|
@ -143,11 +137,9 @@ local piglin = {
|
||||||
do_punch = function(self, hitter)
|
do_punch = function(self, hitter)
|
||||||
if hitter:is_player() then
|
if hitter:is_player() then
|
||||||
self._attacked_by_player = true
|
self._attacked_by_player = true
|
||||||
self.state = "attack"
|
|
||||||
self.attacking = hitter
|
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
attack_type = "shoot",
|
attack_type = "dogshoot",
|
||||||
arrow = "mcl_bows:arrow_entity",
|
arrow = "mcl_bows:arrow_entity",
|
||||||
shoot_arrow = function(self, pos, dir)
|
shoot_arrow = function(self, pos, dir)
|
||||||
if mod_bows then
|
if mod_bows then
|
||||||
|
@ -179,7 +171,7 @@ sword_piglin.drops = {
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,},
|
max = 1,},
|
||||||
}
|
}
|
||||||
sword_piglin.attack_type = "punch"
|
sword_piglin.attack_type = "dogfight"
|
||||||
sword_piglin.animation = {
|
sword_piglin.animation = {
|
||||||
stand_speed = 30,
|
stand_speed = 30,
|
||||||
walk_speed = 30,
|
walk_speed = 30,
|
||||||
|
@ -272,8 +264,8 @@ 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)
|
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)
|
mobs:register_egg("extra_mobs:piglin_brute", S("piglin Brute"), "extra_mobs_spawn_icon_piglin.png", 0)
|
||||||
|
|
171
salmon.lua
|
@ -3,17 +3,6 @@
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--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")
|
local S = minetest.get_translator("extra_mobs")
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
|
@ -30,13 +19,11 @@ local salmon = {
|
||||||
xp_min = 1,
|
xp_min = 1,
|
||||||
xp_max = 3,
|
xp_max = 3,
|
||||||
armor = 100,
|
armor = 100,
|
||||||
walk_chance = 1000,
|
|
||||||
rotate = -90,
|
|
||||||
collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.79, 0.4},
|
collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.79, 0.4},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "extra_mobs_salmon.b3d",
|
mesh = "extra_mobs_salmon.b3d",
|
||||||
textures = {
|
textures = {
|
||||||
{"extra_mobs_salmon.png", "extra_mobs_salmon.png"}
|
{"extra_mobs_salmon.png"}
|
||||||
},
|
},
|
||||||
sounds = {
|
sounds = {
|
||||||
},
|
},
|
||||||
|
@ -60,7 +47,8 @@ local salmon = {
|
||||||
},
|
},
|
||||||
visual_size = {x=3, y=3},
|
visual_size = {x=3, y=3},
|
||||||
makes_footstep_sound = false,
|
makes_footstep_sound = false,
|
||||||
swim = true,
|
fly = true,
|
||||||
|
fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source },
|
||||||
breathes_in_water = true,
|
breathes_in_water = true,
|
||||||
jump = false,
|
jump = false,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
|
@ -73,158 +61,7 @@ mobs:register_mob("extra_mobs:salmon", salmon)
|
||||||
|
|
||||||
--spawning TODO: in schools
|
--spawning TODO: in schools
|
||||||
local water = mobs_mc.spawn_height.water
|
local water = mobs_mc.spawn_height.water
|
||||||
mobs:spawn_specific(
|
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)
|
||||||
"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
|
--spawn egg
|
||||||
mobs:register_egg("extra_mobs:salmon", S("Salmon"), "extra_mobs_spawn_icon_salmon.png", 0)
|
mobs:register_egg("extra_mobs:salmon", S("Salmon"), "extra_mobs_spawn_icon_salmon.png", 0)
|
||||||
|
|
53
strider.lua
|
@ -22,7 +22,6 @@ local strider = {
|
||||||
attack_type = "dogfight",
|
attack_type = "dogfight",
|
||||||
damage = 2,
|
damage = 2,
|
||||||
reach = 2,
|
reach = 2,
|
||||||
rotate = -90,
|
|
||||||
collisionbox = {-.6, -0.01, -.6, .6, 1.94, .6},
|
collisionbox = {-.6, -0.01, -.6, .6, 1.94, .6},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "extra_mobs_strider.b3d",
|
mesh = "extra_mobs_strider.b3d",
|
||||||
|
@ -36,7 +35,7 @@ local strider = {
|
||||||
makes_footstep_sound = true,
|
makes_footstep_sound = true,
|
||||||
walk_velocity = 2,
|
walk_velocity = 2,
|
||||||
run_velocity = 4,
|
run_velocity = 4,
|
||||||
skittish = true,
|
runaway = true,
|
||||||
drops = {
|
drops = {
|
||||||
{name = "mcl_mobsitems:string",
|
{name = "mcl_mobsitems:string",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
|
@ -125,6 +124,7 @@ local strider = {
|
||||||
if wielditem:get_name() ~= controlitem then
|
if wielditem:get_name() ~= controlitem then
|
||||||
if mobs:feed_tame(self, clicker, 1, true, true) then return end
|
if mobs:feed_tame(self, clicker, 1, true, true) then return end
|
||||||
end
|
end
|
||||||
|
if mobs:protect(self, clicker) then return end
|
||||||
|
|
||||||
if self.child then
|
if self.child then
|
||||||
return
|
return
|
||||||
|
@ -190,6 +190,9 @@ local strider = {
|
||||||
inv:set_stack("main",self.driver:get_wield_index(), wielditem)
|
inv:set_stack("main",self.driver:get_wield_index(), wielditem)
|
||||||
end
|
end
|
||||||
return
|
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
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
@ -212,51 +215,9 @@ baby_strider.run_velocity = 2.4
|
||||||
baby_strider.child = 1
|
baby_strider.child = 1
|
||||||
|
|
||||||
mobs:register_mob("extra_mobs:baby_strider", baby_strider)
|
mobs:register_mob("extra_mobs:baby_strider", baby_strider)
|
||||||
--[[
|
|
||||||
-- Regular spawning in the Nether
|
-- Regular spawning in the Nether
|
||||||
mobs:spawn_specific(
|
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)
|
||||||
"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
|
-- spawn eggs
|
||||||
mobs:register_egg("extra_mobs:strider", S("Strider"), "extra_mobs_spawn_icon_strider.png", 0)
|
mobs:register_egg("extra_mobs:strider", S("Strider"), "extra_mobs_spawn_icon_strider.png", 0)
|
||||||
|
|
Before Width: | Height: | Size: 407 B |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 170 B |
Before Width: | Height: | Size: 175 B |
Before Width: | Height: | Size: 175 B |
Before Width: | Height: | Size: 175 B |