Skip to content

Commit

Permalink
NEC error screen
Browse files Browse the repository at this point in the history
  • Loading branch information
IMS212 committed Nov 19, 2022
1 parent 1342482 commit 29b2729
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 2 deletions.
9 changes: 8 additions & 1 deletion src/main/java/net/coderbot/iris/Iris.java
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public class Iris {
private static ShaderPack currentPack;
private static String currentPackName;
private static boolean sodiumInvalid;
private static boolean hasNEC;
private static boolean sodiumInstalled;
private static boolean initialized;

Expand All @@ -91,7 +92,7 @@ public class Iris {
private static UpdateChecker updateChecker;
private static boolean fallback;

/**
/**
* Called very early on in Minecraft initialization. At this point we *cannot* safely access OpenGL, but we can do
* some very basic setup, config loading, and environment checks.
*
Expand All @@ -114,6 +115,8 @@ public void onEarlyInitialize() {
}
);

hasNEC = FabricLoader.getInstance().isModLoaded("notenoughcrashes");

ModContainer iris = FabricLoader.getInstance().getModContainer(MODID)
.orElseThrow(() -> new IllegalStateException("Couldn't find the mod container for Iris"));

Expand Down Expand Up @@ -720,6 +723,10 @@ public static boolean isSodiumInstalled() {
return sodiumInstalled;
}

public static boolean hasNotEnoughCrashes() {
return hasNEC;
}

public static Path getShaderpacksDirectory() {
if (shaderpacksDirectory == null) {
shaderpacksDirectory = FabricLoader.getInstance().getGameDir().resolve("shaderpacks");
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/net/coderbot/iris/mixin/MixinCrashReport.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,13 @@ private void fillSystemDetails(CallbackInfo info) {
});
return sb.toString();
});

getSystemDetails().setDetail("NEC status", () -> {
if (Iris.hasNotEnoughCrashes()) {
return "Has NEC: INVALID";
} else {
return "No NEC detected";
}
});
}
}
27 changes: 26 additions & 1 deletion src/main/java/net/coderbot/iris/mixin/MixinTitleScreen.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
package net.coderbot.iris.mixin;

import com.google.common.collect.ImmutableList;
import net.coderbot.iris.Iris;
import net.coderbot.iris.compat.sodium.SodiumVersionCheck;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.ChatFormatting;
import net.minecraft.Util;
import net.minecraft.client.GraphicsStatus;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.AlertScreen;
import net.minecraft.client.gui.screens.ConfirmScreen;
import net.minecraft.client.gui.screens.PopupScreen;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.TitleScreen;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -18,9 +25,13 @@
import java.net.URISyntaxException;

@Mixin(TitleScreen.class)
public class MixinTitleScreen {
public class MixinTitleScreen extends Screen {
private static boolean iris$hasFirstInit;

protected MixinTitleScreen(Component arg) {
super(arg);
}

@Inject(method = "init", at = @At("RETURN"))
public void iris$showSodiumIncompatScreen(CallbackInfo ci) {
if (iris$hasFirstInit) {
Expand All @@ -35,6 +46,20 @@ public class MixinTitleScreen {
reason = "iris.sodium.failure.reason.notFound";
} else if (Iris.isSodiumInvalid()) {
reason = "iris.sodium.failure.reason.incompatible";
} else if (true) {
Minecraft.getInstance().setScreen(new ConfirmScreen(
bool -> {
if (bool) {
Minecraft.getInstance().setScreen(this);
} else {
Minecraft.getInstance().stop();
}
},
new TranslatableComponent("iris.nec.failure.title", Iris.MODNAME).withStyle(ChatFormatting.BOLD, ChatFormatting.RED),
new TranslatableComponent("iris.nec.failure.description"),
new TranslatableComponent("options.graphics.warning.accept").withStyle(ChatFormatting.RED),
new TranslatableComponent("menu.quit").withStyle(ChatFormatting.BOLD)));
return;
} else {
Iris.onLoadingComplete();

Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/assets/iris/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
"iris.sodium.failure.download": "Download Sodium",
"iris.sodium.failure.reason.notFound": "Iris requires Sodium for good performance, but Sodium is not installed. Please download Sodium, place it in your mods folder, and re-launch the game.",
"iris.sodium.failure.reason.incompatible": "Iris requires Sodium for good performance, but an incompatible version was found. Please download the correct version of Sodium, place it in your mods folder, remove the incorrect version, and re-launch the game.",
"iris.nec.failure.title": "[%s] Not Enough Crashes detected!",
"iris.nec.failure.description": "Not Enough Crashes can severely break the game while handling crashes, and does not provide accurate results.\nGood alternatives are MixinTrace and Crafty Crashes, which can identify the cause of a crash more reliably and does not put the game in an invalid state.",
"iris.unsupported.irisorpc": "Iris or your PC",
"iris.unsupported.iris": "Iris",
"iris.unsupported.pc": "your PC",
Expand Down

0 comments on commit 29b2729

Please sign in to comment.