Как по кд проверять высоту игрока и если игрок находится выше 0 высоты - ему давался эффект отравления

LineGames

Пользователь
Сообщения
36
Как по кд проверять высоту игрока и если игрок находится выше 0 высоты - ему давался эффект отравления максимального уровня а также желательно что бы периодически била молния но это не обязательно
 
Java:
public void onEnable() {
    PotionEffect pe = new PotionEffect(PotionEffectType.POISON, 110, 255);
    new BukkitRunnable() {
        @Override
        public void run() {
            for (Player player : Bukkit.getOnlinePlayers()) {
                if(player.getLocation().getBlockY()>0) {
                    player.removePotionEffect(PotionEffectType.POISON);
                    player.addPotionEffect(pe);
                    if(new Random().nextInt()<<30==0) {
                        player.getWorld().strikeLightningEffect(player.getLocation());
                    }
                }
            }
        }
    }.runTaskTimer(this, 0L, 20L);
}
 
Твоя задумка будет нагружать цпу сильно при большом онлайне т.к будет проверять каждого игрока на уровень высоты = минус процессорного времени, логично было сделать проверку раз в минуту для всех игроков без разделения на игрока.
И проверять не уровень высоты а тип блока,если он на бедроке стоит ,значит он вышел за крышу ада.
Ну твой вариант крч нагружает, лучше другой поискать.
 
Твоя задумка будет нагружать цпу сильно при большом онлайне т.к будет проверять каждого игрока на уровень высоты = минус процессорного времени, логично было сделать проверку раз в минуту для всех игроков без разделения на игрока.
И проверять не уровень высоты а тип блока,если он на бедроке стоит ,значит он вышел за крышу ада.
Ну твой вариант крч нагружает, лучше другой поискать.
Java:
@EventHandler
public void onMove(PlayerMoveEvent e){
    if(e.getPlayer().getLocation().getY() >= 126)
        e.getPlayer().teleport(spawn);
}
 
Твоя задумка будет нагружать цпу сильно при большом онлайне т.к будет проверять каждого игрока на уровень высоты = минус процессорного времени, логично было сделать проверку раз в минуту для всех игроков без разделения на игрока.
И проверять не уровень высоты а тип блока,если он на бедроке стоит ,значит он вышел за крышу ада.
Ну твой вариант крч нагружает, лучше другой поискать.
Судя по тому что условия срабатывают если "игрок находится выше 0 высоты" целью является удержать игрока в пещерах на версиях 1.18+ а не запретить выходить игроку на крышу ада. А частоту проверки можно настроить под себя поигравшись с циферками.
 
Java:
@EventHandler
public void onMove(PlayerMoveEvent e){
    if(e.getPlayer().getLocation().getY() >= 126)
        e.getPlayer().teleport(spawn);
}
Ужасный вариант. PlayerMoveEvent стоит использовать только если совсем безвыходная ситуация
Я бы оставил вариант с периодической проверкой высоты у всех игроков. Получение высоты - не тяжелая операция совершенно и нагрузка будет на уровне сравнения двух чисел. Влияния на тпс, вероятно, вовсе не будет - такая операция не занимает даже 1мс и выполняется не каждый тик, а условные 5
 
Назад
Сверху Снизу