Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Как создать таймер(не модуль) | 1.21 | Fabric

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
25 Ноя 2024
Сообщения
106
Реакции
0
Я уже заебался, пытаюсь сделать таймер, который не будет стопить поток майнкрафта | То есть я сделал таймер, который не стопит поток майнкрафта, но работает так ->
Код:
Expand Collapse Copy
System.out.println("1");
Timer("100");
System.out.println("2") // <-Псевдокод

На выходе получаю
Код:
Expand Collapse Copy
1
1
1
1
1
------- <-
1
2
1
2
1
2
1
2
А мне нужно, что бы таймер работал так ->
Код:
Expand Collapse Copy
1
(Прошло 100мс)
2
это вообще можно реализовать?, мне нужно делать задержку перед открытием инвентаря и перемещением предметов, чтобы обойти античит.
Может есть другие способы сделать задержку?
 
Может тебе это поможет: (накалякал за 5 минут)

Важно помнить:
- 1 секунда = 20 тиков
- 1 тик = 50 миллисекунд
- 2 тика = 100 миллисекунд
И так далее

Ну и вот базовый пример того, как можно делать задержку в тиках перед какими-либо действиями
Java:
Expand Collapse Copy
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;

public class TickTimer {
    private static TickTimer instance;

    public static TickTimer getInstance() {
        if (instance == null) {
            instance = new TickTimer();
        }
        return instance;
    }

    private final Map<Integer, List<Runnable>> actions = new ConcurrentHashMap<>();
    private int ticks = 0;

    private TickTimer() {}

    public void onTick() {
        ticks++;

        List<Integer> keys = new ArrayList<>(actions.keySet());

        for (Integer tickTime : keys) {
            if (tickTime <= ticks) {
                List<Runnable> runnables = actions.get(tickTime);
                if (runnables != null) {
                    for (Runnable r : runnables) {
                        r.run();
                    }
                }
                actions.remove(tickTime);
            }
        }
    }

    public TickTimer after(int delayTicks, Runnable action) {
        if (delayTicks <= 0) delayTicks = 1;
        int executeTick = ticks + delayTicks;

        actions.computeIfAbsent(executeTick, k -> new ArrayList<>()).add(action);

        return this;
    }

    public void reset() {
        ticks = 0;
        actions.clear();
    }
}
Пример использования:
Java:
Expand Collapse Copy
TickTimer.getInstance()
    .after(2, () -> openInventory())
    .after(2, () -> swapItems())
    .after(2, () -> closeInventory());

Если есть какая-либо критика к моему коду, я всегда готов принять её
 
таймер на тиках
Расскажи поподробнее пожалуйста, я делал что то подобное и выходил асинхронный таймер, который работал вот так ->
1772823067801.png
 
Назад
Сверху Снизу