Move WorldReadyEvent back more

This commit is contained in:
nea
2023-05-03 01:09:19 +02:00
parent 3be33bb522
commit f93df266c6
4 changed files with 47 additions and 27 deletions

View File

@@ -1,17 +1,16 @@
package moe.nea.notenoughupdates.mixins; package moe.nea.notenoughupdates.mixins;
import moe.nea.notenoughupdates.events.WorldReadyEvent; import moe.nea.notenoughupdates.events.WorldReadyEvent;
import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.gui.screen.DownloadingTerrainScreen;
import net.minecraft.network.packet.s2c.play.PlayerSpawnPositionS2CPacket;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ClientPlayNetworkHandler.class) @Mixin(DownloadingTerrainScreen.class)
public class MixinClientPlayNetworkHandler { public class MixinDownloadingTerrainScreen {
@Inject(method = "onPlayerSpawnPosition", at = @At("RETURN")) @Inject(method = "close", at = @At("HEAD"))
public void onOnPlayerSpawnPosition(PlayerSpawnPositionS2CPacket packet, CallbackInfo ci) { public void onClose(CallbackInfo ci) {
WorldReadyEvent.Companion.publish(new WorldReadyEvent()); WorldReadyEvent.Companion.publish(new WorldReadyEvent());
} }
} }

View File

@@ -11,12 +11,11 @@ import moe.nea.notenoughupdates.events.ServerChatLineReceivedEvent
import moe.nea.notenoughupdates.events.SkyblockServerUpdateEvent import moe.nea.notenoughupdates.events.SkyblockServerUpdateEvent
import moe.nea.notenoughupdates.events.WorldReadyEvent import moe.nea.notenoughupdates.events.WorldReadyEvent
@OptIn(ExperimentalTime::class)
object SBData { object SBData {
val profileRegex = "(?:Your profile was changed to: |You are playing on profile: )(.+)".toRegex() val profileRegex = "(?:Your profile was changed to: |You are playing on profile: )(.+)".toRegex()
var profileCuteName: String? = null var profileCuteName: String? = null
private var lastLocrawSent: TimeSource.Monotonic.ValueTimeMark? = null private var lastLocrawSent = Timer()
private val locrawRoundtripTime: Duration = 5.seconds private val locrawRoundtripTime: Duration = 5.seconds
var locraw: Locraw? = null var locraw: Locraw? = null
val skyblockLocation get() = locraw?.skyblockLocation val skyblockLocation get() = locraw?.skyblockLocation
@@ -29,9 +28,8 @@ object SBData {
profileCuteName = profileMatch.groupValues[1] profileCuteName = profileMatch.groupValues[1]
} }
if (event.unformattedString.startsWith("{")) { if (event.unformattedString.startsWith("{")) {
val lLS = lastLocrawSent if (tryReceiveLocraw(event.unformattedString) && lastLocrawSent.timePassed() < locrawRoundtripTime) {
if (tryReceiveLocraw(event.unformattedString) && lLS != null && lLS.elapsedNow() < locrawRoundtripTime) { lastLocrawSent.markFarPast()
lastLocrawSent = null
event.cancel() event.cancel()
} }
} }
@@ -57,9 +55,9 @@ object SBData {
} }
fun sendLocraw() { fun sendLocraw() {
lastLocrawSent = TimeSource.Monotonic.markNow() lastLocrawSent.markNow()
val nh = MC.player?.networkHandler ?: return val nh = MC.player?.networkHandler ?: return
nh.sendChatCommand("locraw") nh.sendChatCommand("locraw")
} }

View File

@@ -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
}
}

View File

@@ -3,7 +3,7 @@
"package": "moe.nea.notenoughupdates.mixins", "package": "moe.nea.notenoughupdates.mixins",
"compatibilityLevel": "JAVA_16", "compatibilityLevel": "JAVA_16",
"client": [ "client": [
"MixinClientPlayNetworkHandler", "MixinDownloadingTerrainScreen",
"MixinMessageHandler", "MixinMessageHandler",
"MixinMinecraft", "MixinMinecraft",
"MixinWorldRenderer" "MixinWorldRenderer"