diff options
-rw-r--r-- | build.gradle | 34 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/GenerateDictionaries.java | 176 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/util/data/FileUtils.java | 33 | ||||
-rw-r--r-- | src/Java/speiger/src/crops/api/ICropCardInfo.java | 12 |
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 |