Compare commits

...

33 Commits

Author SHA1 Message Date
00146154b5 Merge remote-tracking branch 'upstream/master' 2022-08-26 15:18:27 +02:00
1ee293dae0 add screenshot.jpg 2022-08-25 13:24:32 +01:00
4d88f45109 place lava flan death flame in air position only 2022-08-21 08:01:07 +01:00
a097ee9388 harden lava flan code 2022-08-11 07:39:25 +01:00
1ba32b39eb add can_leap setting to mese monster 2022-07-12 08:38:04 +01:00
7ade16b4d1 add arrow_override changes to mese monster arrows to make them stronger/faster the deeper you go 2022-07-07 15:58:07 +01:00
4be774624c Added new mese monster types by SirrobZeroone 2022-07-07 09:06:42 +01:00
b3e50d295c Merge remote-tracking branch 'upstream/master' 2022-01-22 20:06:05 +01:00
ae0e50bb69 add spanish translation (thanks mckaygerhard) 2022-01-22 08:30:02 +00:00
f792de52af update translation checks 2022-01-20 08:56:28 +00:00
cab9cf25c6 Merge remote-tracking branch 'upstream/master' 2021-11-26 21:44:00 +01:00
23e24bff06 fix intllib return 2021-11-14 14:21:53 +00:00
f39fc78e4a Merge remote-tracking branch 'upstream/master' 2021-09-21 23:09:27 +02:00
cd201150b6 add nether varients of dungeon master 2021-09-01 08:05:13 +01:00
70d92995bb Merge remote-tracking branch 'upstream/master' 2021-07-26 22:23:25 +02:00
1c4ce9e402 make default optional dependency 2021-07-24 22:21:37 +01:00
69ca619580 Merge remote-tracking branch 'upstream/master' 2021-06-20 17:16:01 +02:00
5009e7439d lava flan heals while in lava 2021-06-14 09:38:32 +01:00
9b3c1e156f fire spirit additions 2021-06-07 17:45:41 +01:00
949bfec484 initial fire spirit upload 2021-05-12 10:11:34 +01:00
7bd9080eda Merge remote-tracking branch 'upstream/master' 2021-04-08 13:29:19 +02:00
e39d06b2d8 add fire damage to obsidian flan 2021-04-05 08:56:12 +01:00
b9666dffb4 add fire_damage = 0 to lava flan 2021-04-05 08:51:13 +01:00
2baa1cc77d Merge remote-tracking branch 'upstream/master' 2021-03-12 12:30:34 +01:00
095d8753e0 add Tree Creeper 2021-03-02 18:04:01 +00:00
476ad97935 update mese monster texture 2021-03-02 13:54:26 +00:00
5723ba508e add Land Guards 2021-03-02 13:35:17 +00:00
57f40cf4b1 make cave spider tiny 2021-03-01 19:47:47 +00:00
22308b4c94 add different dirt and stone type monsters 2021-03-01 12:27:12 +00:00
05ccc87150 add additional tree monster types for ethereal trees 2021-03-01 11:00:57 +00:00
b1a94c5abc update spider types, have jungle tarantula spit webs 2021-03-01 10:24:56 +00:00
2129b4731f Merge remote-tracking branch 'upstream/master' 2021-02-07 13:11:50 +01:00
9835105cf9 fix typo in mod.conf 2021-02-01 08:07:59 +00:00
48 changed files with 967 additions and 3158 deletions

View File

@ -1,5 +1,5 @@
default
mobs
default?
lucky_block?
toolranks?
intllib?

View File

@ -1,5 +1,15 @@
local S = mobs.intllib
local S = mobs.intllib_monster
local dirt_types = {
{ nodes = {"ethereal:dry_dirt"},
skins = {"mobs_dirt_monster3.png"},
drops = {
{name = "ethereal:dry_dirt", chance = 1, min = 0, max = 2}
}
}
}
-- Dirt Monster by PilzAdam
@ -19,6 +29,7 @@ mobs:register_mob("mobs_monster:dirt_monster", {
mesh = "mobs_stone_monster.b3d",
textures = {
{"mobs_dirt_monster.png"},
{"mobs_dirt_monster2.png"},
},
blood_texture = "default_dirt.png",
makes_footstep_sound = true,
@ -49,19 +60,39 @@ mobs:register_mob("mobs_monster:dirt_monster", {
punch_start = 40,
punch_end = 63,
},
-- check surrounding nodes and spawn a specific monster
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
for n = 1, #dirt_types do
tmp = dirt_types[n]
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = tmp.skins
self.object:set_properties({textures = tmp.skins})
if tmp.drops then
self.drops = tmp.drops
end
return true
end
end
return true -- run only once, false/nil runs every activation
end
})
local spawn_on = "default:dirt_with_grass"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:gray_dirt"
end
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:dirt_monster",
nodes = {spawn_on},
nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"},
min_light = 0,
max_light = 7,
chance = 6000,

View File

@ -1,5 +1,15 @@
local S = mobs.intllib
local S = mobs.intllib_monster
local master_types = {
{ nodes = {"nether:rack"},
skins = {"mobs_dungeon_master_nether.png"},
},
{ nodes = {"nether:rack_deep"},
skins = {"mobs_dungeon_master_netherdeep.png"},
}
}
-- Dungeon Master by PilzAdam
@ -16,8 +26,8 @@ mobs:register_mob("mobs_monster:dungeon_master", {
shoot_interval = 2.2,
arrow = "mobs_monster:fireball",
shoot_offset = 1,
hp_min = 22,
hp_max = 45,
hp_min = 42,
hp_max = 75,
armor = 60,
collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7},
visual = "mesh",
@ -62,13 +72,39 @@ mobs:register_mob("mobs_monster:dungeon_master", {
speed_normal = 15,
speed_run = 15,
},
-- check surrounding nodes and spawn a specific monster
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
for n = 1, #master_types do
tmp = master_types[n]
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = tmp.skins
self.object:set_properties({textures = tmp.skins})
if tmp.drops then
self.drops = tmp.drops
end
return true
end
end
return true -- run only once, false/nil runs every activation
end
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:dungeon_master",
nodes = {"default:stone", "default:sandstone", "nether:netherrack"},
nodes = {"default:stone", "nether:rack", "nether:rack_deep", "hell:hellrack"},
max_light = 5,
chance = 9000,
active_object_count = 1,

98
fire_spirit.lua Normal file
View File

@ -0,0 +1,98 @@
local S = mobs.intllib_monster
local mob_drops = {
{name = "fireflies:firefly", chance = 1, min = 1, max = 1}
}
if minetest.get_modpath("ethereal") then
table.insert(mob_drops,
{name = "ethereal:fire_dust", chance = 1, min = 1, max = 1})
end
-- Fire Spirit
mobs:register_mob("mobs_monster:fire_spirit", {
type = "monster",
passive = false,
attack_type = "dogfight",
pathfinding = true,
reach = 2,
damage = 4,
hp_min = 25,
hp_max = 45,
armor = 100,
collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
visual_scale = {x = 0.5, y = 0.5, z = 0.5},
visual = "sprite",
textures = {
{"mobs_fire_spirit.png"}
},
glow = 14,
blood_texture = "fire_basic_flame.png",
immune_to = {
{"bucket:bucket_water", 1},
{"bucket:bucket_river_water", 1},
{"all"}
},
makes_footstep_sound = false,
sounds = {
random = "fire_fire",
damage = "fire_extinguish_flame",
death = "fire_extinguish_flame"
},
view_range = 14,
walk_velocity = 2,
run_velocity = 3,
jump = true,
jump_height = 6,
drops = mob_drops,
water_damage = 1,
lava_damage = 0,
fire_damage = 0,
light_damage = 0,
fall_damage = false,
fear_height = 8,
animation = {},
on_die = function(self, pos)
mobs:effect(pos, 20, "tnt_smoke.png", 3, 5, 2, 0.5, nil, false)
self.object:remove()
end,
do_custom = function(self, dtime)
self.flame_timer = (self.flame_timer or 0) + dtime
if self.flame_timer < 0.25 then
return
end
self.flame_timer = 0
local pos = self.object:get_pos()
-- pos, amount, texture, min_size, max_size, radius, gravity, glow, fall
mobs:effect(pos, 5, "fire_basic_flame.png", 1, 2, 0.1, 0.2, 14, nil)
end
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:fire_spirit",
nodes = {"default:obsidian", "caverealms:hot_cobble"},
neighbors = {"group:fire"},
min_light = 12,
max_light = 15,
chance = 1500,
active_object_count = 1,
max_height = -150
})
end
mobs:register_egg("mobs_monster:fire_spirit", S("Fire Spirit"), "fire_basic_flame.png", 1)

View File

@ -2,10 +2,32 @@
-- Load support for intllib.
local path = minetest.get_modpath(minetest.get_current_modname()) .. "/"
local S = minetest.get_translator and minetest.get_translator("mobs_monster") or
dofile(path .. "intllib.lua")
local S
mobs.intllib = S
-- Check for translation method
local S
if minetest.get_translator ~= nil then
S = minetest.get_translator("mobs_monster") -- 5.x translation function
else
if minetest.get_modpath("intllib") then
dofile(minetest.get_modpath("intllib") .. "/init.lua")
if intllib.make_gettext_pair then
gettext, ngettext = intllib.make_gettext_pair() -- new gettext method
else
gettext = intllib.Getter() -- old text file method
end
S = gettext
else -- boilerplate function
S = function(str, ...)
local args = {...}
return str:gsub("@%d+", function(match)
return args[tonumber(match:sub(2))]
end)
end
end
end
mobs.intllib_monster = S
-- Check for custom mob spawn file
@ -29,6 +51,8 @@ dofile(path .. "lava_flan.lua") -- Zeg9
dofile(path .. "mese_monster.lua")
dofile(path .. "spider.lua") -- AspireMint
dofile(path .. "minotaur.lua") -- NALC(sys4 fork MFF) Kalabasa
dofile(path .. "land_guard.lua")
dofile(path .. "fire_spirit.lua")
-- Load custom spawning
@ -41,4 +65,4 @@ end
dofile(path .. "lucky_block.lua")
print (S("[MOD] Mobs Redo Monsters loaded"))
print ("[MOD] Mobs Redo Monsters loaded")

View File

@ -1,3 +0,0 @@
-- Support for the old multi-load method
dofile(minetest.get_modpath("intllib").."/init.lua")

127
land_guard.lua Normal file
View File

@ -0,0 +1,127 @@
local S = mobs.intllib_monster
local guard_types = {
{ nodes = {
"default:snow", "default:snowblock", "default:ice",
"default:dirt_with_snow"
},
skins = {"mobs_land_guard6.png", "mobs_land_guard7.png", "mobs_land_guard8.png"},
drops = {
{name = "default:ice", chance = 1, min = 1, max = 4},
{name = "mobs:leather", chance = 2, min = 0, max = 2},
{name = "default:diamond", chance = 4, min = 0, max = 2},
},
},
{ nodes = {
"ethereal:dry_dirt", "default:sand", "default:desert_sand",
"default:dry_dirt_with_dry_grass", "default:dry_dirt"
},
skins = {"mobs_land_guard4.png", "mobs_land_guard5.png"},
drops = {
{name = "default:sandstone", chance = 1, min = 1, max = 4},
{name = "mobs:leather", chance = 2, min = 0, max = 2},
{name = "default:mese_crystal", chance = 4, min = 0, max = 2},
},
}
}
-- Land Guard
mobs:register_mob("mobs_monster:land_guard", {
type = "monster",
passive = false,
attack_type = "dogfight",
group_attack = true,
reach = 3,
damage = 15,
hp_min = 30,
hp_max = 65,
armor = 50,
collisionbox = {-0.5, -1.01, -0.5, 0.5, 1.6, 0.5},
visual_size = {x = 1, y = 1},
visual = "mesh",
mesh = "mobs_dungeon_master.b3d",
textures = {
{"mobs_land_guard.png"},
{"mobs_land_guard2.png"},
{"mobs_land_guard3.png"}
},
makes_footstep_sound = true,
sounds = {
random = "mobs_dungeonmaster",
},
walk_velocity = 1.5,
run_velocity = 3.4,
jump = true,
jump_height = 2.0,
floats = 0,
view_range = 15,
drops = {
{name = "mobs:leather", chance = 2, min = 0, max = 2},
{name = "default:mese_crystal", chance = 3, min = 0, max = 2},
{name = "default:diamond", chance = 4, min = 0, max = 1},
},
water_damage = 0,
lava_damage = 6,
light_damage = 0,
fear_height = 8,
animation = {
stand_start = 0,
stand_end = 19,
walk_start = 20,
walk_end = 35,
punch_start = 36,
punch_end = 48,
speed_normal = 15,
speed_run = 20,
},
-- check surrounding nodes and spawn a specific guard
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
for n = 1, #guard_types do
tmp = guard_types[n]
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = { tmp.skins[math.random(#tmp.skins)] }
self.object:set_properties({textures = self.base_texture})
self.docile_by_day = tmp.docile
if tmp.drops then
self.drops = tmp.drops
end
return true
end
end
return true -- run only once, false/nil runs every activation
end,
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:land_guard",
nodes = {
"default:snow", "default:ice", "default:stone",
"default:dry_dirt_with_dry_grass", "ethereal:dry_dirt"
},
max_light = 7,
chance = 25000,
min_height = 0,
active_object_count = 1,
})
end
mobs:register_egg("mobs_monster:land_guard", S("Land Guard"), "default_ice.png", 1)

View File

@ -1,6 +1,5 @@
local S = mobs.intllib
local S = mobs.intllib_monster
-- Lava Flan by Zeg9 (additional textures by JurajVajda)
@ -19,13 +18,13 @@ mobs:register_mob("mobs_monster:lava_flan", {
textures = {
{"zmobs_lava_flan.png"},
{"zmobs_lava_flan2.png"},
{"zmobs_lava_flan3.png"},
{"zmobs_lava_flan3.png"}
},
blood_texture = "fire_basic_flame.png",
makes_footstep_sound = false,
sounds = {
random = "mobs_lavaflan",
war_cry = "mobs_lavaflan",
war_cry = "mobs_lavaflan"
},
walk_velocity = 0.5,
run_velocity = 2,
@ -33,13 +32,14 @@ mobs:register_mob("mobs_monster:lava_flan", {
view_range = 10,
floats = 1,
drops = {
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1}
},
water_damage = 8,
lava_damage = 0,
lava_damage = -1,
fire_damage = 0,
light_damage = 0,
immune_to = {
{"mobs:pick_lava", -2}, -- lava pick heals 2 health
{"mobs:pick_lava", -2} -- lava pick heals 2 health
},
fly_in = {"default:lava_source", "default:lava_flowing"},
animation = {
@ -52,8 +52,10 @@ mobs:register_mob("mobs_monster:lava_flan", {
run_start = 20,
run_end = 28,
punch_start = 20,
punch_end = 28,
punch_end = 28
},
-- custom death function
on_die = function(self, pos)
local cod = self.cause_of_death or {}
@ -71,21 +73,27 @@ mobs:register_mob("mobs_monster:lava_flan", {
self.object:remove()
if math.random(4) == 1 then
mobs:add_mob(pos, {
name = "mobs_monster:obsidian_flan",
})
mobs:add_mob(pos, {name = "mobs_monster:obsidian_flan"})
end
else
if minetest.get_node(pos).name == "air" then
mobs:effect(pos, 40, "fire_basic_flame.png", 2, 3, 2, 5, 10, nil)
local nods = minetest.find_nodes_in_area(
{x = pos.x, y = pos.y + 1, z = pos.z},
{x = pos.x, y = pos.y, z = pos.z}, "air")
-- place flame if position empty and flame exists
if nods and #nods > 0
and minetest.registered_nodes["fire:basic_flame"] then
pos = nods[math.random(#nods)]
minetest.set_node(pos, {name = "fire:basic_flame"})
end
mobs:effect(pos, 40, "fire_basic_flame.png", 2, 3, 2, 5, 10, nil)
self.object:remove()
end
end,
glow = 10,
glow = 10
})
@ -95,21 +103,24 @@ mobs:spawn({
nodes = {"default:lava_source"},
chance = 1500,
active_object_count = 1,
max_height = 0,
max_height = 0
})
end
-- add spawn egg
mobs:register_egg("mobs_monster:lava_flan", S("Lava Flan"), "default_lava.png", 1)
mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan") -- compatibility
-- compatibility alias, only needed for servers who used the old mobs mod
mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan")
-- lava orb
minetest.register_craftitem(":mobs:lava_orb", {
description = S("Lava orb"),
inventory_image = "zmobs_lava_orb.png",
light_source = 14,
light_source = 14
})
minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")
@ -117,7 +128,7 @@ minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")
minetest.register_craft({
type = "fuel",
recipe = "mobs:lava_orb",
burntime = 80,
burntime = 80
})
@ -173,9 +184,13 @@ minetest.register_tool(":mobs:pick_lava", {
inventory_image = "mobs_pick_lava.png",
tool_capabilities = {
full_punch_interval = 0.4,
max_drop_level=3,
groupcaps={
cracky = {times={[1]=1.80, [2]=0.80, [3]=0.40}, uses=40, maxlevel=3},
max_drop_level = 3,
groupcaps = {
cracky = {
times = {[1] = 1.80, [2] = 0.80, [3] = 0.40},
uses = 40,
maxlevel = 3
}
},
damage_groups = {fleshy = 6, fire = 1},
},
@ -188,7 +203,7 @@ minetest.register_craft({
recipe = {
{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
{"", "default:obsidian_shard", ""},
{"", "default:obsidian_shard", ""},
{"", "default:obsidian_shard", ""}
}
})
@ -221,13 +236,12 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
visual = "mesh",
mesh = "zmobs_lava_flan.x",
textures = {
{"mobs_obsidian_flan.png"},
{"mobs_obsidian_flan.png"}
},
blood_texture = "default_obsidian.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_lavaflan",
-- war_cry = "mobs_lavaflan",
random = "mobs_lavaflan"
},
walk_velocity = 0.1,
run_velocity = 0.5,
@ -236,10 +250,11 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
floats = 0,
drops = {
{name = "default:obsidian_shard", chance = 1, min = 1, max = 5},
{name = "default:obsidian", chance = 3, min = 0, max = 2},
{name = "default:obsidian", chance = 3, min = 0, max = 2}
},
water_damage = 0,
lava_damage = 8,
fire_damage = 0,
light_damage = 0,
animation = {
speed_normal = 15,
@ -251,10 +266,12 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
run_start = 20,
run_end = 28,
punch_start = 20,
punch_end = 28,
punch_end = 28
}
})
-- add spawn egg
mobs:register_egg("mobs_monster:obsidian_flan", S("Obsidian Flan"),
"default_obsidian.png", 1)
@ -264,11 +281,9 @@ local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
-- mese arrow (weapon)
mobs:register_arrow("mobs_monster:obsidian_arrow", {
visual = "sprite",
-- visual = "wielditem",
visual_size = {x = 0.5, y = 0.5},
textures = {"default_obsidian_shard.png"},
velocity = 6,
-- rotate = 180,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
@ -294,9 +309,11 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
local radius = 1
local def = minetest.registered_nodes[node]
if def then
node = { name = node }
node = {name = node}
end
if def and def.tiles and def.tiles[1] then
texture = def.tiles[1]
end
@ -323,7 +340,7 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
texture = texture,
-- ^ only as fallback for clients without support for `node` parameter
node = node,
collisiondetection = true,
collisiondetection = true
})
minetest.set_node(pos, {name = "air"})

View File

@ -30,3 +30,15 @@ mobs.fireball.png was originally made by Sapier and edited by Benrob:
--
-- (c) Sapier
-- Contact sapier a t gmx net
Textures created by wwar (CC0)
mobs_dungeon_master_nether.png
mobs_dungeon_master_netherdeep.png
Textures and Model created by SirrobZeroone (CC0)
mobs_mese_monster_red.png
mobs_mese_monster_blue.png
mobs_mese_monster_green.png
mobs_mese_monster_purple.png
mobs_mese_arrow.png
mobs_mese_monster.b3d

14
locale/mobs_monster.es.tr Normal file
View File

@ -0,0 +1,14 @@
# textdomain:mobs_monster
Cobweb=Telarania
Dirt Monster=Mounstro de tierra
Dungeon Master=Maestro de mazmorra
Lava Flan=Flan de lava
Lava Pickaxe=Hacha de lava
Lava orb=Esfera de lava
Mese Monster=Mounstro de mese
#Obsidian Flan=
Oerkki=Oerkki
Sand Monster=Mounstro de arena
Spider=Arania
Stone Monster=Mounstro de piedra
Tree Monster=Mounstro de madera

View File

@ -1,39 +1,183 @@
local S = mobs.intllib_monster
local S = mobs.intllib
local mese_monster_types = {
-- mese_monster_red
{
y_min = -20,
y_max = -1000,
damage = 2,
reach = 3,
hp_min = 15,
hp_max = 25,
armor = 80,
skins = {"mobs_mese_monster_red.png"},
immune_to = {
{"default:pick_wood", 0},
{"default:shovel_wood", 0},
{"default:axe_wood", 0},
{"default:sword_wood", 0}
},
drops = {
{name = "default:mese_crystal", chance = 15, min = 0, max = 1},
{name = "default:mese_crystal_fragment", chance = 2, min = 0, max = 1}
},
arrow_override = function(self)
self.velocity = 6
self.damage = 2
end
},
-- mese_monster_green
{
y_min = -1001,
y_max = -2000,
damage = 3,
reach = 3,
hp_min = 20,
hp_max = 30,
armor = 75,
skins = {"mobs_mese_monster_green.png"},
immune_to = {
{"default:pick_wood", 0},
{"default:shovel_wood", 0},
{"default:axe_wood", 0},
{"default:sword_wood", 0},
{"default:pick_stone", 0},
{"default:shovel_stone", 0},
{"default:axe_stone", 0},
{"default:sword_stone", 0}
},
drops = {
{name = "default:mese_crystal", chance = 12, min = 0, max = 1},
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 1}
},
arrow_override = function(self)
self.velocity = 6
self.damage = 2
end
},
-- mese_monster_blue
{
y_min = -2001,
y_max = -3000,
damage = 3,
reach = 4,
hp_min = 25,
hp_max = 35,
armor = 70,
skins = {"mobs_mese_monster_blue.png"},
immune_to = {
{"default:pick_wood", 0},
{"default:shovel_wood", 0},
{"default:axe_wood", 0},
{"default:sword_wood", 0},
{"default:pick_stone", 0},
{"default:shovel_stone", 0},
{"default:axe_stone", 0},
{"default:sword_stone", 0},
{"default:pick_bronze", 0},
{"default:shovel_bronze", 0},
{"default:axe_bronze", 0},
{"default:sword_bronze", 0}
},
drops = {
{name = "default:mese", chance = 15, min = 0, max = 1},
{name = "default:mese_crystal", chance = 9, min = 0, max = 2},
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 2}
},
arrow_override = function(self)
self.velocity = 7
self.damage = 3
end
},
-- mese_monster_purple
{
y_min = -3000,
y_max = -31000,
damage = 4,
reach = 5,
hp_min = 30,
hp_max = 40,
armor = 60,
skins = {"mobs_mese_monster_purple.png"},
immune_to = {
{"default:pick_wood", 0},
{"default:shovel_wood", 0},
{"default:axe_wood", 0},
{"default:sword_wood", 0},
{"default:pick_stone", 0},
{"default:shovel_stone", 0},
{"default:axe_stone", 0},
{"default:sword_stone", 0},
{"default:pick_bronze", 0},
{"default:shovel_bronze", 0},
{"default:axe_bronze", 0},
{"default:sword_bronze", 0},
{"default:pick_steel", 0},
{"default:shovel_steel", 0},
{"default:axe_steel", 0},
{"default:sword_steel", 0}
},
drops = {
{name = "default:mese", chance = 9, min = 0, max = 1},
{name = "default:mese_crystal", chance = 6, min = 0, max = 2},
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 3}
},
arrow_override = function(self)
self.velocity = 8
self.damage = 4
end
}}
-- Mese Monster by Zeg9
-- Mese Monster by SirrobZeroone
mobs:register_mob("mobs_monster:mese_monster", {
type = "monster",
visual_size = {x = 10, y = 10}, -- Got scale wrong in blender by factor of 10 - S01
passive = false,
damage = 3,
attack_type = "shoot",
attack_type = "dogshoot",
damage = 4,
reach = 4,
shoot_interval = 0.5,
arrow = "mobs_monster:mese_arrow",
shoot_offset = 2,
shoot_offset = 0.75,
--arrow_override = function(self)
-- self.velocity = 20
--end,
knock_back = true,
hp_min = 10,
hp_max = 25,
armor = 80,
collisionbox = {-0.5, -1.5, -0.5, 0.5, 0.5, 0.5},
collisionbox = {-0.75, -0.5, -0.75, 0.75, 2.5, 0.75},
visual = "mesh",
mesh = "zmobs_mese_monster.x",
mesh = "mobs_mese_monster.b3d",
textures = {
{"zmobs_mese_monster.png"},
{"mobs_mese_monster_purple.png"}
},
blood_texture = "default_mese_crystal_fragment.png",
makes_footstep_sound = false,
sounds = {
random = "mobs_mesemonster",
damage = "default_glass_footstep"
},
view_range = 10,
walk_velocity = 0.5,
run_velocity = 2,
walk_velocity = 1,
run_velocity = 3,
jump = true,
jump_height = 8,
can_leap = true,
fall_damage = 0,
fall_speed = -6,
stepheight = 2.1,
immune_to = {
{"default:pick_wood", 0},
{"default:shovel_wood", 0},
{"default:axe_wood", 0},
{"default:sword_wood", 0}
},
drops = {
{name = "default:mese_crystal", chance = 9, min = 0, max = 2},
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 2},
@ -44,17 +188,129 @@ mobs:register_mob("mobs_monster:mese_monster", {
lava_damage = 1,
light_damage = 0,
animation = {
speed_normal = 15,
speed_run = 15,
stand_start = 0,
stand_end = 14,
walk_start = 15,
walk_end = 38,
run_start = 40,
run_end = 63,
punch_start = 40,
punch_end = 63,
speed_normal = 18,
speed_run = 18,
walk_start = 10,
walk_end = 41,
walk_speed = 20,
run_start = 10,
run_end = 41,
run_speed = 30,
stand_start = 60,
stand_end = 83,
shoot_start = 100,
shoot_end = 113,
die_start = 125,
die_end = 141,
death_speed = 25,
die_loop = false,
jump_start = 150 ,
jump_end = 168,
jump_loop = false,
punch_start = 175,
punch_end = 189
},
on_spawn = function(self)
local pos = self.object:get_pos()
-- quick update self function
local function update(self, def)
self.object:set_properties({textures = def.skins})
-- added by mobs_redo
self.hp_min = def.hp_min
self.hp_max = def.hp_max
self.health = math.random(self.hp_min, self.hp_max)
self.damage = def.damage
self.reach = def.reach
self.armor = def.armor
self.immune_to = def.immune_to
self.drops = def.drops
self.arrow_override = def.arrow_override
end
-- Normal spawn case
for name, def in pairs(mese_monster_types) do
if pos.y <= def.y_min and pos.y >= def.y_max then
update(self, def)
return true
end
end
--[[
-- player using egg
-- direction sets type N = red, E = green, S = blue, W = purple
-- Just for fun - S01
local objects = minetest.get_objects_inside_radius(pos, 10)
for i, obj in ipairs(objects) do
if minetest.is_player(obj)
and obj:get_wielded_item():get_name() == "mobs_monster:mese_monster" then
local degree = (360 + math.deg(obj:get_look_horizontal())) % 360
local compass_sel
if degree > 45 and degree <= 135 then compass_sel = 4
elseif degree > 135 and degree <= 225 then compass_sel = 3
elseif degree > 225 and degree <= 315 then compass_sel = 2
else compass_sel = 1
end
local def = mese_monster_types[compass_sel]
update(self, def)
return true
end
end
]]
-- catch case if all else fails random it
update(self, mese_monster_types[math.random(4)])
return true
end
})
-- mese arrow (weapon)
minetest.register_craftitem("mobs_monster:mese_crystal_fragment_arrow", {
description = S("Mese Monster Arrow"),
inventory_image = "mobs_mese_arrow.png",
groups = {not_in_creative_inventory = 1}
})
mobs:register_arrow("mobs_monster:mese_arrow", {
visual = "wielditem",
visual_size = {x = 0.25, y = 0.25},
textures = {"mobs_monster:mese_crystal_fragment_arrow"},
velocity = 8,
rotate = 180,
damage = 2,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = self.damage},
}, nil)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = self.damage},
}, nil)
end,
hit_node = function(self, pos, node)
end
})
@ -65,7 +321,7 @@ mobs:spawn({
max_light = 7,
chance = 5000,
active_object_count = 1,
max_height = -20,
max_height = -20
})
end
@ -76,40 +332,10 @@ mobs:register_egg("mobs_monster:mese_monster", S("Mese Monster"), "default_mese_
mobs:alias_mob("mobs:mese_monster", "mobs_monster:mese_monster") -- compatiblity
-- mese arrow (weapon)
mobs:register_arrow("mobs_monster:mese_arrow", {
visual = "sprite",
-- visual = "wielditem",
visual_size = {x = 0.5, y = 0.5},
textures = {"default_mese_crystal_fragment.png"},
--textures = {"default:mese_crystal_fragment"},
velocity = 6,
-- rotate = 180,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 2},
}, nil)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 2},
}, nil)
end,
hit_node = function(self, pos, node)
end
})
-- 9x mese crystal fragments = 1x mese crystal
local f = "default:mese_crystal_fragment"
minetest.register_craft({
output = "default:mese_crystal",
recipe = {
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
}
recipe = {{f, f, f}, {f, f, f}, {f, f, f}}
})

View File

@ -1,4 +1,4 @@
name = mobs_monster
depends = default, mobs
optional depends = lucky_block, toolranks, intllib
description = Adds many types of monster.
depends = mobs
optional_depends = default, lucky_block, toolranks, intllib
description = Adds many types of monsters.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,5 @@
local S = mobs.intllib
local S = mobs.intllib_monster
-- Oerkki by PilzAdam
@ -20,6 +19,7 @@ mobs:register_mob("mobs_monster:oerkki", {
textures = {
{"mobs_oerkki.png"},
{"mobs_oerkki2.png"},
{"mobs_oerkki3.png"},
},
makes_footstep_sound = false,
sounds = {

View File

@ -15,7 +15,7 @@ Lava Flan
Mese Monster
- These mobs are territorial and spawn below -20 and will fire mese shards at passers by, so best avoided. Will drop mese when killed.
- These mobs are territorial and spawn below -20 and will fire mese shards at passers by, so best avoided. The deeper you go the tougher they seem to get. Will drop mese when killed.
Oerkki
@ -27,7 +27,7 @@ Sand Monster
Spiders
- Snowy spiders are found on higher cold areas, Tarantula's in higher jungle, Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed.
- Snowy spiders are found on higher cold areas, spitting Tarantula's in higher jungle, small Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed.
Stone Monster
@ -35,6 +35,14 @@ Stone Monster
Tree Monster
- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three.
- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three depending on type. Also note that green tree creepers exist and sometimes go boom.
Land Guard
- These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain.
Fire Spirit
- Fire Spirits will not tolerate players roaming around their domain and will fiercely attack until their dying puff of smoke. Will drop it's spirit and some fire dust when using ethereal.
Lucky Blocks: 11

View File

@ -1,6 +1,5 @@
local S = mobs.intllib
local S = mobs.intllib_monster
-- custom particle effects
local effect = function(
@ -39,6 +38,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
attack_type = "dogfight",
pathfinding = true,
--specific_attack = {"player", "mobs_npc:npc"},
--ignore_invisibility = true,
reach = 2,
damage = 1,
hp_min = 4,
@ -49,6 +49,7 @@ mobs:register_mob("mobs_monster:sand_monster", {
mesh = "mobs_sand_monster.b3d",
textures = {
{"mobs_sand_monster.png"},
{"mobs_sand_monster2.png"},
},
blood_texture = "default_desert_sand.png",
makes_footstep_sound = true,

BIN
screenshot.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

View File

@ -1,5 +1,5 @@
local S = mobs.intllib
local S = mobs.intllib_monster
local get_velocity = function(self)
@ -11,6 +11,47 @@ local get_velocity = function(self)
return (v.x * v.x + v.z * v.z) ^ 0.5
end
local spider_types = {
{ nodes = {"default:snow", "default:snowblock", "default:dirt_with_snow"},
skins = {"mobs_spider_snowy.png"},
docile = true,
drops = nil
},
{ nodes = {"default:dirt_with_rainforest_litter", "default:jungletree"},
skins = {"mobs_spider_orange.png"},
docile = true,
drops = nil,
shoot = true
},
{ nodes = {"default:stone", "default:gravel"},
skins = {"mobs_spider_grey.png"},
docile = nil,
drops = nil,
small = true
},
{ nodes = {"default:mese", "default:stone_with_mese"},
skins = {"mobs_spider_mese.png"},
docile = nil,
drops = {
{name = "farming:string", chance = 1, min = 0, max = 2},
{name = "default:mese_crystal_fragment", chance = 2, min = 1, max = 4}}
},
{ nodes = {"ethereal:crystal_dirt", "ethereal:crystal_spike"},
skins = {"mobs_spider_crystal.png"},
docile = true,
drops = {
{name = "farming:string", chance = 1, min = 0, max = 2},
{name = "ethereal:crystal_spike", chance = 15, min = 1, max = 2}}
}
}
-- Spider by AspireMint (CC-BY-SA 3.0 license)
mobs:register_mob("mobs_monster:spider", {
@ -54,7 +95,7 @@ mobs:register_mob("mobs_monster:spider", {
light_damage = 0,
animation = {
speed_normal = 15,
speed_run = 20,--15,
speed_run = 20,
stand_start = 0,
stand_end = 0,
walk_start = 1,
@ -64,42 +105,46 @@ mobs:register_mob("mobs_monster:spider", {
punch_start = 25,
punch_end = 45,
},
-- what kind of spider are we spawning?
-- check surrounding nodes and spawn a specific spider
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
-- snowy spider
if minetest.find_node_near(pos, 1,
{"default:snow", "default:snowblock", "default:dirt_with_snow"}) then
self.base_texture = {"mobs_spider_snowy.png"}
self.object:set_properties({textures = self.base_texture})
self.docile_by_day = true
-- tarantula
elseif minetest.find_node_near(pos, 1,
{"default:dirt_with_rainforest_litter", "default:jungletree"}) then
self.base_texture = {"mobs_spider_orange.png"}
self.object:set_properties({textures = self.base_texture})
self.docile_by_day = true
-- grey spider
elseif minetest.find_node_near(pos, 1,
{"default:stone", "default:gravel"}) then
self.base_texture = {"mobs_spider_grey.png"}
self.object:set_properties({textures = self.base_texture})
-- mese spider
elseif minetest.find_node_near(pos, 1,
{"default:mese", "default:stone_with_mese"}) then
self.base_texture = {"mobs_spider_mese.png"}
self.object:set_properties({textures = self.base_texture})
elseif minetest.find_node_near(pos, 1,
{"ethereal:crystal_dirt", "ethereal:crystal_spike"}) then
self.base_texture = {"mobs_spider_crystal.png"}
self.object:set_properties({textures = self.base_texture})
self.docile_by_day = true
self.drops = {
{name = "farming:string", chance = 1, min = 0, max = 2},
{name = "ethereal:crystal_spike", chance = 15, min = 1, max = 2},
}
for n = 1, #spider_types do
tmp = spider_types[n]
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = tmp.skins
self.object:set_properties({textures = tmp.skins})
self.docile_by_day = tmp.docile
if tmp.drops then
self.drops = tmp.drops
end
if tmp.shoot then
self.attack_type = "dogshoot"
self.arrow = "mobs_monster:cobweb"
self.dogshoot_switch = 1
self.dogshoot_count_max = 60
self.dogshoot_count2_max = 20
self.shoot_interval = 2
self.shoot_offset = 2
end
if tmp.small then
self.object:set_properties({
collisionbox = {-0.2, -0.2, -0.2, 0.2, 0, 0.2},
visual_size = {x = 0.25, y = 0.25}
})
end
return true
end
end
return true -- run only once, false/nil runs every activation
@ -234,7 +279,7 @@ minetest.register_node(":mobs:cobweb", {
walkable = false,
groups = {snappy = 1, disable_jump = 1},
drop = "farming:string",
sounds = default.node_sound_leaves_defaults(),
sounds = default.node_sound_leaves_defaults()
})
minetest.register_craft({
@ -246,4 +291,48 @@ minetest.register_craft({
}
})
local web_place = function(pos)
local pos2 = minetest.find_node_near(pos, 1, {"air", "group:leaves"}, true)
if pos2 then
minetest.swap_node(pos2, {name = "mobs:cobweb"})
end
end
mobs:register_arrow("mobs_monster:cobweb", {
visual = "sprite",
visual_size = {x = 1, y = 1},
textures = {"mobs_cobweb.png"},
collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
velocity = 15,
tail = 1,
tail_texture = "mobs_cobweb.png",
tail_size = 5,
glow = 2,
expire = 0.1,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 2.0,
damage_groups = {fleshy = 3},
}, nil)
web_place(self.object:get_pos())
end,
hit_node = function(self, pos, node)
web_place(pos)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 2.0,
damage_groups = {fleshy = 3},
}, nil)
end
})
minetest.register_alias("mobs:spider_cobweb", "mobs:cobweb")

View File

@ -1,5 +1,17 @@
local S = mobs.intllib
local S = mobs.intllib_monster
local stone_types = {
{ nodes = {"default:desert_stone"},
skins = {"mobs_stone_monster3.png"},
drops = {
{name = "default:desert_cobble", chance = 1, min = 0, max = 2},
{name = "default:iron_lump", chance = 5, min = 0, max = 2},
{name = "default:gold_lump", chance = 5, min = 0, max = 2}
}
}
}
-- Stone Monster by PilzAdam
@ -35,7 +47,7 @@ mobs:register_mob("mobs_monster:stone_monster", {
{name = "default:cobble", chance = 1, min = 0, max = 2},
{name = "default:coal_lump", chance = 3, min = 0, max = 2},
{name = "default:iron_lump", chance = 5, min = 0, max = 2},
{name = "maptools:silver_coin", chance = 1, min = 0, max = 1,},
{name = "maptools:silver_coin", chance = 1, min = 0, max = 1},
{name = "default:torch", chance = 2, min = 3, max = 5},
},
water_damage = 0,
@ -61,6 +73,32 @@ mobs:register_mob("mobs_monster:stone_monster", {
{"default:pick_mese", 6},
{"default:pick_diamond", 7},
},
-- check surrounding nodes and spawn a specific spider
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
for n = 1, #stone_types do
tmp = stone_types[n]
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = tmp.skins
self.object:set_properties({textures = tmp.skins})
if tmp.drops then
self.drops = tmp.drops
end
return true
end
end
return true -- run only once, false/nil runs every activation
end
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
textures/mobs_oerkki3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
textures/mobs_tree_monster6.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 567 B

View File

@ -1,5 +1,48 @@
local S = mobs.intllib
local S = mobs.intllib_monster
local tree_types = {
{ nodes = {"ethereal:sakura_leaves", "ethereal:sakura_leaves2"},
skins = {"mobs_tree_monster5.png"},
drops = {
{name = "default:stick", chance = 1, min = 1, max = 3},
{name = "ethereal:sakura_leaves", chance = 1, min = 1, max = 2},
{name = "ethereal:sakura_trunk", chance = 2, min = 1, max = 2},
{name = "ethereal:sakura_tree_sapling", chance = 2, min = 0, max = 2},
}
},
{ nodes = {"ethereal:frost_leaves"},
skins = {"mobs_tree_monster3.png"},
drops = {
{name = "default:stick", chance = 1, min = 1, max = 3},
{name = "ethereal:frost_leaves", chance = 1, min = 1, max = 2},
{name = "ethereal:frost_tree", chance = 2, min = 1, max = 2},
{name = "ethereal:crystal_spike", chance = 4, min = 0, max = 2},
}
},
{ nodes = {"ethereal:yellowleaves"},
skins = {"mobs_tree_monster4.png"},
drops = {
{name = "default:stick", chance = 1, min = 1, max = 3},
{name = "ethereal:yellowleaves", chance = 1, min = 1, max = 2},
{name = "ethereal:yellow_tree_sapling", chance = 2, min = 0, max = 2},
{name = "ethereal:golden_apple", chance = 3, min = 0, max = 2},
}
},
{ nodes = {"default:acacia_bush_leaves"},
skins = {"mobs_tree_monster6.png"},
drops = {
{name = "tnt:gunpowder", chance = 1, min = 0, max = 2},
{name = "default:iron_lump", chance = 5, min = 0, max = 2},
{name = "default:coal_lump", chance = 3, min = 0, max = 3}
},
explode = true
},
}
-- Tree Monster (or Tree Gollum) by PilzAdam
@ -12,8 +55,8 @@ mobs:register_mob("mobs_monster:tree_monster", {
--specific_attack = {"player", "mobs_animal:chicken"},
reach = 2,
damage = 2,
hp_min = 7,
hp_max = 33,
hp_min = 20,
hp_max = 40,
armor = 100,
collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4},
visual = "mesh",
@ -66,13 +109,60 @@ mobs:register_mob("mobs_monster:tree_monster", {
punch_start = 48,
punch_end = 62,
},
-- check surrounding nodes and spawn a specific tree monster
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
local tmp
for n = 1, #tree_types do
tmp = tree_types[n]
if tmp.explode and math.random(2) == 1 then return true end
if minetest.find_node_near(pos, 1, tmp.nodes) then
self.base_texture = tmp.skins
self.object:set_properties({textures = tmp.skins})
if tmp.drops then
self.drops = tmp.drops
end
if tmp.explode then
self.attack_type = "explode"
self.explosion_radius = 3
self.explosion_timer = 3
self.damage = 21
self.reach = 3
self.fear_height = 4
self.water_damage = 2
self.lava_damage = 15
self.light_damage = 0
self.makes_footstep_sound = false
self.runaway_from = {"mobs_animal:kitten"}
self.sounds = {
attack = "tnt_ignite",
explode = "tnt_explode",
fuse = "tnt_ignite"
}
end
return true
end
end
return true -- run only once, false/nil runs every activation
end
})
if not mobs.custom_spawn_monster then
mobs:spawn({
name = "mobs_monster:tree_monster",
nodes = {"default:leaves", "default:jungleleaves", "moretrees:beech_leaves"},
nodes = {"group:leaves"}, --{"default:leaves", "default:jungleleaves"},
max_light = 7,
chance = 7000,
min_height = 0,