Move WorldReadyEvent back more
This commit is contained in:
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
23
src/main/kotlin/moe/nea/notenoughupdates/util/Timer.kt
Normal file
23
src/main/kotlin/moe/nea/notenoughupdates/util/Timer.kt
Normal 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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user