Кулдаун у предметов

scrimers

Premium
Сообщения
37
1.12.2
Как можно сделать кулдаун после использования предмета, например накладывается эффект на игрока при каком то условии, и он не может повторить наложение сек 10

От модератора: Готовый вариант написан здесь *тык*.
 
Последнее редактирование модератором:
Создать HashMap<UUID, Integer> и таймер. При использовании предмета засовывать игрока в эту мапу и в таймере, используя forEach (т.е. for(UUID uuid : мапа.keySet()) {тыры пыры} ), делать отсчёт. И при повторном использовании проверять, находится ли он в этой мапе или нет. Если да, то отменять действие, если нет, то выполнять код, который должен идти.
 
Код:
        //задаешь переменную
        final int cooldown;
        //если кулдауна нет
        if (cooldown != 1) {
            //code
            //исполнить и поставить кулдаун
            cooldown = 1;
            new BukkitRunnable() {

                @Override
                public void run() {
                    cooldown = 0;
                }
            }.runTaskLater(this,600*20);
            //снять кулдаун через 600 секунд
        }
Я бы так сделал
 
моей IDE не нравится такой подходит, вот код, на который не ругается

Java:
        final int[] cooldown = new int[0];
        if (cooldown[0] != 1) {
            //code
            cooldown[0] = 1;
            new BukkitRunnable() {

                @Override
                public void run() {
                    cooldown[0] = 0;
                }
            }.runTaskLater(this,600*20);
        } else {
            player.sendMessage("У тебя кулдаун.");
        }
Авто объединение сообщений:

BuseSo, переменная не на игрока, а на сервер работает? Ой, точно...
Авто объединение сообщений:

Тогда хэшмапом, по другому никак
 
BuseSo, не одно, так другое (и как использовать UUID)
Java:
public class Handler implements Listener{
    public static Object map;
    @EventHandler
    public void use(PlayerInteractEvent e) {
        Player p = e.getPlayer();
        if(e.getAction() == Action.RIGHT_CLICK_AIR) {
            if (p.getInventory().getItemInMainHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_AQUA +"Muramasa")) {     
                p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,3 ,40));
                p.playSound(p.getLocation(), Sound.ENTITY_FIREWORK_LAUNCH, 10, 3);
            }
        }
    }
}



----------------------

import java.util.UUID;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;

public class Timer extends BukkitRunnable {

    @Override
    public void run() {
        for(UUID uuid : ((Player) Handler.map).keySet()) { //The method keySet() is undefined for the type Player
            int time = ((Player) Handler.map).get(uuid); //The method get(UUID) is undefined for the type Player
            if(time == 0) {
                ((Player) Handler.map).remove();
            } else {
                ((Player) Handler.map).put(uuid, time-5);//The method get(UUID) is undefined for the type Player
            }
        }
    }
}
 
Последнее редактирование:
Спокойствие и терпение

Вот таким должен быть твой класс слушателя:
Java:
public class Handler implements Listener{
    public static HashMap<UUID, Integer> map = new HashMap<>();
    @EventHandler
    public void use(PlayerInteractEvent e) {
        Player p = e.getPlayer();
        if(e.getAction() == Action.RIGHT_CLICK_AIR) {
            if (p.getInventory().getItemInMainHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_AQUA +"Muramasa")) {     
                p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,3 ,40));
                p.playSound(p.getLocation(), Sound.ENTITY_FIREWORK_LAUNCH, 10, 3);
                map.put(p.getUniqueId(), число в секундах для задержки);
            }
        }
    }
}
 
а это же вроде кулдаун?
Да, это он.

как я могу отменить его(как мне сделать ссылку на время?
Java:
if(map.containsKey(p.getUniqueId())) {
    //Код, если содержится в хеше
    int cd = map.get(p.getUniqueId());
    p.sendMessage("Вы не можете делать это ещё "+cd+" сек!");
}
 
Назад
Сверху Снизу