diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java index ca0f10490..0d4846e20 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java @@ -257,7 +257,13 @@ public class ClassicConfigGUI // Some textuary stuff 0, new ResourceLocation(ModInfo.ID, "textures/gui/changelog.png"), 20, 20, // Create the button and tell it where to go - (buttonWidget) -> Objects.requireNonNull(minecraft).setScreen(new ChangelogScreen(this)), + (buttonWidget) -> { + ChangelogScreen changelogScreen = new ChangelogScreen(this); + if (changelogScreen.usable) + Objects.requireNonNull(minecraft).setScreen(changelogScreen); + else + LOGGER.warn("Changelog was not able to open"); + }, // Add a title to the button Translatable(ModInfo.ID + ".updater.title") )); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/ChangelogScreen.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/ChangelogScreen.java index df2cc3dc2..6d9c37cdb 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/ChangelogScreen.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/updater/ChangelogScreen.java @@ -44,16 +44,32 @@ public class ChangelogScreen extends DhScreen private List changelog; private TextArea changelogArea; + public boolean usable = false; + public ChangelogScreen(Screen parent) { this(parent, null); if (!ModrinthGetter.initted) // Make sure the modrinth stuff is initted ModrinthGetter.init(); - if (!ModrinthGetter.initted) // If its not initted the just close the screen - onClose(); + if (!ModrinthGetter.initted) // If its not initted, then this isnt usable + return; - setupChangelog(ModrinthGetter.getLatestIDForVersion(SingletonInjector.INSTANCE.get(IVersionConstants.class).getMinecraftVersion())); + if (!ModrinthGetter.mcVersions.contains(SingletonInjector.INSTANCE.get(IVersionConstants.class).getMinecraftVersion())) + return; + + String versionID = ModrinthGetter.getLatestIDForVersion(SingletonInjector.INSTANCE.get(IVersionConstants.class).getMinecraftVersion()); + if (versionID == null) + return; + try + { + setupChangelog(versionID); + usable = true; + } + catch (Exception e) + { + e.printStackTrace(); + } } public ChangelogScreen(Screen parent, String versionID) @@ -62,8 +78,18 @@ public class ChangelogScreen extends DhScreen this.parent = parent; this.versionID = versionID; - if (versionID != null) + + if (versionID == null) + return; + try + { setupChangelog(versionID); + usable = true; + } + catch (Exception e) + { + e.printStackTrace(); + } } private void setupChangelog(String versionID) @@ -97,6 +123,8 @@ public class ChangelogScreen extends DhScreen protected void init() { super.init(); + if (!usable) + return; this.addBtn( // Close @@ -123,6 +151,8 @@ public class ChangelogScreen extends DhScreen #endif { this.renderBackground(matrices); // Render background + if (!usable) + return; // Set the scroll position to the mouse height relative to the screen // This is a bit of a hack as we cannot scroll on this area diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java index a39a6066c..6ba218c81 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinMinecraft.java @@ -23,15 +23,23 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) public class MixinMinecraft { + #if PRE_MC_1_20 @Redirect( method = "(Lnet/minecraft/client/main/GameConfig;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") ) public void onOpenScreen(Minecraft instance, Screen guiScreen) { - if (!Config.Client.Advanced.AutoUpdater.enableAutoUpdater.get()) + #else + @Redirect( + method = "Lnet/minecraft/client/Minecraft;setInitialScreen(Lcom/mojang/realmsclient/client/RealmsClient;Lnet/minecraft/server/packs/resources/ReloadInstance;Lnet/minecraft/client/main/GameConfig$QuickPlayData;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") + ) + public void onOpenScreen(Minecraft instance, Screen guiScreen) + { + #endif + if (!Config.Client.Advanced.AutoUpdater.enableAutoUpdater.get()) // Don't do anything if the user doesn't want it { - // Don't do anything if the user doesn't want it instance.setScreen(guiScreen); // Sets the screen back to the vanilla screen as if nothing ever happened return; } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java index debe53f16..6b508b87b 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinMinecraft.java @@ -23,15 +23,23 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) public class MixinMinecraft { + #if PRE_MC_1_20 @Redirect( method = "(Lnet/minecraft/client/main/GameConfig;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") ) public void onOpenScreen(Minecraft instance, Screen guiScreen) { - if (!Config.Client.Advanced.AutoUpdater.enableAutoUpdater.get()) + #else + @Redirect( + method = "Lnet/minecraft/client/Minecraft;setInitialScreen(Lcom/mojang/realmsclient/client/RealmsClient;Lnet/minecraft/server/packs/resources/ReloadInstance;Lnet/minecraft/client/main/GameConfig$QuickPlayData;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V") + ) + public void onOpenScreen(Minecraft instance, Screen guiScreen) + { + #endif + if (!Config.Client.Advanced.AutoUpdater.enableAutoUpdater.get()) // Don't do anything if the user doesn't want it { - // Don't do anything if the user doesn't want it instance.setScreen(guiScreen); // Sets the screen back to the vanilla screen as if nothing ever happened return; } @@ -49,10 +57,7 @@ public class MixinMinecraft } } - @Inject(at = @At("HEAD"), method = "close()V", remap = false) - public void close(CallbackInfo ci) - { - SelfUpdater.onClose(); - } + @Inject(at = @At("HEAD"), method = "close()V") + public void close(CallbackInfo ci) { SelfUpdater.onClose(); } }