From c51e0cdaee07dd0655e0bb4434beec00098eea3f Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Thu, 5 Jun 2025 19:35:06 +0200 Subject: [PATCH] KeyHandler: Don't queue first tick twice The RepeatedTask instantly executed in kutil 1.27 (additionally with the onTick call). --- .../de/bixilon/minosoft/input/interaction/KeyHandler.kt | 5 ++++- src/main/java/de/bixilon/minosoft/util/KUtil.kt | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/KeyHandler.kt b/src/main/java/de/bixilon/minosoft/input/interaction/KeyHandler.kt index 661c93e61..cc82c8c97 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/KeyHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/KeyHandler.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger + * Copyright (C) 2020-2025 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -17,8 +17,10 @@ import de.bixilon.kutil.concurrent.pool.ThreadPool import de.bixilon.kutil.concurrent.schedule.RepeatedTask import de.bixilon.kutil.concurrent.schedule.TaskScheduler import de.bixilon.kutil.exception.Broken +import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.minosoft.protocol.network.session.play.tick.TickUtil import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition +import de.bixilon.minosoft.util.KUtil.skip import kotlin.time.Duration.Companion.milliseconds abstract class KeyHandler { @@ -28,6 +30,7 @@ abstract class KeyHandler { private fun queueTick() { val task = RepeatedTask(TickUtil.INTERVAL, priority = ThreadPool.HIGH) { onTick() } + task.skip(1) this.task = task TaskScheduler += task } diff --git a/src/main/java/de/bixilon/minosoft/util/KUtil.kt b/src/main/java/de/bixilon/minosoft/util/KUtil.kt index e7e0425c9..a7841a9b8 100644 --- a/src/main/java/de/bixilon/minosoft/util/KUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/KUtil.kt @@ -30,12 +30,14 @@ import de.bixilon.kutil.collections.CollectionUtil.synchronizedSetOf import de.bixilon.kutil.collections.CollectionUtil.toSynchronizedSet import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.runnable.ForcePooledRunnable +import de.bixilon.kutil.concurrent.schedule.RepeatedTask import de.bixilon.kutil.concurrent.schedule.TaskScheduler import de.bixilon.kutil.primitive.DoubleUtil import de.bixilon.kutil.primitive.DoubleUtil.matches import de.bixilon.kutil.primitive.IntUtil.isIntSafe import de.bixilon.kutil.reflection.ReflectionUtil.field import de.bixilon.kutil.reflection.ReflectionUtil.forceInit +import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.getUnsafeField import de.bixilon.kutil.reflection.ReflectionUtil.realName import de.bixilon.kutil.shutdown.ShutdownManager @@ -78,7 +80,6 @@ import java.util.* import javax.net.ssl.SSLContext import kotlin.time.Duration import kotlin.time.Duration.Companion.nanoseconds -import kotlin.time.Duration.Companion.seconds import kotlin.time.ExperimentalTime @@ -361,4 +362,9 @@ object KUtil { @OptIn(ExperimentalTime::class) @Deprecated("kutil 1.27.2") fun SimpleDateFormat.format1(instant: kotlin.time.Instant) = format(instant.toEpochMilliseconds()) + + @Deprecated("Kutil 1.27.2") + fun RepeatedTask.skip(count: Int = 1) { + this::next.forceSet(now() + this.interval * count) + } }