Помогите Entity не слушается Pathfinder

  • Автор темы Автор темы MySoR
  • Дата начала Дата начала

MySoR

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
MySoR
Я спавню Pillager за деревней и указываю ему идти в центр деревни (дистанция ~100 блоков).
Но он ни в какую туда не идет.
Мб слишком большая дистанция? Если да то как это можно решить? Мне обязательно нужно спавнить его за 100 блоков.
Также я задаю ему Persistent true но он все равно деспавнится.
Никаких плагинов на отчистку лагов нет только плагины api
Citizens, Essentials, LibsDisguises, PlaceholderAPI, PlugManX (PlugMan), ProtocolLib, TimeTravel(Мой)
PHP:
Pillager pillager = (Pillager) loc.getWorld().spawnEntity(loc, EntityType.PILLAGER);
pillager.getPathfinder().moveTo(center);
pillager.setPersistent(true);
 
Но он ни в какую туда не идет.
Попробуй перед pillager.getPathfinder().moveTo() вызывать следующее:
pillager.getServer().getMobGoals().removeAllGoals(pillager);
Если не поможет, то вместе с:
pillager.getPathfinder().stopPathfinding();

Также я задаю ему Persistent true но он все равно деспавнится.
При выгрузке чанков любые сущности деспаунятся в любом случае. Другой вопрос, что они сохраняются на диск и создаются вновь при повторной загрузке чанка в оперативную память.
Для чего ты хочешь отключить деспаун?
 
Попробуй перед pillager.getPathfinder().moveTo() вызывать следующее:
pillager.getServer().getMobGoals().removeAllGoals(pillager);
Если не поможет, то вместе с:
pillager.getPathfinder().stopPathfinding();


При выгрузке чанков любые сущности деспаунятся в любом случае. Другой вопрос, что они сохраняются на диск и создаются вновь при повторной загрузке чанка в оперативную память.
Для чего ты хочешь отключить деспаун?
Деспавн нужно отключить потому что от 40 моих рейдеров остается их ну 10 когда нужны все 40. + от того что энтити выгрузился на диск не перестанет ли Pathfinder вести их к точке?
+ Вчера я сделал такой класс который скармливает в Pathfinder не всю длинну которую нужно пройти а частями по 10 блоков
PHP:
public class FixedPathfinder {

    private Plugin main;

    public FixedPathfinder(Plugin main) {
        this.main = main;
    }

    public void findPath(Entity entity, Pathfinder pathfinder, Location finish){
        new BukkitRunnable() {
            @Override
            public void run() {
                if(entity.getLocation().distance(finish) <=10){
                    this.cancel();
                    return;
                }
                if(entity.isDead()){
                    this.cancel();
                    return;
                }

                Vector vector = entity.getLocation().subtract(finish).toVector().normalize().multiply(10);
                Location pathLocation = entity.getLocation().subtract(vector).toHighestLocation().add(0,1,0);

                pathfinder.moveTo(pathLocation);
            }
        }.runTaskTimer(main, 20, 20);


    }
}
И это не плохо работает и даже вроде как диспавнится мой мобы перестали.
 
Деспавн нужно отключить потому что от 40 моих рейдеров остается их ну 10 когда нужны все 40. + от того что энтити выгрузился на диск не перестанет ли Pathfinder вести их к точке?
При выгрузке чанков сущности как в принципе не передвигаются, потому то они выгружены.
Если мы говорим о повторной загрузке в память чанка, который ранее был выгружен, то тут точно сказать не могу.
Подозреваю, что сущность приобретает ванильный интеллект.
Это всё легко проверить.
Так или иначе, отключить выгрузку сущностей нельзя (собственно, как и чанков нынче уже).

Вчера я сделал такой класс который скармливает в Pathfinder не всю длинну которую нужно пройти а частями по 10 блоков
Я себе тоже сделал отдельный класс для передвижения по точкам, но по другой причине. Вот, если надо:
1) https://pastebin.com/pFqnzM3E
2) https://pastebin.com/AAK2bNkS
 
Последнее редактирование:
При выгрузке чанков сущности как в принципе не передвигаются, потому то они выгружены.
Если мы говорим о повторной загрузке в память чанка, который ранее был выгружен, то тут точно сказать не могу.
Подозреваю, что сущность приобретает ванильный интеллект.
Это всё легко проверить.
Так или иначе, отключить выгрузку сущностей нельзя (собственно, как и чанков нынче уже).


Я себе тоже сделал отдельный класс для передвижения по точкам, но по другой причине. Вот, если надо: https://pastebin.com/pFqnzM3E
Огромное спасибо за класс. Но вот по поводу Persistent я не уверен что они просто выгружаются а не деспавнятся потому что я щас делаю другой эвент тоже с использованием мобов так вот они находятся от меня в 50 блоков я их спокойно вижу и я уверен что там чанки прогружены но вот незадача они все равно деспавнятся у меня на глазах.
Даже если я прилетаю на то место где они задеспавнились они не погружаются обратно, проподают на всегда.
Можно ли както скачать чанку что бы он не выгружался?

UPD:
Вспомнил что один раз делал плагин на Spigot с использованием мобов где тоже устанавливал Persistent true и там все работало очень даже хорошо и никто не деспавнился но вот недавно мне написал один человек который использует этот плагин на Paper и у него иногда залагивает событие которое использует мобов, как мы поняли они почемуто выгружаются так вот к чему это я мб это прикол Paper и нужно задать этот вопрос разработчикам если это возможно?

UPD2:
Можешь показать пример как пользоваться этим классов?
 
Последнее редактирование:
Но вот по поводу Persistent я не уверен что они просто выгружаются а не деспавнятся потому что я щас делаю другой эвент тоже с использованием мобов так вот они находятся от меня в 50 блоков я их спокойно вижу и я уверен что там чанки прогружены но вот незадача они все равно деспавнятся у меня на глазах.
Даже если я прилетаю на то место где они задеспавнились они не погружаются обратно, проподают на всегда?
Попробуй так:
PHP:
pillager.setPersistent(false); // Включает сохранение на диск
pillager.setRemoveWhenFarAway(false); // Отключает деспаун на больших расстояниях от игроков


Можно ли както сказать чанку что бы он не выгружался?
Можно запретить выгрузку, но делать этого я крайне не рекомендую. Лучше разберись, почему у тебя сущности исчезают. Не должны. У меня всё работает стабильно на 1.18.2


Можешь показать пример как пользоваться этим классов?
Забыл ещё один класс. Держи оба:
1) https://pastebin.com/pFqnzM3E
2) https://pastebin.com/AAK2bNkS

Использование:
PHP:
Bukkit.getServer().getMobGoals().removeAllGoals(mob);
Bukkit.getServer().getMobGoals().addGoal(mob, 0, new GoalRoute(mob, 1.5, GoalRoute.StuckPolicy.SKIP_POINT,
        mob.getLocation().add(5, 0, 5),
        mob.getLocation().add(5, 0, -5),
        mob.getLocation().add(-5, 0, -5),
        mob.getLocation().add(-5, 0, 5)
));
 
Последнее редактирование:
Назад
Верх