Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

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 секунды, нужно быстрее.
Можно ли заменить бакет шедулер или все дело в оперативе выделенной для серва?

Заранее спасибо за помощь!
 
1. Какая смысловая нагрузка от этой строчки?
2. Половина кода вообще нет и можно только догадываться, что на самом деле технически делают методы, начинающиеся с get.
3. Полагаю, излишний класс-каст, никакие специфичные для FallingBlock методы не используются.
FallingBlock block = (FallingBlock) getServer().getEntity(Map.get(plc.getName()));
Код:
Entity block = getServer().getEntity(Map.get(plc.getName()));
 
но Falling block телепортируется от силы раз в 2 секунды, нужно быстрее.
Можно ли заменить бакет шедулер или все дело в оперативе выделенной для серва?
Недавно тоже пытался телепортировать падающий блок, как я понял телепорт и velocity падающего блока конфликтуют и кажется что он телепортируется раз в пару сек. (Может ошибаюсь но я телепортировал каждый тик, всеравно лагает)
 
Код:
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
 
1. Какая смысловая нагрузка от этой строчки?

2. Половина кода вообще нет и можно только догадываться, что на самом деле технически делают методы, начинающиеся с get.
3. Полагаю, излишний класс-каст, никакие специфичные для FallingBlock методы не используются.

Код:
Entity block = getServer().getEntity(Map.get(plc.getName()));

Спасибо, я учёл это, и в правду, очень глупо получилось, я изучил класс-каст, спасибо
 

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

Назад
Верх