Нашел способ сделать такого нпс через похожего целителя, однако я не уверен в том, что это именно то что нужно, такое лучше делать через скрипты.
Для этого зайди в своего нпс мотыгой, зайди в "Продвинутые" и в целителя, и выставь возле кнопки "Эмоции" (на английском Affect) и выставь "Враждебны".
Теперь создай для этого целителя отдельную фракцию. Зайди в глобальные, фракции, в ней создай новую фракцию. Желательно скрой, нажав "Скрытый" на да. Цвет выбирай любой, название тоже ставь любое например Healther. Теперь во враждебные фракции выбери фракцию, которую он будет лечить - это будут его союзники. Для других фракций такое не ставь. Также можешь выставь и другие фракции и он будет лечить еще и их.
Если тебе нужно сделать, чтобы этот нпс также и атаковал игрока, как только найдет его, то выставь в "Очки", значение по умолчанию 0. После можешь зайти в "Данные игрока" в глобальные и удалить игрока, если надо, чтобы сбросить все
Теперь если все сделал правильно, выставь ему фракцию, которую ты ему создал и, если все сделал правильно, то он будет лечить своих союзников, однако способ конечно не особо: нпс будет лечить также всех враждебных мобов (если они у тебя есть), а также могут быть баги, поэтому если тебе этот способ через целителя не подошел, то сделай через скрипт.
Вот скрипт. Версия: 1.20.1, язык программирования: JavaScript (ECMAScript). Берешь сценарист в руки, устанавливаешь да, создаешь вкладку и вставляешь этот код; там, где комментарии помечены заменяешь на свои значения которые тебе нужны:
var radius = 16; //радиус, в котором будет нпс выдавать эффект
var effectId = 6; // айди эффекта
var duration = 100; // длительность
var strength = 0; //уровень эффекта (1 начинается с 0, т.е. если впишешь 0, то уровень при выдаче будет 1, или если впишешь 1, то уровень будет 2)
var hideParticles = false; //показать/скрыть частицы при эффекте
function tick(e) {
var npc = e.npc
var npcFaction = npc.getFaction().getId()
var npcs = npc.world.getNearbyEntities(e.npc.pos, radius, 2)
var uuid = npc.getUUID()
for (var i = 0; i < npcs.length; i++) {
if (npcs.length > 0 && npcs[i].getFaction().getId() == npcFaction && npcs[i].getUUID() != uuid) {
npcs[i].addPotionEffect(effectId, duration, strength, hideParticles)
}
}
}
Нпс будет лечить всех нпс, но только тех, кто состоит в фракции целителя.
Если тебе нужен скрипт, который запускает лечение, как только обнаружил врага, то вот еще один вариант, он немного отличается от выше предложенного:
var radius = 16; //радиус, в котором будет нпс выдавать эффект
var effectId = 6; // айди эффекта
var duration = 100; // длительность
var strength = 0; //показать/скрыть частицы при эффекте
var hideParticles = false; //уровень эффекта (1 начинается с 0, т.е. если впишешь 0, то уровень при выдаче будет 1, или если впишешь 1, то уровень будет 2)
var entityType = 1; //тип нпс, на которого будет агриться нпс (1 - это игрок, 2 - нпс, -1 - все, 0 - неизвестный)
var a; //это лучше не трогать
function tick(e) {
var npc = e.npc
var npcFaction = npc.getFaction().getId()
var npcs = npc.world.getNearbyEntities(e.npc.pos, radius, 2)
var uuid = npc.getUUID()
for (var i = 0; i < npcs.length; i++) {
if (npcs.length > 0 && npcs[i].getFaction().getId() == npcFaction && npcs[i].getUUID() != uuid && a) {
npcs[i].addPotionEffect(effectId, duration, strength, hideParticles)
}
}
}
function target(e) {
if (e.entity.getType() == entityType) a = true
}
function targetLost(e) {
a = false
}
Надеюсь помог :)