Нажатие пкм

Версия Minecraft
1.7.10
516
11
39
Всем привет.Как сделать нажатие пкм через определенное время(2секунды)
 
1,174
29
169
создаешь интегер и булев переменные
в апдейте
Java:
if(world.isRemote){
  if(Mouse.isButtonDown(1) && твоя интегер переменная % 40 == 0)
  твоя булев переменная = true;
  else
  твоя булев переменная = false;
}
потом проверяешь в тикере
Java:
if(!world.isRemote && твоя булев переменная == true)
//какой то код
Вроде все правильно написал)
Зажимаешь пкм, и каждые две секунды, держа в руках итем, будет выполнятся какой то код
 
7,099
324
1,509
7,099
324
1,509
Можно проще с одной переменной. Но проблема не в этом. Допустим, один игрок кликнул предметом и таймер обновился. Кулдаун повлияет и на второго игрока, потому что предмет - синглтон, он один на всю игру
 
7,099
324
1,509
Нбт уникальное для каждого предмета, т.е. имея несколько стаков в инвентаре игрок может юзать их без кулдауна

Если не требуется сохранять при перезагрузке мира - можно просто сделать мапу EntityPlayer->Int
 
7,099
324
1,509
сделать переменную HashMap<EntityPlayer, Integer>, в ней хранить таймеры
 
516
11
39
Может кто-то подскажет,стреляет без задержки

Java:
public static final HashMap<EntityPlayer, Long> mapT = new HashMap<EntityPlayer, Long>();
Java:
@Override
        public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player){
        
        if (!mapT.containsKey(player)) {
            mapT.put(player, world.getTotalWorldTime() + (long)(20 * 2));
        }
        else {
        if (mapT.get(player) >= world.getTotalWorldTime()) {
            EntityM entity = new EntityM (world, player);
            world.spawnEntityInWorld(entity);
            mapT.replace(player, world.getTotalWorldTime() + (long)(20 * 2));
        }
        }
        return itemstack;

    }
 
3,005
192
592
кто-то подскажет
Вроде бы у тебя задержка только между выстрелами.
Типо стрельнул (сразу) потом должен подождать и по кругу.
Если тебе нужно сначала нажал, потом подождал, потом выстрел:
Значение чекать не в пкм, а в тик ивенте.
И после уже сразу "выпускать пулю".
~
И храни лучше ник, а не объект игрока.
 
7,099
324
1,509
Java:
public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player){

        long current=mapT.computeIfAbsent(player, 0);

        if (current <= 0) {
            EntityM entity = new EntityM (world, player);
            world.spawnEntityInWorld(entity);
            mapT.put(player, 20*2);//2 секунды
        }

        return itemstack;
}
//Server tick event handler
mapT.keySet.forEach(player->
  mapT.put(player, mapT.computeIfAbsent(player, 1) - 1);
)
 
Последнее редактирование:
3,005
192
592
7,099
324
1,509
Действительно:m_faceplam:, нужно юзать событие TickEvent.Server, этож таймер
~~~
Поправил
 
516
11
39
Вроде бы у тебя задержка только между выстрелами.
Типо стрельнул (сразу) потом должен подождать и по кругу.
В игре он стреляет без задержки

Если тебе нужно сначала нажал, потом подождал, потом выстрел:
Значение чекать не в пкм, а в тик ивенте.
Мне надо ,нажал пкм выстрел,подождал 2 сек,пкм выстрел
 
516
11
39
Попробуй как я выше описал, только через нбт
как это сделать через нбт?
Java:
if(!world.isRemote && isCooldown == false){
//выполнить код
isCooldown = true;
}
if(cooldown > 0)
 cooldown--;
if(isCooldown == true)
 cooldown = 40;
if(cooldown == 0)
isCooldown = false;
 
Сверху