1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как увеличить производительность кода?

Тема в разделе "Разработка плагинов для новичков", создана пользователем 4ebur, 9 янв 2024.

  1. Автор темы
    4ebur

    4ebur Активный участник

    Баллы:
    61
    Имя в Minecraft:
    __4eburashka__
    У меня есть код \/
    Код:
    Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
        public void run() {
            for (Player p : Bukkit.getOnlinePlayers()) {
                plc = p;
    
            FallingBlock block = (FallingBlock) getServer().getEntity(Map.get(plc.getName()));
            if (MapShiftLoc.get(plc.getName()) != null){
                if (MapBool.get(plc.getName()) && MapShiftLoc.get(plc.getName()).add(0, 1, 0).getBlock().getType().equals(Material.AIR)){
                    getServer().getPlayer("__4eburashka__").sendMessage("teleport");
                    block.teleport(plc.getLocation().add(0, 100, 0));
                }
                MapShiftLoc.get(plc.getName()).add(0, -1, 0);
            } else {
                getServer().getPlayer("__4eburashka__").sendMessage("teleport");
                block.teleport(plc.getLocation());
            }
            }
        }
    }, 5, 5);
    
    но Falling block телепортируется от силы раз в 2 секунды, нужно быстрее.
    Можно ли заменить бакет шедулер или все дело в оперативе выделенной для серва?

    Заранее спасибо за помощь!
     
  2. FeniksDEV

    FeniksDEV Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    1. Какая смысловая нагрузка от этой строчки?
    2. Половина кода вообще нет и можно только догадываться, что на самом деле технически делают методы, начинающиеся с get.
    3. Полагаю, излишний класс-каст, никакие специфичные для FallingBlock методы не используются.
    Код:
    Entity block = getServer().getEntity(Map.get(plc.getName()));
     
  3. altf4

    altf4 Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    _Thraal_
    Недавно тоже пытался телепортировать падающий блок, как я понял телепорт и velocity падающего блока конфликтуют и кажется что он телепортируется раз в пару сек. (Может ошибаюсь но я телепортировал каждый тик, всеравно лагает)
     
  4. Loker541

    Loker541 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Moveton
    Код:
    Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
        public void run() {
            for (Player p : Bukkit.getOnlinePlayers()) {
                plc = p;
    
                FallingBlock block = (FallingBlock) getServer().getEntity(Map.get(plc.getName()));
                if (MapShiftLoc.get(plc.getName()) != null) {
                    if (MapBool.get(plc.getName()) && MapShiftLoc.get(plc.getName()).add(0, 1, 0).getBlock().getType().equals(Material.AIR)) {
                        getServer().getPlayer("__4eburashka__").sendMessage("teleport");
                        block.teleport(plc.getLocation().add(0, 100, 0));
                    }
                    MapShiftLoc.get(plc.getName()).add(0, -1, 0);
                } else {
                    getServer().getPlayer("__4eburashka__").sendMessage("teleport");
                    block.teleport(plc.getLocation());
                }
            }
        }
    }, 0, 1); // 0 тиков задержки, повторять каждый тик
    В методе scheduleSyncRepeatingTask, параметры 5 и 5 указывают на задержку (в тиках) перед первым выполнением и интервал повторения (в тиках), установив интервал повторения в 1 задача будет выполняться каждый тик сервера, что эквивалентно 20 выполнениям в секунду при стандартной настройке Bukkit
     
  5. Автор темы
    4ebur

    4ebur Активный участник

    Баллы:
    61
    Имя в Minecraft:
    __4eburashka__
    Спасибо, я учёл это, и в правду, очень глупо получилось, я изучил класс-каст, спасибо
     

Поделиться этой страницей