1
0
mirror of https://codeberg.org/tenplus1/mobs_redo.git synced 2025-07-27 20:40:19 +02:00

Compare commits

...

50 Commits

Author SHA1 Message Date
5fb7b91db0 fix typo 2025-03-20 08:06:40 +00:00
badb889cf3 add 'mob_infotext' setting 2025-03-20 08:05:24 +00:00
ca7aeec95a add nil check on_punch 2025-03-18 08:06:40 +00:00
14f391bf2c add ukrainian translation (thx Fromkaniv) 2025-03-15 16:37:52 +00:00
0bf3915315 return func 2025-03-12 08:16:26 +00:00
b81c2aeab6 update dates, add sound_play check 2025-03-12 08:03:17 +00:00
0a62f05132 add mob repellent 2025-02-09 12:12:52 +00:00
9f472fb690 tweak do_jump 2025-02-04 15:06:59 +00:00
c62b013825 add pick_up and on_pick_up features. 2025-02-04 10:21:10 +00:00
4b825b3e86 call do_punch after damage calculated 2025-02-01 13:57:27 +00:00
f09b6d1730 pass mesh to arrow (thx kiedtl) 2025-01-20 08:00:26 +00:00
a3ede86365 update api.txt 2025-01-19 08:15:33 +00:00
4b556a4d16 pass damage to do_punch 2025-01-18 08:17:11 +00:00
01e015dc0f disable is_mob flag, something fishy with mineclonia 2025-01-17 08:08:24 +00:00
d7998a9ea7 abort on_step when mob expires (thx tour-ist) 2025-01-09 16:20:23 +00:00
57fe6cf2e3 tweak & tidy code, exploding mobs brighten and glow 2024-12-28 11:19:44 +00:00
b170b51f2d tweak do_jump so mobs dont jump on carpets 2024-12-26 11:08:36 +00:00
dca4159fc4 code tidy 2024-12-26 08:48:35 +00:00
219d477c2a wee tidy 2024-12-20 10:49:52 +00:00
c8e91d1958 tweak spawning 2024-12-19 07:36:23 +00:00
22d7ea79fd fix riding gravity 2024-12-13 15:49:52 +00:00
c24874a3bf fix map_load chance check 2024-12-08 10:33:54 +00:00
c25975e7ea fix typo 2024-12-02 06:34:28 +00:00
03ce8ada6b tweak/tidy, check env damage when riding mob 2024-12-01 12:18:44 +00:00
cc60499637 tweak n tidy 2024-11-30 12:35:22 +00:00
58792311c7 add immune_to check to is_node_dangerous function 2024-11-28 13:07:53 +00:00
527fe8c2d5 add nodes to immune_to ability. 2024-11-27 08:22:09 +00:00
6a7c221ce1 fix boom texture 2024-11-22 14:13:22 +00:00
b8052c817c replace empty var 2024-11-22 14:08:34 +00:00
e17ea86bf5 restore mobs:boom order 2024-11-22 08:11:25 +00:00
ca76558edd switch node/entity setting in mobs:boom 2024-11-21 15:35:07 +00:00
bde53c3475 add mobs:is_invisible() function, update api.txt 2024-11-16 08:16:55 +00:00
2e4664a5ce use invisibility mod api 2024-11-14 08:17:41 +00:00
39f9f8df31 add reach option to replace function. 2024-11-13 11:04:27 +00:00
1b1f681886 tidy spawning 2024-11-10 11:41:32 +00:00
627d468b9a add replace sound, tweak spawn egg y_pos 2024-10-28 13:27:39 +00:00
e9c3d6c505 add brazilian translation (thx pixelzone) 2024-10-26 10:21:27 +01:00
1f8ca901b5 fix russian typo 2024-10-23 08:02:34 +01:00
816461286b update russian translation (thx SkyBuilder1717) 2024-10-22 17:00:17 +01:00
430af1e91d add 'mobs_disable_damage_kb' setting 2024-10-20 09:19:52 +01:00
79fb4f7ead disable follow_stop 2024-10-19 15:06:59 +01:00
f746f4b1e0 fix knockback when breeding 2024-10-12 10:27:25 +01:00
e59fd53ee9 make sure def.gain has a value 2024-10-11 10:24:07 +01:00
faf511ff8c fix visharm indicate on active 2024-10-10 11:30:22 +01:00
a35afc8299 disable node hearing by default 2024-10-10 10:37:47 +01:00
219db764bf forgot def.loudness check 2024-10-02 15:51:05 +01:00
e4a5ead82c pass def onto hearing nodes 2024-10-02 15:13:37 +01:00
f4861ced2a add on_sound node support and example. 2024-10-02 14:57:07 +01:00
1dd81eb008 tweak mob hear function 2024-10-01 09:08:52 +01:00
64c6085f09 wee jump bug 2024-09-17 09:43:01 +01:00
16 changed files with 716 additions and 598 deletions

936
api.lua

File diff suppressed because it is too large Load Diff

83
api.txt
View File

@ -85,8 +85,6 @@ functions needed for the mob to work properly which contains the following:
'fire_damage' holds the damage per second inflicted to mobs when standing
'node_damage' True by default, will harm mobs when inside damage_per_second
nodes.
in fire.
'light_damage' holds the damage per second inflicted to mobs when light
level is between the min and max values below
'light_damage_min' minimum light value when mob is affected (default: 14)
@ -178,6 +176,9 @@ functions needed for the mob to work properly which contains the following:
{"default:gold_lump", -10} -- heals by 10 health points.
{"default:coal_block", 20} -- 20 damage when hit on head with coal blocks.
{"all"} -- stops all weapons causing damage apart from those on list.
nodes can also be added so that node_per_second damage
does not affect the mob either e.g.
{"ethereal:crystal_spike", 0} -- causes no damage.
'makes_footstep_sound' when true you can hear mobs walking.
'sounds' this is a table with sounds of the mob
@ -289,11 +290,12 @@ eating.
y offset by using this instead:
{
{"group:grass", "air", 0},
{"default:dirt_with_grass", "default:dirt", -1}
{"default:dirt_with_grass", "default:dirt", -1, 0}
}
'replace_with' replace with what e.g. "air" or in chickens case "mobs:egg"
'replace_rate' how random should the replace rate be (typically 10)
'replace_offset' +/- value to check specific node to replace
'replace_offset' +/- y offset value to check specific node to replace
'reach' horizontal reach around mob for replace, default is 0
'on_replace(self, pos, oldnode, newnode)' is called when mob is about to
replace a node.
@ -308,6 +310,25 @@ eating.
properties. (DEPRECATED, use on_replace to make changes).
Pickup Items
------------
'pick_up' table of itemstrings the mob will pick up.
'on_pick_up' function that will be called on item pickup - arguments are
(self, itemstring) and can return nil or a a modified itemstack e.g.
on_pick_up = function(self, itemstring)
local istack = ItemStack(entity.itemstring)
print("-- took", istack:get_name())
istack:take_item(1)
return istack
end,
Custom Definition Functions
---------------------------
@ -329,8 +350,9 @@ enhance mob functionality and have them do many interesting things:
'on_grown' is called when a child mob has grown up, only paramater is
(self).
'do_punch' called when mob is punched with paramaters (self, hitter,
time_from_last_punch, tool_capabilities, direction), return
false to stop punch damage and knockback from taking place.
time_from_last_punch, tool_capabilities, direction, damage),
return false to stop punch damage and knockback from taking
place.
'custom_attack' when set this function is called instead of the normal mob
melee attack, parameters are (self, to_attack) and if true
is returned normal attack function continued.
@ -348,16 +370,23 @@ enhance mob functionality and have them do many interesting things:
'on_sound' (self, def) called when mob is inside the hearing distance of
a sound, passes a def table containing:
'sound' the sound being played,
'pos' position the sound originated,
'pos' position the sound originated (only sounds with pos detected),
'gain' original gain of sound,
'distance' distance of mob from sound source,
'loudness' how loud sound is to mob (0 = cant hear, 1.0 = near sound), this
would be used as the main value inside on_sound function,
'player' player name sound originated,
'object' object reference sound originated,
'loudness' how loud sound is to mob (percentage of gain heard at distance)
'player' player name sound originated, [NOT IN USE]
'object' object reference sound originated, [NOT IN USE]
'max_hear_distance' max distance sound can be heard from source.
Hearing Nodes
-------------
If a node has the {on_sound = 1} group and an on_sound() function set as above then
nodes within 8 blocks of a sound will be activated and the function run. Check the
"mobs:hearing_vines" node as an example which has mesecons support when active.
Internal Variables
------------------
@ -557,6 +586,7 @@ This function registers a arrow for mobs with the attack type shoot.
'definition' is a table with the following values:
'visual' same is in minetest.register_entity()
'visual_size' same is in minetest.register_entity()
'mesh' same is in minetest.register_entity()
'textures' same is in minetest.register_entity()
'collide_with_objects' same as above
'velocity' the velocity of the arrow
@ -611,11 +641,11 @@ Explosion Function
mobs:explosion(pos, radius) -- DEPRECATED!!! use mobs:boom() instead
mobs:boom(self, pos, radius, damage_radius, texture)
mobs:boom(self, pos, damage_radius, entity_radius, texture)
'self' mob entity
'pos' centre position of explosion
'radius' radius of explosion (typically set to 3)
'damage_radius' radius of damage around explosion
'damage_radius' radius of node damage (typically 3)
'entity_radius' radius of explosion to players and mobs
'texture' particle texture during explosion, defaults to "tnt_smoke.png"
This function generates an explosion which removes nodes in a specific radius
@ -840,8 +870,8 @@ External Settings for "minetest.conf"
mob for obstructions before spawning, otherwise it
defaults to checking the height of the mob only.
'mob_smooth_rotate' Enables smooth rotation when mobs turn by default.
'mob_height_fix' Enabled by default, increases smaller mob heights so they wont
glitch through certain nodes.
'mob_height_fix' Disabled by default, increases smaller mob heights so they
cannot glitch through certain nodes.
'mob_pathfinding_enable' Enable pathfinding.
'mob_pathfinding_stuck_timeout' How long before stuck mobs start searching. (default 3.0)
'mob_pathfinding_stuck_path_timeout' How long will mob follow path before giving up. (default 5.0)
@ -850,6 +880,13 @@ External Settings for "minetest.conf"
'mob_pathfinding_searchdistance' max search distance from search positions (default 16)
'mob_pathfinding_max_jump' max jump height for pathfinding (default 4)
'mob_pathfinding_max_drop' max drop height for pathfinding (default 6)
'mobs_can_hear' Enabled by default, overrides minetest.sound_play and enables
nearby mobs to run a custom on_sound function.
'mobs_can_hear_node' Disabled by default, allows nearby nodes to hear and run a
custom on_sound function.
'mobs_disable_damage_kb' Knockback is calculated by hit damage or uses knockback value
from the weapon used, this setting lets you disable the former.
'mob_infotext' True by default, shows mob information when you hover over one.
Players can override the spawn chance for each mob registered by adding a line
to their minetest.conf file with a new value, the lower the value the more each
@ -890,3 +927,17 @@ Rideable Horse Example Mob
--------------------------
See mob_horse mod https://codeberg.org/tenplus1/mob_horse
External Functions
------------------
These are a list of utility functions that can be called from 3rd party mods.
mobs:alias_mob(old_name, new_name)
mobs:is_invisible(self, player_name)
mobs:is_dangerous(self, nodename)
mobs:yaw_to_pos(self, target, rotation_steps)
mobs:line_of_sight(self, pos1, pos2)
mobs:set_animation(self, animation)
mobs:yaw(self, yaw, rotation_steps)

View File

@ -25,6 +25,16 @@ sound_helper("node_sound_water_defaults")
sound_helper("node_sound_snow_defaults")
sound_helper("node_sound_glass_defaults")
-- mob repellent node
minetest.register_node("mobs:mob_repellent", {
description = S("Mob Repellent"),
tiles = {"mobs_repellent.png"},
is_ground_content = false,
groups = {handy = 1, cracky = 3},
sounds = mobs.node_sound_stone_defaults()
})
-- helper function to add {eatable} group to food items
function mobs.add_eatable(item, hp)
@ -421,3 +431,59 @@ minetest.register_craft({
recipe = "mobs:meatblock_raw",
cooktime = 30
})
-- hearing vines (if mesecons active it acts like blinkyplant)
local mod_mese = minetest.get_modpath("mesecons")
minetest.register_node("mobs:hearing_vines", {
description = S("Hearing Vines"),
drawtype = "firelike",
waving = 1,
tiles = {"mobs_hearing_vines.png"},
inventory_image = "mobs_hearing_vines.png",
wield_image = "mobs_hearing_vines.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flammable = 3, attached_node = 1, on_sound = 1},
sounds = mobs.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16},
},
on_sound = function(pos, def)
if def.loudness > 0.5 then
minetest.set_node(pos, {name = "mobs:hearing_vines_active"})
end
end
})
minetest.register_node("mobs:hearing_vines_active", {
description = S("Active Hearing Vines"),
drawtype = "firelike",
waving = 1,
tiles = {"mobs_hearing_vines_active.png"},
inventory_image = "mobs_hearing_vines_active.png",
wield_image = "mobs_hearing_vines_active.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
light_source = 1,
damage_per_second = 4,
drop = "mobs:hearing_vines",
groups = {snappy = 3, flammable = 3, attached_node = 1, not_in_creative_inventory = 1},
sounds = mobs.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16},
},
on_construct = function(pos)
minetest.get_node_timer(pos):start(1)
if mod_mese then mesecon.receptor_on(pos) end
end,
on_timer = function(pos)
minetest.set_node(pos, {name = "mobs:hearing_vines"})
if mod_mese then mesecon.receptor_off(pos) end
end
})

View File

@ -1,4 +1,6 @@
local S = minetest.get_translator("mobs")
-- peaceful player privilege
minetest.register_privilege("peaceful_player", {
@ -9,13 +11,14 @@ minetest.register_privilege("peaceful_player", {
-- fallback node
minetest.register_node("mobs:fallback_node", {
description = "Fallback Node",
description = S("Fallback Node"),
tiles = {"mobs_fallback.png"},
is_ground_content = false,
groups = {handy = 1, crumbly = 3, not_in_creative_inventory = 1},
drop = ""
})
local path = minetest.get_modpath("mobs")
dofile(path .. "/api.lua") -- mob API

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2016 TenPlus1
Copyright (c) 2025 TenPlus1
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

38
locale/mobs.pt_BR.tr Normal file
View File

@ -0,0 +1,38 @@
# textdomain: mobs
** Peaceful Mode Active - No Monsters Will Spawn=
Active Mob Limit Reached!=Limite de Mob Ativo Atingido!
Mob has been protected!=Mob foi protegido
@1 (Tamed)=@1 (Domesticado)
Not tamed!=Não domesticado!
@1 is owner!=Dono @1!
Missed!=Faltou!
Already protected!=
@1 has been tamed!=@1 foi domesticado!
@1 follows:=@1 Segue:
@1 mobs removed.=@1 mobs removido.
Enter name:=Insira um nome:
Rename=Renomear
Name Tag=Etiqueta
Leather=Couro
Raw Meat=Carne crua
Meat=Carne
Lasso (right-click animal to put in inventory)=Laço (clique-direito no animal para por no inventario)
Net (right-click animal to put in inventory)=Net (clique-direito no animal para por no inventario)
Steel Shears (right-click to shear)=Tesoura de Aço (clique-direito para tosquiar)
Mob Protection Rune=Runa de Proteção para Mob
Mob Protection Rune (Level 2)=Runa de Proteção para Mob (Nivel 2)
Saddle=Sela
Mob Fence= Cerca para mob
Mob Fence Top= Topo da cerca para mob
Mob Reset Stick=
Meat Block=Bloco de carne
Raw Meat Block=Bloco de Carne crua
Enter texture:=Insira a textura:
Change=Mudar
Mob Spawner=Spawner de mob
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=(Nome do mob) (min light) (max light) (amount) (player distance) (Y offset)
Command:=Comando:
Spawner Not Active (enter settings)=Spawner Inativo (configurar)
Spawner Active (@1)=Spawner Ativo (@1)
Mob Spawner settings failed!=Configuraçao de Spawner do Mob falhou!
Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=

View File

@ -1,38 +1,38 @@
# textdomain: mobs
** Peaceful Mode Active - No Monsters Will Spawn=** Мирный модус активирован - монстры не спаунятся
Active Mob Limit Reached!=
Mob has been protected!=Моб защищен!
** Peaceful Mode Active - No Monsters Will Spawn=** Мирный Режим Активен - Никаких Монстров Не Появиться
Active Mob Limit Reached!=Лимит Активных Мобов Достигнут!
Mob has been protected!=Моб был защищён!
@1 (Tamed)=@1 (Прирученный)
Not tamed!=Не прирученный
@1 is owner!=@1 владелец
Not tamed!=Не прирученный!
@1 is owner!=@1 владелец!
Missed!=Промазал!
Already protected!=Уже защищен!
@1 has been tamed!=@1 приручен
@1 follows:=
@1 mobs removed.=
Already protected!=Уже защищён!
@1 has been tamed!=@1 был приручен!
@1 follows:=@1 следует:
@1 mobs removed.=@1 мобов удалено.
Enter name:=Введите имя:
Rename=Переименовать
Name Tag=Новый тэг
Name Tag=Новый Тег
Leather=Кожа
Raw Meat=Сырое мясо
Raw Meat=Сырое Мясо
Meat=Мясо
Lasso (right-click animal to put in inventory)=Лассо (Правый клик - положить животное в инвентарь)
Net (right-click animal to put in inventory)=Сеть (Правый клик - положить животное в инвентарь)
Steel Shears (right-click to shear)=Ножницы (Правый клик - подстричь)
Mob Protection Rune=Защитная руна мобов
Mob Protection Rune (Level 2)=
Steel Shears (right-click to shear)=Железные Ножницы (Правый клик - подстричь)
Mob Protection Rune=Руна Защиты Моба
Mob Protection Rune (Level 2)=Руна Защиты Моба (2 Уровень)
Saddle=Седло
Mob Fence=Забор от мобов
Mob Fence Top=
Mob Reset Stick=
Meat Block=
Raw Meat Block=
Enter texture:=
Change=
Mob Spawner=
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=
Command:=
Spawner Not Active (enter settings)=Спаунер не активен (введите настройки)
Spawner Active (@1)=Активные спаунер (@1)
Mob Spawner settings failed!=Настройки спаунера моба провалились
Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
Mob Fence=Забор для Мобов
Mob Fence Top=Верхний Забор для Мобов
Mob Reset Stick=Палка Сброса Моба
Meat Block=Мясной Блок
Raw Meat Block=Сырой Мясной Блок
Enter texture:=Введите текстуру:
Change=Изменить
Mob Spawner=Спавнер Мобов
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=(имя моба) (минимальный свет) (максимальный свет) (количество) (дистанция игрока) (смещение Y)
Command:=Команда:
Spawner Not Active (enter settings)=Спавнер Не Активен (введите настройки)
Spawner Active (@1)=Спавнер Активен (@1)
Mob Spawner settings failed!=Настроить Спавнер Мобов не удалось!
Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=Синтаксис: “имя мин_свет[0-14] макс_свет[0-14] максобов_в_зоне[0 чтобы выключить] дистанция_игроков[1-20] смещение_y[-10 to 10]”

43
locale/mobs.uk.tr Normal file
View File

@ -0,0 +1,43 @@
# textdomain: mobs
Mobs Redo API=API для мобів
Simple and feature rich API to quickly add mobs into your world.=Простий і функціональний API для швидкого додавання мобів у світ.
Adds a mob api for mods to add animals or monsters etc.=Додає API для модів про тварин, монстрів тощо.
** Peaceful Mode Active - No Monsters Will Spawn=** Під час мирного режиму моби не спавняться
Active Mob Limit Reached!=Ліміт активних мобів досягнуто!
Mob has been protected!=Моб був захищений!
@1 (Tamed)=@1 (Приручений)
Not tamed!=Не приручений!
@1 is owner!=@1 є власником!
Missed!=Промах!
Already protected!=Уже захищено!
@1 has been tamed!=@1 приручено!
@1 follows:=@1 слідує:
@1 mobs removed.=@1 мобів видалено.
Enter name:=Введіть ім'я:
Rename=Перейменувати
Name Tag=Теґ для назви
Mob Repellent=Відлякувач мобів
Hearing Vines=Чутливі ліани
Leather=Шкіра
Raw Meat=Сире м'ясо
Meat=М'ясо
Lasso (right-click animal to put in inventory)=Ласо (ПКМ - покласти тварину в інвентар)
Net (right-click animal to put in inventory)=Сітка (ПКМ - покласти тварину в інвентар)
Steel Shears (right-click to shear)=Залізні ножиці (ПКМ - підстригти)
Mob Protection Rune=Руна Захисту Мобу
Mob Protection Rune (Level 2)=Руна Захисту Мобу (II рівень)
Saddle=Сідло
Mob Fence=Паркан для мобів
Mob Fence Top=Верхній паркан для мобів
Mob Reset Stick=Палиця скидання мобу
Meat Block=М'ясний блок
Raw Meat Block=Сирий м'ясний блок
Enter texture:=Введіть текстуру:
Change=Змінити
Mob Spawner=Спавнер мобів
(mob name) (min light) (max light) (amount) (player distance) (Y offset)=(ім'я мобу) (мін. світло) (макс. світло) (кількість) (дистанція гравця) (зміщення Y)
Command:=Команда:
Spawner Not Active (enter settings)=Спавнер не активний (введіть налаштування)
Spawner Active (@1)=Спавнер активний (@1)
Mob Spawner settings failed!=Не вдалося налаштувати спавнер мобів!
Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=Синтаксис: “ім'я мін.світло[0-14] макс.світло[0-14] максобів_уоні[0 для вимкнення] дистанція_гравців[1-20] зміщення_y[-10 до 10]”

View File

@ -15,7 +15,8 @@ lucky_block:add_blocks({
{"dro", {"mobs:protector"}, 1},
{"dro", {"mobs:fence_wood"}, 10},
{"dro", {"mobs:fence_top"}, 12},
{"lig"}
{"lig"},
{"dro", {"mobs:mob_repellent"}, 1}
})
-- pint sized rune, use on tamed mob to shrink to half-size

View File

@ -1,4 +1,4 @@
name = mobs
description = Adds a mob api for mods to add animals or monsters etc.
optional_depends = default, tnt, invisibility, lucky_block, cmi, toolranks, pathfinder, player_api, mtobjid, visual_harm_1ndicators, mcl_sounds
optional_depends = default, tnt, invisibility, lucky_block, cmi, toolranks, pathfinder, player_api, mtobjid, visual_harm_1ndicators, mcl_sounds, mesecons
min_minetest_version = 5.0

View File

@ -22,35 +22,17 @@ local abs, cos, floor, sin, sqrt, pi =
-- helper functions
local node_ok = function(pos, fallback)
fallback = fallback or mobs.fallback_node
local node = minetest.get_node_or_nil(pos)
if node and minetest.registered_nodes[node.name] then return node end
return {name = fallback}
end
local function node_is(entity)
if not entity.standing_on then return "other" end
if entity.standing_on == "air" then return "air" end
if minetest.get_item_group(entity.standing_on, "lava") ~= 0 then
return "lava"
end
local def = minetest.registered_nodes[entity.standing_on]
if minetest.get_item_group(entity.standing_on, "liquid") ~= 0 then
return "liquid"
end
if minetest.registered_nodes[entity.standing_on].walkable == true then
return "walkable"
end
if def.groups.lava then return "lava" end
if def.groups.liquid then return "liquid" end
if def.groups.walkable then return "walkable" end
return "other"
end
@ -236,6 +218,10 @@ function mobs.detach(player)
end)
end
-- vars
local damage_counter = 0
-- ride mob like car or horse
function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
@ -321,6 +307,35 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
end
end
local ni = node_is(entity)
-- env damage
if ni == "liquid" or ni == "lava" then
damage_counter = damage_counter + dtime
if damage_counter > 1 then
local damage = 0
if entity.lava_damage > 0 and ni == "lava" then
damage = entity.lava_damage
elseif entity.water_damage > 0 and ni == "liquid" then
damage = entity.water_damage
end
if damage >= 1 then
entity.object:punch(entity.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = damage}
}, nil)
end
damage_counter = 0
end
end
-- if not moving then set animation and return
if entity.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then
@ -361,12 +376,11 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
p.y = p.y - 0.5
local ni = node_is(entity)
local v = entity.v
if ni == "air" then
if can_fly == true then new_acce.y = 0 end
if can_fly then new_acce.y = 0 ; acce_y = 0 end
elseif ni == "liquid" or ni == "lava" then
@ -454,7 +468,7 @@ function mobs.fly(entity, _, speed, shoots, arrow, moving_anim, stand_anim)
if ent then
ent.switch = 1 -- for mob specific arrows
ent.owner_id = tostring(entity.object) -- so arrows dont hurt entity you are riding
ent.owner_id = tostring(entity.object) -- so arrows dont hurt mob
local vec = {x = dir.x * 6, y = dir.y * 6, z = dir.z * 6}

View File

@ -19,8 +19,9 @@ https://forum.minetest.net/viewtopic.php?f=11&t=9917
- **Shears**. Used to right-click sheep and return 1-3 wool.
- **Protection Rune**. Protects tamed mobs from being harmed by other players.
- **Mob Fence and Fence Top**. Stops mobs escaping or glitching throughfences.
- Add mobs:mob_repellent block to stop mobs spawning within 16 node radius.
**Lucky Blocks**: 12
**Lucky Blocks**: 13
## Changelog
@ -31,6 +32,8 @@ https://forum.minetest.net/viewtopic.php?f=11&t=9917
* Added {eatable} group to food items and HP in description
* Fixed timer bug when attacking
* Fixed fall damage check when riding mob
* Calculate damage before do_punch function called
* Add function to check for dropped items and for mob to do something with them
### Version 1.61

View File

@ -56,13 +56,19 @@ enable_peaceful_player (Mobs do not attack peaceful player without reason) bool
mob_smooth_rotate (Smooth rotation for mobs) bool true
# Fix Mob Height if too low so they cannot escape through specific nodes
mob_height_fix (Fix Mob Height) bool true
mob_height_fix (Fix Mob Height) bool false
mob_log_spawn (Log Mob Spawning) bool false
# Mob hearing, when enabled will override minetest.sound_play for mobs to hear
mobs_can_hear (Enable Mob hearing) bool true
# Node hearing, when enabled will allow nodes to hear nearby sounds
mobs_can_hear_node (Enable Node hearing) bool false
# By default mobs are dealt knockback from damage, this lets you disable it
mobs_disable_damage_kb (Disable knockback from damage only) bool false
[Pathfinding]
# Enable pathfinding (default Enabled)
mob_pathfinding_enable (Enable pathfinding) bool true
@ -82,3 +88,6 @@ mob_pathfinding_searchdistance (path search distance) int 16
mob_pathfinding_max_jump (path max jump height) int 4
# max drop height for pathfinding (default 6)
mob_pathfinding_max_drop (path max drop height) int 6
# Enable mob infotext on hover
mob_infotext (Enable mob infotext on hover) bool true

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B

BIN
textures/mobs_repellent.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B