aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle34
-rw-r--r--src/Java/gtPlusPlus/GenerateDictionaries.java176
-rw-r--r--src/Java/gtPlusPlus/core/util/data/FileUtils.java33
-rw-r--r--src/Java/speiger/src/crops/api/ICropCardInfo.java12
4 files changed, 220 insertions, 35 deletions
diff --git a/build.gradle b/build.gradle
index f25a954dd4..ab5fec70de 100644
--- a/build.gradle
+++ b/build.gradle
@@ -20,6 +20,7 @@ buildscript {
}
dependencies {
classpath "net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT"
+ classpath 'net.sf.proguard:proguard-gradle:6.2.2'
//classpath "gradle.plugin.se.bjurr.gitchangelog:git-changelog-gradle-plugin:1.55"
}
}
@@ -171,22 +172,18 @@ jar {
}
}
-task sourceJar(type: Jar) {
- from sourceSets.main.allSource
- classifier = 'sources'
- manifest {
- attributes 'FMLCorePlugin': 'gtPlusPlus.preloader.asm.Preloader_FMLLoadingPlugin'
- attributes 'FMLCorePluginContainsFMLMod': 'true'
- }
+task generateDictionaries(type: JavaExec) {
+ group = "Execution"
+ description = "Generates the dictionaries for Proguard"
+ classpath = sourceSets.main.runtimeClasspath
+ main = "gtPlusPlus.GenerateDictionaries"
}
-task devJar(type: Jar) {
- from sourceSets.main.output
- classifier = 'dev'
- manifest {
- attributes 'FMLCorePlugin': 'gtPlusPlus.preloader.asm.Preloader_FMLLoadingPlugin'
- attributes 'FMLCorePluginContainsFMLMod': 'true'
- }
+// Define a ProGuard task.
+task proguard(type: proguard.gradle.ProGuardTask) {
+ configuration 'proguard.txt'
+ injars "build/libs/"+archivesBaseName + "-" + version + ".jar"
+ outjars "build/libs/"+archivesBaseName + "-" + version + "-obf.jar"
}
//task discordChangelogTask(type: se.bjurr.gitchangelog.plugin.gradle.GitChangelogTask) {
@@ -211,10 +208,11 @@ task devJar(type: Jar) {
//templateContent = file('changelogcurse.mustache').getText('UTF-8')
//}
-artifacts {
- archives devJar
- archives sourceJar
-}
+// Generate Dicts for Proguard obfuscation
+build.finalizedBy(generateDictionaries)
+
+// Obfuscate this bitch.
+//build.finalizedBy(proguard) // Disabled until optimization is working 100%
//build.finalizedBy(gitChangelogTask)
//build.finalizedBy(curseChangelogTask)
diff --git a/src/Java/gtPlusPlus/GenerateDictionaries.java b/src/Java/gtPlusPlus/GenerateDictionaries.java
new file mode 100644
index 0000000000..abdf4f4027
--- /dev/null
+++ b/src/Java/gtPlusPlus/GenerateDictionaries.java
@@ -0,0 +1,176 @@
+package gtPlusPlus;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+
+import gtPlusPlus.api.objects.random.XSTR;
+
+public class GenerateDictionaries {
+
+ public static void main(String[] args) {
+
+ File aMainDictionary = new File("proguard/DictionaryMain.txt");
+ File aMethodDict = new File("proguard/method-dict.txt");
+ File aClassDict = new File("proguard/class-dict.txt");
+
+ if (Utils.doesFileExist(aMainDictionary)) {
+ Utils.log("Found Main Dictionary");
+ List<String> aLines = Utils.readLines(aMainDictionary);
+
+ ArrayList<String> aLinesToWriteMethods = new ArrayList<String>();
+ ArrayList<String> aLinesToWriteClasses = new ArrayList<String>();
+
+ if (aLines != null && aLines.size() > 0) {
+ Utils.log("Main Dictionary has > 0 keywords ("+aLines.size()+")");
+ HashSet<Integer> aUsedIndicies = new HashSet<Integer>();
+ int aCount = aLines.size() / 5;
+
+ Utils.log("Mapping "+aCount+" to each dict.");
+ // Map New Method Names
+ for (int i=0;aLinesToWriteMethods.size()<aCount;i++) {
+ Integer aIndex = Utils.randInt(0, aLines.size()-1);
+ if (!aUsedIndicies.contains(aIndex)) {
+ String aLineAtIndex = aLines.get(aIndex);
+ if (aLineAtIndex != null && aLineAtIndex.length() > 0) {
+ aLinesToWriteMethods.add(aLineAtIndex);
+ aUsedIndicies.add(aIndex);
+ }
+ }
+ if (i >= aCount * 5) {
+ break;
+ }
+ }
+
+ // Map New Class Names
+ for (int i=0;aLinesToWriteClasses.size()<aCount;i++) {
+ Integer aIndex = Utils.randInt(0, aLines.size()-1);
+ if (!aUsedIndicies.contains(aIndex)) {
+ String aLineAtIndex = aLines.get(aIndex);
+ if (aLineAtIndex != null && aLineAtIndex.length() > 0) {
+ aLinesToWriteClasses.add(aLineAtIndex);
+ aUsedIndicies.add(aIndex);
+ }
+ }
+ if (i >= aCount * 5) {
+ break;
+ }
+ }
+ }
+
+ // Remove old generated Dicts
+ if (Utils.doesFileExist(aMethodDict)) {
+ aMethodDict.delete();
+ Utils.log("Removed old Method-Dict");
+ }
+ if (Utils.doesFileExist(aClassDict)) {
+ aClassDict.delete();
+ Utils.log("Removed old Class-Dict");
+ }
+
+ // Create new empty dict files
+ if (!Utils.doesFileExist(aMethodDict)) {
+ Utils.createFile(aMethodDict);
+ }
+ if (!Utils.doesFileExist(aClassDict)) {
+ Utils.createFile(aClassDict);
+ }
+
+ Utils.log("Writing new Dictionaries.");
+ // Write
+ Utils.appendListToFile(aMethodDict, aLinesToWriteMethods);
+ Utils.appendListToFile(aClassDict, aLinesToWriteClasses);
+
+ Utils.log("Finished all generation of new Dictionaries.");
+
+ }
+
+ }
+
+
+
+ private static final class Utils {
+
+ private static final Charset utf8 = StandardCharsets.UTF_8;
+ private static final Random rand = new XSTR();
+
+ private static final void log(String s) {
+ System.out.println("[GTPP-Proguard] "+s);
+ }
+
+ public static int randInt(final int min, final int max) {
+ return rand.nextInt((max - min) + 1) + min;
+ }
+
+ public static boolean doesFileExist(File f) {
+ if (f != null && f.exists() && !f.isDirectory()) {
+ return true;
+ }
+ return false;
+ }
+
+ public static File createFile(File aFile) {
+ boolean blnCreated = false;
+ log("Trying to use relative path "+aFile.getPath());
+ try {
+ //log("Trying to use path "+aFile.getCanonicalPath());
+ //log("Trying to use absolute path "+aFile.getAbsolutePath());
+ blnCreated = aFile.createNewFile();
+ } catch (IOException ioe) {
+ log("Error while creating a new empty file :" + ioe);
+ return null;
+ }
+ return blnCreated ? aFile : null;
+ }
+
+ public static boolean appendListToFile(File file, List<String> content) {
+ try {
+ long oldSize;
+ long newSize;
+ if (doesFileExist(file)) {
+ Path p = Paths.get(file.getPath());
+ if (p != null && Files.isWritable(p)) {
+ oldSize = Files.size(p);
+ try {
+ Files.write(p, content, utf8, StandardOpenOption.APPEND);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ newSize = Files.size(p);
+ return newSize > oldSize;
+ }
+ }
+ } catch (IOException e) {
+ }
+ return false;
+ }
+
+ /**
+ * Reads the contents of a file line by line to a List of Strings using the default encoding for the VM.
+ * The file is always closed.
+ *
+ * @param file the file to read, must not be {@code null}
+ * @return the list of Strings representing each line in the file, never {@code null}
+ * @throws IOException in case of an I/O error
+ * @since 1.3
+ */
+ public static List<String> readLines(File file) {
+ try {
+ return org.apache.commons.io.FileUtils.readLines(file, utf8);
+ }
+ catch (IOException e) {
+ return new ArrayList<String>();
+ }
+ }
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/util/data/FileUtils.java b/src/Java/gtPlusPlus/core/util/data/FileUtils.java
index d7d6b9e36e..bec5e0eeff 100644
--- a/src/Java/gtPlusPlus/core/util/data/FileUtils.java
+++ b/src/Java/gtPlusPlus/core/util/data/FileUtils.java
@@ -8,6 +8,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
+import java.util.ArrayList;
import java.util.List;
import gtPlusPlus.api.objects.Logger;
@@ -26,17 +27,21 @@ public class FileUtils {
public static File createFile(String path, String filename, String extension) {
File file = new File(Utils.getMcDir(), path + filename + extension);
+ return createFile(file);
+ }
+
+ public static File createFile(File aFile) {
boolean blnCreated = false;
- Logger.INFO("Trying to use path "+file.getPath());
+ Logger.INFO("Trying to use path "+aFile.getPath());
try {
- Logger.INFO("Trying to use path "+file.getCanonicalPath());
- Logger.INFO("Trying to use absolute path "+file.getAbsolutePath());
- blnCreated = file.createNewFile();
+ Logger.INFO("Trying to use path "+aFile.getCanonicalPath());
+ Logger.INFO("Trying to use absolute path "+aFile.getAbsolutePath());
+ blnCreated = aFile.createNewFile();
} catch (IOException ioe) {
Logger.INFO("Error while creating a new empty file :" + ioe);
return null;
}
- return blnCreated ? file : null;
+ return blnCreated ? aFile : null;
}
public static File getFile(String filename, String extension) {
@@ -92,4 +97,22 @@ public class FileUtils {
}
return false;
}
+
+ /**
+ * Reads the contents of a file line by line to a List of Strings using the default encoding for the VM.
+ * The file is always closed.
+ *
+ * @param file the file to read, must not be {@code null}
+ * @return the list of Strings representing each line in the file, never {@code null}
+ * @throws IOException in case of an I/O error
+ * @since 1.3
+ */
+ public static List<String> readLines(File file) {
+ try {
+ return org.apache.commons.io.FileUtils.readLines(file, utf8);
+ }
+ catch (IOException e) {
+ return new ArrayList<String>();
+ }
+ }
}
diff --git a/src/Java/speiger/src/crops/api/ICropCardInfo.java b/src/Java/speiger/src/crops/api/ICropCardInfo.java
deleted file mode 100644
index ff67eb06b1..0000000000
--- a/src/Java/speiger/src/crops/api/ICropCardInfo.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package speiger.src.crops.api;
-
-import java.util.List;
-import net.minecraft.item.ItemStack;
-
-public interface ICropCardInfo {
-
- List<String> getCropInformation();
-
- ItemStack getDisplayItem();
-
-} \ No newline at end of file