Помогите NMS 1.16.5 кастомные мобы замораживаются вдали игрока.

Статус
Закрыто для дальнейших ответов.

pro100koder

Активный участник
Пользователь
Баллы
76
У меня есть кастомный зомби-житель:
Код:
public class EntityPawn extends EntityZombieVillager{
    
    public EntityPawn(World world) {
        super(EntityTypes.ZOMBIE_VILLAGER, ((CraftWorld) world).getHandle());
        
    }
    
    @Override
    public void initPathfinder() {
        //Пустой метод для полной власти над мобом через сторонние методы
    }
    
    public ZombieVillager spawn(Location loc) {
        this.setPositionRotation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
        this.world.addEntity(this, SpawnReason.CUSTOM);
        return (ZombieVillager) this.getBukkitEntity();
    }
}
Если не ошибаюсь, в новых версиях нет регистрации мобов, но если всё-же ошибаюсь, пните меня - поищу, куда дел.
Спавню этих бедолаг так:
Код:
public ZombieVillager spawnNMS(Location loc){
        EntityPawn ep=new EntityPawn(loc.getWorld());
        ZombieVillager z=ep.spawn(loc);
        z.setRemoveWhenFarAway(false);
        return z;
    }
Код:
ZombieVillager z=spawnNMS(p.getLocation());
                z.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(0.3);
                z.getAttribute(Attribute.GENERIC_FOLLOW_RANGE).setBaseValue(300);
               //Дальше код внедрения этого моба в системы
Заставляю мобов двигаться через метод:
Код:
public static void move(Entity en, Location move){
        EntityCreature cr=((EntityCreature) ((CraftEntity) en).getHandle());
        cr.getNavigation().a(move.getX(), move.getY(), move.getZ(), 1.0);
    }
И всё работает прекрасно... Но стоит отойти от моба (или мобу отойти от нас) блоков на 30-40, как он встаёт и ничего не делает, пока не подлетишь. При чём, обычные (не-кастомные) зомби-жители спокойно ходят на любом расстоянии.
P. S. Если отойти от моба очень далеко, он сменит свой UUID и станет обычным зомби-жителем с атрибутами. То же самое при рестарте. Это незначительная проблема, но вдруг она как-то связана...
 
Попробуй проверки кидать и возвращать uuid
 
Попробуй проверки кидать и возвращать uuid
Да, наверное, я зря в P. S. добавил что-то. Это лишняя информация. С проблемами из P. S. я разобрался полностью через отгрузку и пересоздание по отдалению игроков, но остановка движения моба происходит за 30-40 блоков.
 
Да, наверное, я зря в P. S. добавил что-то. Это лишняя информация. С проблемами из P. S. я разобрался полностью через отгрузку и пересоздание по отдалению игроков, но остановка движения моба происходит за 30-40 блоков.
Я думаю это из-за отгрузки чанков, попробуй в spigot.yml увеличить view-distance и entity-tracking-range
 
Метод поиска пути a() работает максимуму на 30 блоков. Может изза этого
 
Проблема была решена, выделив большую дистанцию подгрузки мобов в Spigot.yml.
Ни контроллер, ни что-либо ещё не поможет обойти эту ограничалку Spigot-а. Как хорошо, что у меня миниигра, где не бывает мобов, которые не должны быть подгружены)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх