Disable child tool for some mobs

This commit is contained in:
Wuzzy 2024-03-19 15:27:28 +01:00
parent c53412d875
commit fcdc04374c
6 changed files with 12 additions and 7 deletions

View File

@ -211,7 +211,8 @@ by manipulating the drowning fields (see the mob field reference).
### Breeding
Breeding will make mobs mate and create offspring. To enable, call
`rp_mobs.handle_breeding` in `on_step`.
`rp_mobs.handle_breeding` in `on_step`. You also need to add the tag
`"child_exists"` to the mob definition.
In particular, to breed, two adult mobs of the same type need to be “horny” and close
to each other. Then, a random mob of the pair gets pregnant and will soon
@ -328,6 +329,8 @@ The field `_cmi_is_mob=true` will be set automatically for all mobs and can be u
the player alone. Peaceful mobs may still turn hostile when provoked.
Mobs that start hostile towards the player do not count as peaceful.
If the setting `spawn_peaceful_only` is enabled, only mobs with this tag can spawn.
* `"child_exists"`: Mob has a functional child version. This tag is only
for informing other mobs; it does not have an effect in the `rp_mobs` code
* Example: `tags = { animal = 1, peaceful = 1, exploder = 1 }`
* A peaceful animal, plus a custom `"exploder"` tag.
@ -697,6 +700,8 @@ Turns the mob into an adult.
#### `rp_mobs.turn_into_child(mob)`
Turns the mob into a child.
IMPORTANT: You *must* check whether the mob has the `"child_exists"` tag before calling this.
Don't call this function if the mob does not have this tag.
#### `rp_mobs.advance_child_growth(mob, dtime)`

View File

@ -182,10 +182,10 @@ end
rp_mobs.mobdef_has_tag = function(mobname, tag_name)
local mobdef = rp_mobs.registered_mobs[mobname]
if not mobdef then
if not mobdef or not mobdef.entity_definition or not mobdef.entity_definition._tags then
return false
end
return mobdef._tags[tag_name] == 1
return mobdef.entity_definition._tags[tag_name] == 1
end
local flip_over_collisionbox = function(box, is_child, y_offset)

View File

@ -37,7 +37,7 @@ local task_queue_roam_settings = {
--
rp_mobs.register_mob("rp_mobs_mobs:boar", {
description = S("Boar"),
tags = { animal = 1, peaceful = 1 },
tags = { animal = 1, child_exists = 1, peaceful = 1 },
drops = {
{name="rp_mobs_mobs:pork_raw", chance=1, min=1, max=4},
},

View File

@ -152,7 +152,7 @@ end
rp_mobs.register_mob("rp_mobs_mobs:sheep", {
description = S("Sheep"),
tags = { animal = 1, peaceful = 1 },
tags = { animal = 1, child_exists = 1, peaceful = 1 },
drops = {
{name="rp_mobs_mobs:meat_raw", chance=1, min=2, max=4},
},

View File

@ -33,7 +33,7 @@ local task_queue_roam_settings = {
rp_mobs.register_mob("rp_mobs_mobs:skunk", {
description = S("Skunk"),
tags = { animal = 1, peaceful = 1 },
tags = { animal = 1, child_exists = 1, peaceful = 1 },
drops = {
{name="rp_mobs_mobs:meat_raw", chance=1, min=1, max=2},
},

View File

@ -164,7 +164,7 @@ minetest.register_craftitem(
end
local obj = pointed_thing.ref
local ent = obj:get_luaentity()
if ent and ent._cmi_is_mob and not ent._child then
if ent and ent._cmi_is_mob and not ent._child and rp_mobs.mobdef_has_tag(ent.name, "child_exists") then
local pos = obj:get_pos()
rp_mobs.turn_into_child(obj)
if not minetest.is_creative_enabled(placer:get_player_name()) then