From f93df266c60de0567be1c963d0fbc0861bc4f197 Mon Sep 17 00:00:00 2001 From: nea Date: Wed, 3 May 2023 01:09:19 +0200 Subject: Move WorldReadyEvent back more --- .../mixins/MixinClientPlayNetworkHandler.java | 17 ------------- .../mixins/MixinDownloadingTerrainScreen.java | 16 +++++++++++++ .../kotlin/moe/nea/notenoughupdates/util/SBData.kt | 12 ++++------ .../kotlin/moe/nea/notenoughupdates/util/Timer.kt | 23 ++++++++++++++++++ src/main/resources/notenoughupdates.mixins.json | 28 +++++++++++----------- 5 files changed, 58 insertions(+), 38 deletions(-) delete mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/MixinClientPlayNetworkHandler.java create mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/MixinDownloadingTerrainScreen.java create mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/Timer.kt diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/MixinClientPlayNetworkHandler.java b/src/main/java/moe/nea/notenoughupdates/mixins/MixinClientPlayNetworkHandler.java deleted file mode 100644 index 34334b6..0000000 --- a/src/main/java/moe/nea/notenoughupdates/mixins/MixinClientPlayNetworkHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package moe.nea.notenoughupdates.mixins; - -import moe.nea.notenoughupdates.events.WorldReadyEvent; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.packet.s2c.play.PlayerSpawnPositionS2CPacket; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ClientPlayNetworkHandler.class) -public class MixinClientPlayNetworkHandler { - @Inject(method = "onPlayerSpawnPosition", at = @At("RETURN")) - public void onOnPlayerSpawnPosition(PlayerSpawnPositionS2CPacket packet, CallbackInfo ci) { - WorldReadyEvent.Companion.publish(new WorldReadyEvent()); - } -} diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/MixinDownloadingTerrainScreen.java b/src/main/java/moe/nea/notenoughupdates/mixins/MixinDownloadingTerrainScreen.java new file mode 100644 index 0000000..3ed8a73 --- /dev/null +++ b/src/main/java/moe/nea/notenoughupdates/mixins/MixinDownloadingTerrainScreen.java @@ -0,0 +1,16 @@ +package moe.nea.notenoughupdates.mixins; + +import moe.nea.notenoughupdates.events.WorldReadyEvent; +import net.minecraft.client.gui.screen.DownloadingTerrainScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(DownloadingTerrainScreen.class) +public class MixinDownloadingTerrainScreen { + @Inject(method = "close", at = @At("HEAD")) + public void onClose(CallbackInfo ci) { + WorldReadyEvent.Companion.publish(new WorldReadyEvent()); + } +} diff --git a/src/main/kotlin/moe/nea/notenoughupdates/util/SBData.kt b/src/main/kotlin/moe/nea/notenoughupdates/util/SBData.kt index 6d4af7e..393cdbb 100644 --- a/src/main/kotlin/moe/nea/notenoughupdates/util/SBData.kt +++ b/src/main/kotlin/moe/nea/notenoughupdates/util/SBData.kt @@ -11,12 +11,11 @@ import moe.nea.notenoughupdates.events.ServerChatLineReceivedEvent import moe.nea.notenoughupdates.events.SkyblockServerUpdateEvent import moe.nea.notenoughupdates.events.WorldReadyEvent -@OptIn(ExperimentalTime::class) object SBData { val profileRegex = "(?:Your profile was changed to: |You are playing on profile: )(.+)".toRegex() var profileCuteName: String? = null - private var lastLocrawSent: TimeSource.Monotonic.ValueTimeMark? = null + private var lastLocrawSent = Timer() private val locrawRoundtripTime: Duration = 5.seconds var locraw: Locraw? = null val skyblockLocation get() = locraw?.skyblockLocation @@ -29,9 +28,8 @@ object SBData { profileCuteName = profileMatch.groupValues[1] } if (event.unformattedString.startsWith("{")) { - val lLS = lastLocrawSent - if (tryReceiveLocraw(event.unformattedString) && lLS != null && lLS.elapsedNow() < locrawRoundtripTime) { - lastLocrawSent = null + if (tryReceiveLocraw(event.unformattedString) && lastLocrawSent.timePassed() < locrawRoundtripTime) { + lastLocrawSent.markFarPast() event.cancel() } } @@ -57,9 +55,9 @@ object SBData { } fun sendLocraw() { - lastLocrawSent = TimeSource.Monotonic.markNow() + lastLocrawSent.markNow() val nh = MC.player?.networkHandler ?: return -nh.sendChatCommand("locraw") + nh.sendChatCommand("locraw") } diff --git a/src/main/kotlin/moe/nea/notenoughupdates/util/Timer.kt b/src/main/kotlin/moe/nea/notenoughupdates/util/Timer.kt new file mode 100644 index 0000000..14f76f7 --- /dev/null +++ b/src/main/kotlin/moe/nea/notenoughupdates/util/Timer.kt @@ -0,0 +1,23 @@ +package moe.nea.notenoughupdates.util + +import kotlin.time.Duration +import kotlin.time.ExperimentalTime +import kotlin.time.TimeSource + +@OptIn(ExperimentalTime::class) +class Timer { + private var mark: TimeSource.Monotonic.ValueTimeMark? = null + + fun timePassed(): Duration { + return mark?.elapsedNow() ?: Duration.INFINITE + } + + fun markNow() { + mark = TimeSource.Monotonic.markNow() + } + + fun markFarPast() { + mark = null + } + +} diff --git a/src/main/resources/notenoughupdates.mixins.json b/src/main/resources/notenoughupdates.mixins.json index 52d30a7..1364f37 100644 --- a/src/main/resources/notenoughupdates.mixins.json +++ b/src/main/resources/notenoughupdates.mixins.json @@ -1,16 +1,16 @@ { - "required": true, - "package": "moe.nea.notenoughupdates.mixins", - "compatibilityLevel": "JAVA_16", - "client": [ - "MixinClientPlayNetworkHandler", - "MixinMessageHandler", - "MixinMinecraft", - "MixinWorldRenderer" - ], - "mixins": [ - ], - "injectors": { - "defaultRequire": 1 - } + "required": true, + "package": "moe.nea.notenoughupdates.mixins", + "compatibilityLevel": "JAVA_16", + "client": [ + "MixinDownloadingTerrainScreen", + "MixinMessageHandler", + "MixinMinecraft", + "MixinWorldRenderer" + ], + "mixins": [ + ], + "injectors": { + "defaultRequire": 1 + } } -- cgit