Fixed crash ran on version not on Modrinth

This commit is contained in:
coolGi
2023-09-02 20:10:56 +09:30
parent fc43f866a1
commit 20be303dd0
4 changed files with 63 additions and 14 deletions
@@ -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")
));
@@ -44,16 +44,32 @@ public class ChangelogScreen extends DhScreen
private List<String> 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
@@ -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 = "<init>(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;
}
@@ -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 = "<init>(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(); }
}