diff --git a/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java b/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java index 71a5578b..7a240524 100644 --- a/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java +++ b/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java @@ -3,9 +3,6 @@ package org.embeddedt.modernfix; import com.mojang.datafixers.util.Pair; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.ConnectScreen; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.MinecraftServer; @@ -28,6 +25,7 @@ import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; public class ModernFixClient { + public static ModernFixClient INSTANCE; public static long worldLoadStartTime; private static int numRenderTicks; @@ -43,6 +41,7 @@ public class ModernFixClient { public static List CLIENT_INTEGRATIONS = new CopyOnWriteArrayList<>(); public ModernFixClient() { + INSTANCE = this; // clear reserve as it's not needed MemoryReserve.release(); if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.branding.F3Screen")) { @@ -66,16 +65,14 @@ public class ModernFixClient { tagsUpdated = false; } - public void onScreenOpening(Screen openingScreen) { - if(openingScreen instanceof ConnectScreen) { - worldLoadStartTime = System.nanoTime(); - } else if (openingScreen instanceof TitleScreen && gameStartTimeSeconds < 0) { - gameStartTimeSeconds = ManagementFactory.getRuntimeMXBean().getUptime() / 1000f; - if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.measure_time.GameLoad")) - ModernFix.LOGGER.warn("Game took " + gameStartTimeSeconds + " seconds to start"); - ModernFixPlatformHooks.INSTANCE.onLaunchComplete(); - ClassInfoManager.clear(); - } + public void onGameLaunchFinish() { + if(gameStartTimeSeconds >= 0) + return; + gameStartTimeSeconds = ManagementFactory.getRuntimeMXBean().getUptime() / 1000f; + if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.measure_time.GameLoad")) + ModernFix.LOGGER.warn("Game took " + gameStartTimeSeconds + " seconds to start"); + ModernFixPlatformHooks.INSTANCE.onLaunchComplete(); + ClassInfoManager.clear(); } public void onRecipesUpdated() { diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/measure_time/ConnectScreenMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/measure_time/ConnectScreenMixin.java new file mode 100644 index 00000000..9454e44b --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/measure_time/ConnectScreenMixin.java @@ -0,0 +1,18 @@ +package org.embeddedt.modernfix.common.mixin.feature.measure_time; + +import net.minecraft.client.gui.screens.ConnectScreen; +import org.embeddedt.modernfix.ModernFixClient; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +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(ConnectScreen.class) +@ClientOnlyMixin +public class ConnectScreenMixin { + @Inject(method = "connect", at = @At("HEAD")) + private void recordConnectStartTime(CallbackInfo ci) { + ModernFixClient.worldLoadStartTime = System.nanoTime(); + } +} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/measure_time/MinecraftMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/measure_time/MinecraftMixin.java index 76151946..6417ab5c 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/measure_time/MinecraftMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/measure_time/MinecraftMixin.java @@ -1,25 +1,27 @@ package org.embeddedt.modernfix.common.mixin.feature.measure_time; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Overlay; +import org.embeddedt.modernfix.ModernFixClient; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) @ClientOnlyMixin public class MinecraftMixin { - /* not supported in 1.19 - private long datapackReloadStartTime; + // TODO re-add datapack reload time measurement + @Shadow @Nullable public Overlay overlay; - @Inject(method = "makeWorldStem(Lnet/minecraft/server/packs/repository/PackRepository;ZLnet/minecraft/server/WorldStem$DataPackConfigSupplier;Lnet/minecraft/server/WorldStem$WorldDataSupplier;)Lnet/minecraft/server/WorldStem;", at = @At(value = "HEAD")) - private void recordReloadStart(CallbackInfoReturnable cir) { - datapackReloadStartTime = System.nanoTime(); + @Inject(method = "tick", at = @At("HEAD")) + private void onClientTick(CallbackInfo ci) { + if(this.overlay == null) { + ModernFixClient.INSTANCE.onGameLaunchFinish(); + } } - - @Inject(method = "makeWorldStem(Lnet/minecraft/server/packs/repository/PackRepository;ZLnet/minecraft/server/WorldStem$DataPackConfigSupplier;Lnet/minecraft/server/WorldStem$WorldDataSupplier;)Lnet/minecraft/server/WorldStem;", at = @At(value = "RETURN")) - private void recordReloadEnd(CallbackInfoReturnable cir) { - float timeSpentReloading = ((float)(System.nanoTime() - datapackReloadStartTime) / 1000000000f); - ModernFix.LOGGER.warn("Datapack reload took " + timeSpentReloading + " seconds."); - } - */ } diff --git a/fabric/build.gradle b/fabric/build.gradle index 1366a9a7..1a4da704 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -34,7 +34,7 @@ dependencies { modIncludeImplementation(fabricApi.module("fabric-api-base", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } modIncludeImplementation(fabricApi.module("fabric-lifecycle-events-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } - modIncludeImplementation(fabricApi.module("fabric-screen-api-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } + modImplementation(fabricApi.module("fabric-screen-api-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } modIncludeImplementation(fabricApi.module("fabric-command-api-v2", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } modIncludeImplementation(fabricApi.module("fabric-models-v0", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } modImplementation(fabricApi.module("fabric-resource-loader-v0", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } diff --git a/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java b/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java index f4c420f6..83622f6f 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java @@ -2,14 +2,10 @@ package org.embeddedt.modernfix; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.Minecraft; import org.embeddedt.modernfix.fabric.datagen.RuntimeDatagen; -import java.util.concurrent.atomic.AtomicBoolean; - public class ModernFixClientFabric implements ClientModInitializer { public static ModernFixClient commonMod; @@ -18,16 +14,6 @@ public class ModernFixClientFabric implements ClientModInitializer { commonMod = new ModernFixClient(); ClientTickEvents.END_CLIENT_TICK.register((mc) -> commonMod.onRenderTickEnd()); - ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { - AtomicBoolean hasOpened = new AtomicBoolean(false); - ScreenEvents.beforeTick(screen).register(screen1 -> { - if(Minecraft.getInstance().getOverlay() != null) - return; - if(!hasOpened.getAndSet(true)) { - commonMod.onScreenOpening(screen1); - } - }); - }); ServerLifecycleEvents.SERVER_STARTED.register(server -> { commonMod.onServerStarted(server); }); diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 98dfe637..d29f2789 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -34,7 +34,6 @@ ], "depends": { "fabric-lifecycle-events-v1": "*", - "fabric-screen-api-v1": "*", "fabric-command-api-v2": "*", "fabric-models-v0": "*", "minecraft": ">=1.16.2" diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java index 19a7a863..c46e83cc 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java @@ -8,7 +8,6 @@ import net.minecraftforge.client.ConfigScreenHandler; import net.minecraftforge.client.event.CustomizeGuiOverlayEvent; import net.minecraftforge.client.event.RecipesUpdatedEvent; import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import net.minecraftforge.client.event.ScreenEvent; import net.minecraftforge.client.gui.overlay.ForgeGui; import net.minecraftforge.client.settings.KeyConflictContext; import net.minecraftforge.event.TagsUpdatedEvent; @@ -87,11 +86,4 @@ public class ModernFixClientForge { public void onTags(TagsUpdatedEvent e) { commonMod.onTagsUpdated(); } - - @SubscribeEvent(priority = EventPriority.LOWEST) - public void onScreen(ScreenEvent.Init.Pre event) { - if(event.isCanceled()) - return; - commonMod.onScreenOpening(event.getScreen()); - } }