From b004f210417a3f513a68ed5a12174444809aedf1 Mon Sep 17 00:00:00 2001 From: Su5eD Date: Tue, 12 Mar 2024 18:33:51 +0100 Subject: [PATCH] Extend crash report twice --- .../connector/mod/ConnectorBootstrap.java | 37 +------------ .../connector/mod/CrashReportUpgrade.java | 53 +++++++++++++++++++ .../mod/mixin/CrashReportExtenderMixin.java | 18 +++++++ src/mod/resources/connectormod.mixins.json | 5 +- 4 files changed, 75 insertions(+), 38 deletions(-) create mode 100644 src/mod/java/dev/su5ed/sinytra/connector/mod/CrashReportUpgrade.java create mode 100644 src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/CrashReportExtenderMixin.java diff --git a/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorBootstrap.java b/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorBootstrap.java index a91c3e72..787247c8 100644 --- a/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorBootstrap.java +++ b/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorBootstrap.java @@ -1,11 +1,7 @@ package dev.su5ed.sinytra.connector.mod; -import dev.su5ed.sinytra.connector.ConnectorUtil; import dev.su5ed.sinytra.connector.loader.ConnectorEarlyLoader; import net.minecraftforge.coremod.api.ASMAPI; -import net.minecraftforge.fml.CrashReportCallables; -import net.minecraftforge.forgespi.language.IModInfo; -import org.apache.commons.lang3.StringUtils; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.ClassNode; @@ -14,7 +10,6 @@ import org.spongepowered.asm.mixin.extensibility.IMixinInfo; import java.util.List; -import java.util.Locale; import java.util.Set; /** @@ -23,37 +18,7 @@ public class ConnectorBootstrap implements IMixinConfigPlugin { static { - registerCrashLogInfo(); - } - - private static void registerCrashLogInfo() { - CrashReportCallables.registerCrashCallable("Sinytra Connector", () -> { - String format = "| %-50.50s | %-30.30s | %-30.30s | %-20.20s |"; - String version = ConnectorBootstrap.class.getModule().getDescriptor().rawVersion().orElse(""); - StringBuilder builder = new StringBuilder(); - builder.append(version); - builder.append("\n\t\tSINYTRA CONNECTOR IS PRESENT!"); - builder.append("\n\t\tPlease verify issues are not caused by Connector before reporting them to mod authors. If you're unsure, file a report on Connector's issue tracker."); - builder.append("\n\t\tConnector's issue tracker can be found at ").append(ConnectorUtil.CONNECTOR_ISSUE_TRACKER_URL).append("."); - List mods = ConnectorEarlyLoader.getConnectorMods(); - if (!mods.isEmpty()) { - builder.append("\n\t\tInstalled Fabric mods:"); - builder.append("\n\t\t").append(String.format(Locale.ENGLISH, format, - StringUtils.repeat('=', 50), - StringUtils.repeat('=', 30), - StringUtils.repeat('=', 30), - StringUtils.repeat('=', 20) - )); - mods.stream() - .map(m -> String.format(Locale.ENGLISH, format, - m.getOwningFile().getFile().getFileName(), - m.getDisplayName(), - m.getModId(), - m.getVersion().toString())) - .forEach(s -> builder.append("\n\t\t").append(s)); - } - return builder.toString(); - }); + CrashReportUpgrade.registerCrashLogInfo(); } @Override diff --git a/src/mod/java/dev/su5ed/sinytra/connector/mod/CrashReportUpgrade.java b/src/mod/java/dev/su5ed/sinytra/connector/mod/CrashReportUpgrade.java new file mode 100644 index 00000000..63edffbf --- /dev/null +++ b/src/mod/java/dev/su5ed/sinytra/connector/mod/CrashReportUpgrade.java @@ -0,0 +1,53 @@ +package dev.su5ed.sinytra.connector.mod; + +import dev.su5ed.sinytra.connector.ConnectorUtil; +import dev.su5ed.sinytra.connector.loader.ConnectorEarlyLoader; +import net.minecraftforge.fml.CrashReportCallables; +import net.minecraftforge.forgespi.language.IModInfo; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; +import java.util.Locale; + +public final class CrashReportUpgrade { + + public static void registerCrashLogInfo() { + CrashReportCallables.registerCrashCallable("Sinytra Connector", () -> { + String format = "| %-50.50s | %-30.30s | %-30.30s | %-20.20s |"; + String version = ConnectorBootstrap.class.getModule().getDescriptor().rawVersion().orElse(""); + StringBuilder builder = new StringBuilder(); + builder.append(version); + builder.append("\n\t\tSINYTRA CONNECTOR IS PRESENT!"); + builder.append("\n\t\tPlease verify issues are not caused by Connector before reporting them to mod authors. If you're unsure, file a report on Connector's issue tracker."); + builder.append("\n\t\tConnector's issue tracker can be found at ").append(ConnectorUtil.CONNECTOR_ISSUE_TRACKER_URL).append("."); + List mods = ConnectorEarlyLoader.getConnectorMods(); + if (!mods.isEmpty()) { + builder.append("\n\t\tInstalled Fabric mods:"); + builder.append("\n\t\t").append(String.format(Locale.ENGLISH, format, + StringUtils.repeat('=', 50), + StringUtils.repeat('=', 30), + StringUtils.repeat('=', 30), + StringUtils.repeat('=', 20) + )); + mods.stream() + .map(m -> String.format(Locale.ENGLISH, format, + m.getOwningFile().getFile().getFileName(), + m.getDisplayName(), + m.getModId(), + m.getVersion().toString())) + .forEach(s -> builder.append("\n\t\t").append(s)); + } + return builder.toString(); + }); + } + + public static void addCrashReportHeader(StringBuilder builder) { + builder.append("\n// Hi. I'm Connector, and I'm a crashaholic"); + builder.append("\n").append(StringUtils.repeat('=', 25)); + builder.append("\nSINYTRA CONNECTOR IS PRESENT!"); + builder.append("\nPlease verify issues are not caused by Connector before reporting them to mod authors."); + builder.append("\nIf you're unsure, file a report on Connector's issue tracker found at ").append(ConnectorUtil.CONNECTOR_ISSUE_TRACKER_URL).append("."); + builder.append("\n").append(StringUtils.repeat('=', 25)); + builder.append("\n\n"); + } +} diff --git a/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/CrashReportExtenderMixin.java b/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/CrashReportExtenderMixin.java new file mode 100644 index 00000000..73358768 --- /dev/null +++ b/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/CrashReportExtenderMixin.java @@ -0,0 +1,18 @@ +package dev.su5ed.sinytra.connector.mod.mixin; + +import dev.su5ed.sinytra.connector.mod.CrashReportUpgrade; +import net.minecraft.CrashReport; +import net.minecraftforge.logging.CrashReportExtender; +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(CrashReportExtender.class) +public class CrashReportExtenderMixin { + + @Inject(method = "addCrashReportHeader", at = @At("HEAD"), remap = false) + private static void addConnectorCrashReportHeader(StringBuilder stringbuilder, CrashReport crashReport, CallbackInfo ci) { + CrashReportUpgrade.addCrashReportHeader(stringbuilder); + } +} diff --git a/src/mod/resources/connectormod.mixins.json b/src/mod/resources/connectormod.mixins.json index 93b9b990..141850ba 100644 --- a/src/mod/resources/connectormod.mixins.json +++ b/src/mod/resources/connectormod.mixins.json @@ -6,14 +6,15 @@ "compatibilityLevel": "JAVA_17", "plugin": "dev.su5ed.sinytra.connector.mod.ConnectorBootstrap", "mixins": [ + "CrashReportExtenderMixin", "ForgeHooksMixin", "IForgeItemMixin", "PlayerListMixin", "PoiTypesMixin", "TagLoaderMixin", + "item.ForgeHooksMixin", "item.ItemStackMixin", "item.LateItemStackMixin", - "item.ForgeHooksMixin", "lang.PathPackResourcesAnonMixin", "lang.PathPackResourcesMixin", "network.ConnectionTypeMixin", @@ -21,8 +22,8 @@ "network.NetworkFiltersMixin", "registries.BootstrapMixin", "registries.BuiltInRegistriesMixin", - "registries.MappedRegistryMixin", "registries.ForgeRegistryMixin", + "registries.MappedRegistryMixin", "registries.RegistryDataLoaderMixin" ], "client": [