diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 1789435f7..1c329ee2c 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -68,17 +68,18 @@ public class ProguardTask extends BaritoneGradleTask { private List requiredLibraries; private File mixin; + private File pathfinder; @TaskAction protected void exec() throws Exception { super.verifyArtifacts(); // "Haha brady why don't you make separate tasks" - processArtifact(); downloadProguard(); extractProguard(); generateConfigs(); acquireDependencies(); + processArtifact(); proguardApi(); proguardStandalone(); cleanup(); @@ -89,7 +90,7 @@ public class ProguardTask extends BaritoneGradleTask { Files.delete(this.artifactUnoptimizedPath); } - Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), Optional.empty()); + Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), Arrays.asList(pathfinder), false); } private void downloadProguard() throws Exception { @@ -114,8 +115,7 @@ public class ProguardTask extends BaritoneGradleTask { try { path = findJavaPathByGradleConfig(); if (path != null) return path; - } - catch (Exception ex) { + } catch (Exception ex) { System.err.println("Unable to find java by javaCompile options"); ex.printStackTrace(); } @@ -123,8 +123,7 @@ public class ProguardTask extends BaritoneGradleTask { try { path = findJavaByJavaHome(); if (path != null) return path; - } - catch(Exception ex) { + } catch (Exception ex) { System.err.println("Unable to find java by JAVA_HOME"); ex.printStackTrace(); } @@ -132,7 +131,7 @@ public class ProguardTask extends BaritoneGradleTask { path = findJavaByGradleCurrentRuntime(); if (path != null) return path; - + throw new Exception("Unable to find java to determine ProGuard libraryjars. Please specify forkOptions.executable in javaCompile," + " JAVA_HOME environment variable, or make sure to run Gradle with the correct JDK (a v1.8 only)"); } @@ -281,6 +280,9 @@ public class ProguardTask extends BaritoneGradleTask { if (lib.contains("mixin")) { mixin = file; } + if (lib.contains("nether-pathfinder")) { + pathfinder = file; + } Files.copy(file.toPath(), getTemporaryFile("tempLibraries/" + lib + ".jar"), REPLACE_EXISTING); } } @@ -288,6 +290,9 @@ public class ProguardTask extends BaritoneGradleTask { if (mixin == null) { throw new IllegalStateException("Unable to find mixin jar"); } + if (pathfinder == null) { + throw new IllegalStateException("Unable to find pathfinder jar"); + } } // a bunch of epic stuff to get the path to the cached jar @@ -375,14 +380,14 @@ public class ProguardTask extends BaritoneGradleTask { private void proguardApi() throws Exception { runProguard(getTemporaryFile(PROGUARD_API_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), Optional.empty()); - Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeApiPath.toString(), Optional.of(mixin)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), Arrays.asList(pathfinder), false); + Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeApiPath.toString(), Arrays.asList(pathfinder, mixin), true); } private void proguardStandalone() throws Exception { runProguard(getTemporaryFile(PROGUARD_STANDALONE_CONFIG)); - Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), Optional.empty()); - Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeStandalonePath.toString(), Optional.of(mixin)); + Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), Arrays.asList(pathfinder), false); + Determinizer.determinize(this.proguardOut.toString(), this.artifactForgeStandalonePath.toString(), Arrays.asList(pathfinder, mixin), true); } private void cleanup() { @@ -409,7 +414,7 @@ public class ProguardTask extends BaritoneGradleTask { Path workingDirectory = getTemporaryFile(""); Path proguardJar = workingDirectory.relativize(getTemporaryFile(PROGUARD_JAR)); config = workingDirectory.relativize(config); - + // Honestly, if you still have spaces in your path at this point, you're SOL. Process p = new ProcessBuilder("java", "-jar", proguardJar.toString(), "@" + config.toString()) @@ -423,6 +428,7 @@ public class ProguardTask extends BaritoneGradleTask { // Halt the current thread until the process is complete, if the exit code isn't 0, throw an exception int exitCode = p.waitFor(); if (exitCode != 0) { + Thread.sleep(1000); throw new IllegalStateException("Proguard exited with code " + exitCode); } } diff --git a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java index d9f475a5c..40d17ef03 100644 --- a/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java +++ b/buildSrc/src/main/java/baritone/gradle/util/Determinizer.java @@ -22,7 +22,10 @@ import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import java.io.*; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; @@ -36,10 +39,11 @@ import java.util.stream.Collectors; */ public class Determinizer { - public static void determinize(String inputPath, String outputPath, Optional toInclude) throws IOException { + public static void determinize(String inputPath, String outputPath, List toInclude, boolean doForgeReplacementOfMetaInf) throws IOException { System.out.println("Running Determinizer"); System.out.println(" Input path: " + inputPath); System.out.println(" Output path: " + outputPath); + System.out.println(" Shade: " + toInclude); try ( JarFile jarFile = new JarFile(new File(inputPath)); @@ -63,7 +67,7 @@ public class Determinizer { if (entry.getName().endsWith(".refmap.json")) { JsonObject object = new JsonParser().parse(new InputStreamReader(jarFile.getInputStream(entry))).getAsJsonObject(); jos.write(writeSorted(object).getBytes()); - } else if (entry.getName().equals("META-INF/MANIFEST.MF") && toInclude.isPresent()) { // only replace for forge jar + } else if (entry.getName().equals("META-INF/MANIFEST.MF") && doForgeReplacementOfMetaInf) { // only replace for forge jar ByteArrayOutputStream cancer = new ByteArrayOutputStream(); copy(jarFile.getInputStream(entry), cancer); String manifest = new String(cancer.toByteArray()); @@ -76,8 +80,8 @@ public class Determinizer { copy(jarFile.getInputStream(entry), jos); } } - if (toInclude.isPresent()) { - try (JarFile mixin = new JarFile(toInclude.get())) { + for (File file : toInclude) { + try (JarFile mixin = new JarFile(file)) { for (JarEntry entry : mixin.stream().sorted(Comparator.comparing(JarEntry::getName)).collect(Collectors.toList())) { if (entry.getName().startsWith("META-INF") && !entry.getName().startsWith("META-INF/services")) { continue; @@ -89,6 +93,7 @@ public class Determinizer { } jos.finish(); } + System.out.println("Done with determinizer"); } private static void copy(InputStream is, OutputStream os) throws IOException { diff --git a/scripts/proguard.pro b/scripts/proguard.pro index cc3130081..858494778 100644 --- a/scripts/proguard.pro +++ b/scripts/proguard.pro @@ -94,7 +94,7 @@ -libraryjars 'tempLibraries/mixin-0.7.11-SNAPSHOT.jar' -libraryjars 'tempLibraries/launchwrapper-1.11.jar' # TODO why does only 1.11.jar exist? - +-libraryjars 'tempLibraries/nether-pathfinder-.jar' # Keep - Applications. Keep all application classes, along with their 'main' diff --git a/src/main/java/baritone/Elytra.java b/src/main/java/baritone/Elytra.java index f2d28b0f2..caa819fb4 100644 --- a/src/main/java/baritone/Elytra.java +++ b/src/main/java/baritone/Elytra.java @@ -45,6 +45,8 @@ public class Elytra extends Behavior implements Helper { public List path = new ArrayList<>(); public void path(BlockPos destination) { + playerNear = 0; + goingTo = 0; path = Arrays.stream(NetherPathfinder.pathFind(146008555100680L, false, false, ctx.playerFeet().x, ctx.playerFeet().y, ctx.playerFeet().z, destination.getX(), destination.getY(), destination.getZ())).mapToObj(BlockPos::fromLong).map(BetterBlockPos::new).collect(Collectors.toList()); removeBacktracks(); }