diff --git a/build.gradle b/build.gradle index d73a8a7..5216038 100644 --- a/build.gradle +++ b/build.gradle @@ -1,62 +1,68 @@ -buildscript { - repositories { +buildscript{ + repositories{ mavenCentral() - maven { + maven{ name = "forge" url = "http://files.minecraftforge.net/maven" } - maven { + maven{ name = "sonatype" url = "https://oss.sonatype.org/content/repositories/snapshots/" } } - dependencies { + dependencies{ classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' } } apply plugin: 'forge' -version = "" -group = "chylex.java7check" -archivesBaseName = "Java7Checker MC-1.8+ v1.1" +String archiveSuffix = " MC-UNIVERSAL v1.2.jar" -minecraft { - version = "1.8-11.14.1.1306" - assetDir = "eclipse/assets" - mappings = "snapshot_nodoc_20141130" +minecraft{ + version = "1.7.10-10.13.4.1492-1.7.10" + runDir = "eclipse" } -jar { - manifest { - attributes 'FMLCorePlugin': 'chylex.javacheck.Java7CheckerCoremod' - } -} - -task java8Jar(type: Jar, dependsOn: "jar") { +task java7Jar(type: Jar, dependsOn: "jar"){ from sourceSets.main.output - manifest { - attributes 'FMLCorePlugin': 'chylex.javacheck.Java8CheckerCoremod' + manifest{ + attributes 'TweakClass': 'chylex.javacheck.Java7Checker' } - baseName = "Java8Checker MC-1.8+ v1.1" + archiveName = "Java7Checker"+archiveSuffix } -reobf { - reobf java8Jar { classpath -> classpath = configurations.compile } +task java8Jar(type: Jar, dependsOn: "jar"){ + from sourceSets.main.output + + manifest{ + attributes 'TweakClass': 'chylex.javacheck.Java8Checker' + } + + archiveName = "Java8Checker"+archiveSuffix } -processResources { +jar.enabled = false + +reobf{ + reobf java7Jar{ classpath -> classpath = configurations.compile } + reobf java8Jar{ classpath -> classpath = configurations.compile } +} + +reobf.enabled = false + +processResources{ inputs.property "version", project.version inputs.property "mcversion", project.minecraft.version - from(sourceSets.main.resources.srcDirs) { + from(sourceSets.main.resources.srcDirs){ include 'mcmod.info' expand 'version':project.version, 'mcversion':project.minecraft.version } - from(sourceSets.main.resources.srcDirs) { + from(sourceSets.main.resources.srcDirs){ exclude 'mcmod.info' } } \ No newline at end of file diff --git a/src/main/java/chylex/javacheck/Java7Checker.java b/src/main/java/chylex/javacheck/Java7Checker.java new file mode 100644 index 0000000..d30ad30 --- /dev/null +++ b/src/main/java/chylex/javacheck/Java7Checker.java @@ -0,0 +1,27 @@ +package chylex.javacheck; +import java.io.File; +import java.util.List; +import net.minecraft.launchwrapper.ITweaker; +import net.minecraft.launchwrapper.LaunchClassLoader; +import org.apache.commons.lang3.JavaVersion; +import chylex.javacheck.report.JavaCheckerReporter; + +public class Java7Checker implements ITweaker{ + @Override + public void injectIntoClassLoader(LaunchClassLoader classLoader){ + JavaCheckerReporter.run(JavaVersion.JAVA_1_7); + } + + @Override + public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile){} + + @Override + public String getLaunchTarget(){ + return null; + } + + @Override + public String[] getLaunchArguments(){ + return new String[0]; + } +} diff --git a/src/main/java/chylex/javacheck/Java7CheckerCoremod.java b/src/main/java/chylex/javacheck/Java7CheckerCoremod.java deleted file mode 100644 index bb3f00f..0000000 --- a/src/main/java/chylex/javacheck/Java7CheckerCoremod.java +++ /dev/null @@ -1,18 +0,0 @@ -package chylex.javacheck; -import java.util.Map; -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; -import org.apache.commons.lang3.JavaVersion; -import chylex.javacheck.report.JavaCheckerReporter; - -public class Java7CheckerCoremod implements IFMLLoadingPlugin{ - @Override - public String getSetupClass(){ - JavaCheckerReporter.minVersion = JavaVersion.JAVA_1_7; - return "chylex.javacheck.report.JavaCheckerReporter"; - } - - @Override public String[] getASMTransformerClass(){ return null; } - @Override public String getAccessTransformerClass(){ return null; } - @Override public String getModContainerClass(){ return null; } - @Override public void injectData(Map<String,Object> data){} -} diff --git a/src/main/java/chylex/javacheck/Java8Checker.java b/src/main/java/chylex/javacheck/Java8Checker.java new file mode 100644 index 0000000..7b14c3a --- /dev/null +++ b/src/main/java/chylex/javacheck/Java8Checker.java @@ -0,0 +1,27 @@ +package chylex.javacheck; +import java.io.File; +import java.util.List; +import net.minecraft.launchwrapper.ITweaker; +import net.minecraft.launchwrapper.LaunchClassLoader; +import org.apache.commons.lang3.JavaVersion; +import chylex.javacheck.report.JavaCheckerReporter; + +public class Java8Checker implements ITweaker{ + @Override + public void injectIntoClassLoader(LaunchClassLoader classLoader){ + JavaCheckerReporter.run(JavaVersion.JAVA_1_8); + } + + @Override + public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile){} + + @Override + public String getLaunchTarget(){ + return null; + } + + @Override + public String[] getLaunchArguments(){ + return new String[0]; + } +} diff --git a/src/main/java/chylex/javacheck/Java8CheckerCoremod.java b/src/main/java/chylex/javacheck/Java8CheckerCoremod.java deleted file mode 100644 index 5f3b9b3..0000000 --- a/src/main/java/chylex/javacheck/Java8CheckerCoremod.java +++ /dev/null @@ -1,18 +0,0 @@ -package chylex.javacheck; -import java.util.Map; -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; -import org.apache.commons.lang3.JavaVersion; -import chylex.javacheck.report.JavaCheckerReporter; - -public class Java8CheckerCoremod implements IFMLLoadingPlugin{ - @Override - public String getSetupClass(){ - JavaCheckerReporter.minVersion = JavaVersion.JAVA_1_8; - return "chylex.javacheck.report.JavaCheckerReporter"; - } - - @Override public String[] getASMTransformerClass(){ return null; } - @Override public String getAccessTransformerClass(){ return null; } - @Override public String getModContainerClass(){ return null; } - @Override public void injectData(Map<String,Object> data){} -} diff --git a/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java b/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java index 0a91de4..de26230 100644 --- a/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java +++ b/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java @@ -1,29 +1,49 @@ package chylex.javacheck.report; -import java.util.Map; +import java.awt.Desktop; +import java.awt.Font; +import javax.swing.JEditorPane; +import javax.swing.JLabel; import javax.swing.JOptionPane; -import net.minecraftforge.fml.relauncher.FMLRelaunchLog; -import net.minecraftforge.fml.relauncher.IFMLCallHook; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkEvent.EventType; +import javax.swing.event.HyperlinkListener; import org.apache.commons.lang3.JavaVersion; import org.apache.commons.lang3.SystemUtils; -public final class JavaCheckerReporter implements IFMLCallHook{ - public static JavaVersion minVersion = null; - - @Override - public Void call() throws Exception{ - if (!SystemUtils.isJavaVersionAtLeast(minVersion)){ - FMLRelaunchLog.severe(getConsoleReport()); - JOptionPane.showMessageDialog(null, "<html>"+getWindowReport()+"</html>","Outdated Java",JOptionPane.ERROR_MESSAGE); - throw new OutdatedJavaException(); +public final class JavaCheckerReporter{ + public static void run(JavaVersion minVersion){ + if (minVersion == null || !SystemUtils.isJavaVersionAtLeast(minVersion)){ + if (minVersion == null)minVersion = JavaVersion.JAVA_1_8; + + try{ + Class relaunchLog = findRelaunchLog(); + if (relaunchLog != null)relaunchLog.getMethod("severe",String.class,Object[].class).invoke(null,getConsoleReport(minVersion),new Object[0]); + }catch(Throwable t){} + + String style = "font-family:Dialog;font-size:12;font-weight:bold"; + JEditorPane pane = new JEditorPane("text/html","<html><body style='"+style+"'>"+getWindowReport(minVersion)+"</body></html>"); + pane.setBackground(new JLabel().getBackground()); + pane.setEditable(false); + + pane.addHyperlinkListener(new HyperlinkListener(){ + @Override + public void hyperlinkUpdate(HyperlinkEvent e){ + if (e.getEventType() == EventType.ACTIVATED){ + try{ + if (Desktop.isDesktopSupported())Desktop.getDesktop().browse(e.getURL().toURI()); + }catch(Exception ex){ + ex.printStackTrace(); + } + } + } + }); + + JOptionPane.showMessageDialog(null,pane,"Outdated Java",JOptionPane.ERROR_MESSAGE); + throw new OutdatedJavaException(); } - - return null; } - - @Override - public void injectData(Map<String,Object> data){} - static String getConsoleReport(){ + private static String getConsoleReport(JavaVersion minVersion){ return new StringBuilder(242).append("\n") .append("\n!! DO NOT REPORT !!\n\n") .append("One of the mods requires Java "+minVersion.toString()+" or newer, you are using ").append(SystemUtils.JAVA_VERSION).append(".\n") @@ -33,11 +53,23 @@ public final class JavaCheckerReporter implements IFMLCallHook{ .toString(); } - static String getWindowReport(){ + private static String getWindowReport(JavaVersion minVersion){ return new StringBuilder(230) .append("One of the mods requires Java "+minVersion.toString()+" or newer, you are using ").append(SystemUtils.JAVA_VERSION).append(".<br>") - .append("Visit <span style=\"color:red\">https://java.com/download/</span> for the latest version.<br>") + .append("Visit <a href=\"https://java.com/download/\"><span style=\"color:blue\">https://java.com/download/</span></a> for the latest version.<br>") .append("Please, uninstall the old version first to prevent further issues.") .toString(); } + + private static Class findRelaunchLog() throws Throwable{ + try{ + return Class.forName("cpw.mods.fml.relauncher.FMLRelaunchLog"); + }catch(ClassNotFoundException e){} + + try{ + return Class.forName("net.minecraftforge.fml.relauncher.FMLRelaunchLog"); + }catch(ClassNotFoundException e){} + + return null; + } } diff --git a/src/main/java/chylex/javacheck/test/JavaCheckerTestMod.java b/src/main/java/chylex/javacheck/test/JavaCheckerTestMod.java new file mode 100644 index 0000000..c35c6af --- /dev/null +++ b/src/main/java/chylex/javacheck/test/JavaCheckerTestMod.java @@ -0,0 +1,14 @@ +package chylex.javacheck.test; +import org.apache.commons.lang3.JavaVersion; +import chylex.javacheck.report.JavaCheckerReporter; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.EventHandler; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; + +@Mod(modid = "JavaCheckerTestMod") +public class JavaCheckerTestMod{ + @EventHandler + public void onPreInit(FMLPreInitializationEvent e){ + JavaCheckerReporter.run(null); + } +}