import { world, system } from "@minecraft/server";

// Идентификатор моба, на которого будет действовать механика
const targetIdentifier = "mebesm:morph_miss_delight";
// Тег, который отключает механику для игрока
const bypassTag = "morph_miss_delight";

system.runInterval(() => {
    const players = world.getPlayers();

    // Получаем только мобов с нужным идентификатором
    const targets = world.getDimension("overworld").getEntities({ type: targetIdentifier });

    // Проходим по каждому целевому мобу
    for (const target of targets) {
        let shouldApplySlowness = false;

        // Проверяем, смотрит ли на него хотя бы один игрок БЕЗ тега
        for (const player of players) {
            // Если у игрока есть тег-исключение, пропускаем его
            if (player.hasTag(bypassTag)) {
                continue;
            }

            try {
                const entitiesInView = player.getEntitiesFromViewDirection({
                    maxDistance: 32
                });

                if (entitiesInView) {
                    for (const entityHit of entitiesInView) {
                        if (entityHit.entity.id === target.id) {
                            // Игрок без тега смотрит на моба
                            shouldApplySlowness = true;
                            break; // Нашли нужного игрока, можно выйти из внутреннего цикла
                        }
                    }
                }
            } catch (e) {
                // Игнорируем ошибки трассировки луча
            }
            if (shouldApplySlowness) break; // Нашли игрока, который должен активировать эффект
        }

        // Если хотя бы один игрок без тега смотрит на моба, накладываем эффект
        if (shouldApplySlowness) {
            try {
                target.addEffect("slowness", 20, {
                    amplifier: 255,
                    showParticles: false
                });
            } catch (e) {
                // Игнорируем ошибки
            }
        } else {
            // В противном случае снимаем эффект
            try {
                target.removeEffect("slowness");
            } catch (e) {
                // Игнорируем ошибки
            }
        }
    }
}, 5);