Помогите Кривая подгрузка чанков

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

SaMEC

Старожил
Пользователь
Баллы
173
Имя в Minecraft
Nick
Версия ядра spigot 1.12.2
Суть вопроса такова. При работе с арморстендами возникает одна проблема. Если заспавнить армор стенд на 30 секунд находясь рядом, армор стенд как положено проживет 30 секунд и уничтожится.
Но если отойти за эти 30 секунд на 5-6 чанков от армор стенда то он не уничтожится.
Проблема в том что, чанк вроде как прогружается или держится подгруженным другими плагинами или моим же.
Пробовал каждые 5 тиков подгружать.
Код:
if(!loc.getChunk().isLoaded()){
         loc.getChunk().load(true);
}
Грешу на чанки, но уже сомневаюсь. Не исключаю что возможны какие то проблемы в самом ядре.
Если кто сталкивался, поделись советом, а то уже голову сломал.
 
Нужен полный код уничтожения
 
Заюзай getblock в той локации перед удалением, само подгрузит когда надо.
 
Нужен полный код уничтожения
Код:
    public void goUp(ArmorStand armorStand, Location loc) {
        double height = loc.getY() + 1.5;
        new BukkitRunnable(){
            @Override
            public void run() {
                if (armorStand.isDead()) {
                    if(loc.getChunk().isLoaded()){
                        loc.getChunk().load(true);
                    }
                    loc.getBlock();
                    armorStand.remove();
                    radiantArmorStands.remove(armorStand);
                    this.cancel();
                    return;
                }
                if (armorStand.getLocation().getY() > height) {
                    this.cancel();
                    goDown(armorStand, loc);
                    return;
                }
                loc.setYaw(loc.getYaw() + 7.0f);
                armorStand.teleport(loc.add(0.0, 0.07, 0.0));
            }
        }.runTaskTimer(Main.getInstance(), 1L, 1L);
    }
 
Попробовал один способ, но он много кушает памяти, просто держать чанк всегда подгруженным отменяя ивент ChunkUnloadEvent если в этом чанке есть арморстенд. Тогда арморстенд не зависает.
 
Код:
    public void goUp(ArmorStand armorStand, Location loc) {
        double height = loc.getY() + 1.5;
        new BukkitRunnable(){
            @Override
            public void run() {
                if (armorStand.isDead()) {
                    if(loc.getChunk().isLoaded()){
                        loc.getChunk().load(true);
                    }
                    loc.getBlock();
                    armorStand.remove();
                    radiantArmorStands.remove(armorStand);
                    this.cancel();
                    return;
                }
                if (armorStand.getLocation().getY() > height) {
                    this.cancel();
                    goDown(armorStand, loc);
                    return;
                }
                loc.setYaw(loc.getYaw() + 7.0f);
                armorStand.teleport(loc.add(0.0, 0.07, 0.0));
            }
        }.runTaskTimer(Main.getInstance(), 1L, 1L);
    }
Ну так точно не удалится. ArmorStand = nell.
world.getEntity(UUID).remove(); Это после getBlock в локации где был стенд, чтоб загрузило чанк.
 
Ну так точно не удалится. ArmorStand = nell.
world.getEntity(UUID).remove(); Это после getBlock в локации где был стенд, чтоб загрузило чанк.
Разобрался, работает, благодарю.
Да поправочка в 1.12.2 используется Bukkit.getEntity(UUID).remove();
 
Назад
Верх