Что будет меньше нагружать игру, PlayerTickEvent или отдельный поток?

Версия Minecraft
1.12.2
API
Forge
170
5
14
Вот мой код
Java:
if (player.getEntityWorld().getBiome(player.getPosition()) == Biomes.PLAINS) {
    int i = Handler.genRandomIntRange(0, 4000); // Генератор случайных чисел
    int l = Handler.genRandomIntRange(60, 300); // Это тоже
    if (i == 0) {
        // чтото
    }
Поток уходящий в спячку допустим на секунду
 
Последнее редактирование:
Решение
Вынести в отдельный поток можно только тот код который не взаимодействует ни с миром, ни с игроками. В вашем случае можно добавить счётчик для пропуска тиков, для того чтобы выполнять свой код раз в N тиков.
1,074
72
372
Вынести в отдельный поток можно только тот код который не взаимодействует ни с миром, ни с игроками. В вашем случае можно добавить счётчик для пропуска тиков, для того чтобы выполнять свой код раз в N тиков.
 
Последнее редактирование:
12
0
  1. PlayerTickEvent:
    • Это событие возникает при каждом тике (обновлении) игрока. Использование этого события для выполнения задач может быть удобным в том случае, если ваша задача напрямую связана с игровым процессом игрока. Например, обновление UI, связанного с состоянием игрока, обработка взаимодействия игрока с окружающим миром и т.д.
    • Однако следует быть осторожным с обработкой событий, особенно если эти события требуют длительного времени выполнения или если их частота слишком высока. Слишком интенсивная обработка событий может привести к замедлению игрового процесса и даже к простоям.
  2. Отдельный поток:
    • Использование отдельного потока для выполнения задач может быть полезным, если эти задачи требуют значительного времени выполнения, но необходимы для игрового процесса (например, загрузка данных, обработка сложных вычислений и т.д.).
    • Однако необходимо быть осторожным с использованием многопоточности в игровых приложениях, так как неправильное использование потоков может привести к гонкам данных, блокировкам и другим проблемам с синхронизацией, которые могут вызвать сбои и нестабильность игры.
В конечном итоге правильный выбор будет зависеть от конкретных требований вашего проекта и того, какие именно задачи вы хотите выполнить. Важно тестировать различные подходы и измерять их воздействие на производительность игры, чтобы принять информированное решение.
 
170
5
14
TheAndrey, А как можно установить счетчик тиков
Может это не так, как я это представляю, создаешь переменную, допустим i каждый раз когда евент срабатывает переменная увеличивается на 1 i++, создаем условие if (i >= 20) {}, если i = или больше 20 запускается наш код и i приравнивается 0.
В итоге все выглядит так:
Java:
int i = 0;
@SubscribeEvent
public void event(TickEvent.PlayerTickEvent e) {
    i++;
    if (i >= 20) {
        i = 0;
        // Какойто код
    }
}
 
Сверху