diff --git a/build.gradle b/build.gradle index 4519069..166069a 100644 --- a/build.gradle +++ b/build.gradle @@ -4,13 +4,11 @@ buildscript { maven { url = 'https://maven.fabricmc.net/' } } dependencies { - classpath "com.github.jengelman.gradle.plugins:shadow:2.0.4" classpath "net.fabricmc:fabric-loom:0.2.0-SNAPSHOT" } } apply plugin: "java" -apply plugin: "com.github.johnrengelman.shadow" apply plugin: net.fabricmc.loom.LoomGradlePlugin sourceCompatibility = 1.8 @@ -26,21 +24,13 @@ dependencies { def travisBuildNumber = System.getenv("TRAVIS_BUILD_NUMBER") def versionSuffix = travisBuildNumber != null ? travisBuildNumber : "SNAPSHOT" -version "1.0-$versionSuffix" +version "1.0" group "org.dimdev.toomanycrashes" archivesBaseName = "TooManyCrashes" sourceCompatibility = 1.8 targetCompatibility = 1.8 -jar { - classifier "thin" -} - -shadowJar { - classifier "" -} - processResources { filesMatching("fabric.mod.json") { expand "version": project.version @@ -56,6 +46,5 @@ task sourcesJar(type: Jar, dependsOn: classes) { artifacts { archives jar - archives shadowJar archives sourcesJar } diff --git a/src/main/java/org/dimdev/toomanycrashes/ModConfig.java b/src/main/java/org/dimdev/toomanycrashes/ModConfig.java index cb98ced..9f303ec 100644 --- a/src/main/java/org/dimdev/toomanycrashes/ModConfig.java +++ b/src/main/java/org/dimdev/toomanycrashes/ModConfig.java @@ -1,14 +1,15 @@ package org.dimdev.toomanycrashes; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import net.fabricmc.loader.FabricLoader; import java.io.*; public class ModConfig { - public static final File CONFIG_FILE = new File(FabricLoader.INSTANCE.getConfigDirectory(), "toomanycrashes.json"); - public static final Gson GSON = new Gson(); - private static ModConfig instance = new ModConfig(); + private static final File CONFIG_FILE = new File(FabricLoader.INSTANCE.getConfigDirectory(), "toomanycrashes.json"); + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); + private static ModConfig instance = null; public String hasteURL = "https://paste.dimdev.org"; public boolean disableReturnToMainMenu = false; @@ -28,10 +29,10 @@ public static ModConfig instance() { instance = new ModConfig(); - try { - GSON.toJson(instance, new FileWriter(CONFIG_FILE)); + try (FileWriter writer = new FileWriter(CONFIG_FILE)) { + GSON.toJson(instance, writer); } catch (IOException e) { - e.printStackTrace(); + throw new RuntimeException(e); } return instance; diff --git a/src/main/java/org/dimdev/toomanycrashes/StacktraceDeobfuscator.java b/src/main/java/org/dimdev/toomanycrashes/StacktraceDeobfuscator.java index 3250cd9..227c71c 100644 --- a/src/main/java/org/dimdev/toomanycrashes/StacktraceDeobfuscator.java +++ b/src/main/java/org/dimdev/toomanycrashes/StacktraceDeobfuscator.java @@ -1,51 +1,27 @@ package org.dimdev.toomanycrashes; -import java.io.File; +import net.fabricmc.tinyremapper.TinyUtils; + +import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; +import java.io.InputStreamReader; import java.util.*; public final class StacktraceDeobfuscator { - private static final String MAPPINGS_URL = "https://gist.githubusercontent.com/Runemoro/cc6ad843f5403b870214ae34baaa4b60/raw/c7be9a0d5be49eaa365f915fd6326c1ddd419bbd/yarn-mappings.csv"; - private static final boolean DEBUG_IN_DEV = false; // Makes this deobf -> obf for testing in dev. Don't forget to set to false when done! - private static HashMap mappings = null; - - /** - * If the file does not exits, downloads latest method mappings and saves them to it. - * Initializes a HashMap between obfuscated and deobfuscated names from that file. - */ - public static void init(File mappingsFile) { - if (mappings != null) return; - - // Download the file if necessary - if (!mappingsFile.exists()) { - try { - try (InputStream is = new URL(MAPPINGS_URL).openStream()) { - Files.copy(is, mappingsFile.toPath(), StandardCopyOption.REPLACE_EXISTING); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - // Read the mapping - HashMap mappings = new HashMap<>(); - try (Scanner scanner = new Scanner(mappingsFile)) { - scanner.nextLine(); // Skip CSV header - while (scanner.hasNext()) { - String[] mappingLine = scanner.nextLine().split(","); - String obfName = mappingLine[0]; - String deobfName = mappingLine[1]; + public static final String MAPPINGS = "mappings/mappings.tiny"; + private static Map mappings = null; - if (!DEBUG_IN_DEV) { - mappings.put(obfName, deobfName); - } else { - mappings.put(deobfName, obfName); - } - } + public static void init() { + Map mappings = new HashMap<>(); + try (BufferedReader mappingReader = new BufferedReader(new InputStreamReader(StacktraceDeobfuscator.class.getClassLoader().getResourceAsStream(MAPPINGS)))) { + TinyUtils.read( + mappingReader, + "intermediary", + "named", + (key, value) -> mappings.put(key.replace('/', '.'), value.replace('/', '.')), + (intermediary, named) -> mappings.put(intermediary.name, named.name), + (intermediary, named) -> mappings.put(intermediary.name, named.name) + ); } catch (IOException e) { throw new RuntimeException(e); } @@ -71,18 +47,35 @@ public static StackTraceElement[] deobfuscateStacktrace(StackTraceElement[] stac int index = 0; for (StackTraceElement el : stackTrace) { + String remappedClass = mappings.get(el.getClassName()); + String remappedMethod = mappings.get(el.getMethodName()); stackTrace[index++] = new StackTraceElement( - mappings.getOrDefault(el.getClassName(), el.getClassName()), - mappings.getOrDefault(el.getMethodName(), el.getMethodName()), - el.getFileName(), + remappedClass != null ? remappedClass : el.getClassName(), + remappedMethod != null ? remappedMethod : el.getMethodName(), + remappedClass != null ? getFileName(remappedClass) : el.getFileName(), el.getLineNumber() ); } return stackTrace; } + public static String getFileName(String className) { + String remappedFile = className; + int lastDot = className.lastIndexOf('.'); + if (lastDot != -1) { + remappedFile = remappedFile.substring(lastDot + 1); + } + + int firstDollar = className.indexOf('$'); + if (firstDollar != -1) { + remappedFile = remappedFile.substring(0, firstDollar); + } + + return remappedFile; + } + public static void main(String[] args) { - init(new File("mappings.csv")); + init(); for (Map.Entry entry : mappings.entrySet()) { System.out.println(entry.getKey() + " <=> " + entry.getValue()); } diff --git a/src/main/java/org/dimdev/toomanycrashes/TooManyCrashes.java b/src/main/java/org/dimdev/toomanycrashes/TooManyCrashes.java index 3a49057..0d1f427 100644 --- a/src/main/java/org/dimdev/toomanycrashes/TooManyCrashes.java +++ b/src/main/java/org/dimdev/toomanycrashes/TooManyCrashes.java @@ -1,11 +1,9 @@ package org.dimdev.toomanycrashes; -import net.fabricmc.loader.FabricLoader; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.dimdev.utils.SSLUtils; -import java.io.File; import java.io.IOException; import java.io.InputStream; import java.security.KeyStore; @@ -15,7 +13,6 @@ public class TooManyCrashes { private static final Logger LOGGER = LogManager.getLogger("TooManyCrashes"); - private static final long MAPPINGS_CACHE_DURATION = 2 * 24 * 60 * 60 * 1000; public static void init() { ModConfig.instance(); @@ -35,20 +32,11 @@ private static void trustIdenTrust() { } private static void initStacktraceDeobfuscator() { - File modDir = new File(FabricLoader.INSTANCE.getConfigDirectory(), "toomanycrashes"); - modDir.mkdirs(); - LOGGER.info("Initializing StacktraceDeobfuscator"); try { - File mappings = new File(modDir, "mappings-" + System.currentTimeMillis() / MAPPINGS_CACHE_DURATION + ".csv"); - if (mappings.exists()) { - LOGGER.info("Found mappings: " + mappings.getName()); - } else { - LOGGER.info("Downloading latest mappings to: " + mappings.getName()); - } - StacktraceDeobfuscator.init(mappings); + StacktraceDeobfuscator.init(); } catch (Exception e) { - LOGGER.error("Failed to get mappings!", e); + LOGGER.error("Failed to load mappings!", e); } LOGGER.info("Done initializing StacktraceDeobfuscator"); diff --git a/src/main/resources/mixins.toomanycrashes.json b/src/main/resources/mixins.toomanycrashes.json index 97a15e8..9cd1575 100644 --- a/src/main/resources/mixins.toomanycrashes.json +++ b/src/main/resources/mixins.toomanycrashes.json @@ -1,7 +1,7 @@ { "package": "org.dimdev.toomanycrashes.mixins", "required": true, - "refmap": "mixins.toomanycrashes.refmap.json", + "refmap": "TooManyCrashes-refmap.json", "target": "@env(DEFAULT)", "minVersion": "0.6", "compatibilityLevel": "JAVA_8",