Кулдаун для блока при нажатии пкм

Версия Minecraft
1.7.10
Можете показать код как сделать кулдаун для блока при нажатии по нему пкм, например надо сделать кулдаун 10 секунд для сундука.
Ибо я пока вообще не понимаю как это можно реализовать, помогите пж
 
Решение
В обработчик событий:
EventsHandler.java:
public Map<BlockPos, Integer> map = new HashMap<>();

@SubscribeEvent
public void cooldownChest(PlayerInteractEvent.RightClickBlock e)
{
        if(map.get(e.getPos()) == e.getEntityPlayer().world.getTotalWorldTime())
        {
            e.setCancelled(true);
            // getTotalWorldTime всегда будет больше чем 0
            map.put(e.getPos(), 0);
        }
        map.put(e.getPos(), 0);
if(e.getEntityPlayer().world.getBlockState(e.getPos()).getBlock() == Blocks.CHEST)
        {
            if(map.get(e.getPos()) < e.getEntityPlayer().world.getTotalWorldTime())
            {
                // 20 тиков = 1 секунда. 10 секунд = 200 тиков
                map.put(e.getPos()...
Тут есть два решения, если лично для твоего блока который использует тайтлы, можно в нбт сохранять значения и в апдейте проверять
Если для блоков у которых нету тайтла или они ванильные, то через HashMap и эвент PlayerInteractEvent вроде так называется
 
Если у блока нет состояния (поворот и тд), можно метадату юзать. При пкм ставим единичку и говорим блоку обновиться через нужное время (scheduleBlockUpdate). А потом в updateTick ставим снова метадату на ноль.
 
В обработчик событий:
EventsHandler.java:
public Map<BlockPos, Integer> map = new HashMap<>();

@SubscribeEvent
public void cooldownChest(PlayerInteractEvent.RightClickBlock e)
{
        if(map.get(e.getPos()) == e.getEntityPlayer().world.getTotalWorldTime())
        {
            e.setCancelled(true);
            // getTotalWorldTime всегда будет больше чем 0
            map.put(e.getPos(), 0);
        }
        map.put(e.getPos(), 0);
if(e.getEntityPlayer().world.getBlockState(e.getPos()).getBlock() == Blocks.CHEST)
        {
            if(map.get(e.getPos()) < e.getEntityPlayer().world.getTotalWorldTime())
            {
                // 20 тиков = 1 секунда. 10 секунд = 200 тиков
                map.put(e.getPos(), e.getEntityPlayer().world.getTotalWorldTime() + 200);
             }
        }
}

Примерно так. Код для версии 1.12.2. На 1.7.10 я не проверял
 
Назад
Сверху