From 959cf1acf1364341aa7db8b298260d77a6d02572 Mon Sep 17 00:00:00 2001 From: chylex <info@chylex.com> Date: Sat, 25 Jul 2015 18:43:03 +0200 Subject: [PATCH 1/4] Backport Java Checker to 1.7.10 --- build.gradle | 39 +++++++++---------- .../chylex/javacheck/Java7CheckerCoremod.java | 2 +- .../chylex/javacheck/Java8CheckerCoremod.java | 2 +- .../javacheck/report/JavaCheckerReporter.java | 4 +- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/build.gradle b/build.gradle index d73a8a7..db3cd67 100644 --- a/build.gradle +++ b/build.gradle @@ -1,16 +1,16 @@ -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' } } @@ -18,45 +18,44 @@ buildscript { apply plugin: 'forge' version = "" -group = "chylex.java7check" -archivesBaseName = "Java7Checker MC-1.8+ v1.1" +group = "chylex.javacheck" +archivesBaseName = "Java7Checker MC-1.7.10 v1.1" -minecraft { - version = "1.8-11.14.1.1306" +minecraft{ + version = "1.7.10-10.13.4.1492-1.7.10" assetDir = "eclipse/assets" - mappings = "snapshot_nodoc_20141130" } -jar { - manifest { +jar{ + manifest{ attributes 'FMLCorePlugin': 'chylex.javacheck.Java7CheckerCoremod' } } -task java8Jar(type: Jar, dependsOn: "jar") { +task java8Jar(type: Jar, dependsOn: "jar"){ from sourceSets.main.output - manifest { + manifest{ attributes 'FMLCorePlugin': 'chylex.javacheck.Java8CheckerCoremod' } - baseName = "Java8Checker MC-1.8+ v1.1" + baseName = "Java8Checker MC-1.7.10 v1.1" } -reobf { - reobf java8Jar { classpath -> classpath = configurations.compile } +reobf{ + reobf java8Jar{ classpath -> classpath = configurations.compile } } -processResources { +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/Java7CheckerCoremod.java b/src/main/java/chylex/javacheck/Java7CheckerCoremod.java index bb3f00f..96050fb 100644 --- a/src/main/java/chylex/javacheck/Java7CheckerCoremod.java +++ b/src/main/java/chylex/javacheck/Java7CheckerCoremod.java @@ -1,8 +1,8 @@ package chylex.javacheck; import java.util.Map; -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; import org.apache.commons.lang3.JavaVersion; import chylex.javacheck.report.JavaCheckerReporter; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin; public class Java7CheckerCoremod implements IFMLLoadingPlugin{ @Override diff --git a/src/main/java/chylex/javacheck/Java8CheckerCoremod.java b/src/main/java/chylex/javacheck/Java8CheckerCoremod.java index 5f3b9b3..da6ce08 100644 --- a/src/main/java/chylex/javacheck/Java8CheckerCoremod.java +++ b/src/main/java/chylex/javacheck/Java8CheckerCoremod.java @@ -1,8 +1,8 @@ package chylex.javacheck; import java.util.Map; -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; import org.apache.commons.lang3.JavaVersion; import chylex.javacheck.report.JavaCheckerReporter; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin; public class Java8CheckerCoremod implements IFMLLoadingPlugin{ @Override diff --git a/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java b/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java index 0a91de4..deebeac 100644 --- a/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java +++ b/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java @@ -1,10 +1,10 @@ package chylex.javacheck.report; import java.util.Map; import javax.swing.JOptionPane; -import net.minecraftforge.fml.relauncher.FMLRelaunchLog; -import net.minecraftforge.fml.relauncher.IFMLCallHook; import org.apache.commons.lang3.JavaVersion; import org.apache.commons.lang3.SystemUtils; +import cpw.mods.fml.relauncher.FMLRelaunchLog; +import cpw.mods.fml.relauncher.IFMLCallHook; public final class JavaCheckerReporter implements IFMLCallHook{ public static JavaVersion minVersion = null; From 7c0e4ff376efaba50c489152e6516604a0ca73a5 Mon Sep 17 00:00:00 2001 From: chylex <info@chylex.com> Date: Wed, 7 Oct 2015 23:54:22 +0200 Subject: [PATCH 2/4] Fix shading --- src/main/java/chylex/javacheck/Java7CheckerCoremod.java | 2 +- src/main/java/chylex/javacheck/Java8CheckerCoremod.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/chylex/javacheck/Java7CheckerCoremod.java b/src/main/java/chylex/javacheck/Java7CheckerCoremod.java index 96050fb..17b8a1b 100644 --- a/src/main/java/chylex/javacheck/Java7CheckerCoremod.java +++ b/src/main/java/chylex/javacheck/Java7CheckerCoremod.java @@ -8,7 +8,7 @@ public class Java7CheckerCoremod implements IFMLLoadingPlugin{ @Override public String getSetupClass(){ JavaCheckerReporter.minVersion = JavaVersion.JAVA_1_7; - return "chylex.javacheck.report.JavaCheckerReporter"; + return JavaCheckerReporter.class.getName(); } @Override public String[] getASMTransformerClass(){ return null; } diff --git a/src/main/java/chylex/javacheck/Java8CheckerCoremod.java b/src/main/java/chylex/javacheck/Java8CheckerCoremod.java index da6ce08..e13bea0 100644 --- a/src/main/java/chylex/javacheck/Java8CheckerCoremod.java +++ b/src/main/java/chylex/javacheck/Java8CheckerCoremod.java @@ -8,7 +8,7 @@ public class Java8CheckerCoremod implements IFMLLoadingPlugin{ @Override public String getSetupClass(){ JavaCheckerReporter.minVersion = JavaVersion.JAVA_1_8; - return "chylex.javacheck.report.JavaCheckerReporter"; + return JavaCheckerReporter.class.getName(); } @Override public String[] getASMTransformerClass(){ return null; } From bb9f99feeadf4953d2fa41b1bfe9fb2a6bd3fbeb Mon Sep 17 00:00:00 2001 From: chylex <info@chylex.com> Date: Mon, 12 Oct 2015 15:44:10 +0200 Subject: [PATCH 3/4] Rewrite build.gradle --- build.gradle | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index db3cd67..0ea50df 100644 --- a/build.gradle +++ b/build.gradle @@ -17,32 +17,37 @@ buildscript{ apply plugin: 'forge' -version = "" -group = "chylex.javacheck" -archivesBaseName = "Java7Checker MC-1.7.10 v1.1" +String archiveSuffix = " MC-UNIVERSAL v1.2.jar" minecraft{ version = "1.7.10-10.13.4.1492-1.7.10" assetDir = "eclipse/assets" } -jar{ +task java7Jar(type: Jar, dependsOn: "jar"){ + from sourceSets.main.output + manifest{ - attributes 'FMLCorePlugin': 'chylex.javacheck.Java7CheckerCoremod' + attributes 'TweakClass': 'chylex.javacheck.Java7Checker' } + + archiveName = "Java7Checker"+archiveSuffix } task java8Jar(type: Jar, dependsOn: "jar"){ from sourceSets.main.output manifest{ - attributes 'FMLCorePlugin': 'chylex.javacheck.Java8CheckerCoremod' + attributes 'TweakClass': 'chylex.javacheck.Java8Checker' } - baseName = "Java8Checker MC-1.7.10 v1.1" + archiveName = "Java8Checker"+archiveSuffix } +jar.enabled = false + reobf{ + reobf java7Jar{ classpath -> classpath = configurations.compile } reobf java8Jar{ classpath -> classpath = configurations.compile } } From e62a337dff62eae5e37a0e1ccebacc1b7b6b3542 Mon Sep 17 00:00:00 2001 From: chylex <info@chylex.com> Date: Mon, 12 Oct 2015 17:41:06 +0200 Subject: [PATCH 4/4] Rewrite JC as a tweaker, make it work on all MC versions, add clickable link --- build.gradle | 4 +- .../java/chylex/javacheck/Java7Checker.java | 27 +++++++ .../chylex/javacheck/Java7CheckerCoremod.java | 18 ----- .../java/chylex/javacheck/Java8Checker.java | 27 +++++++ .../chylex/javacheck/Java8CheckerCoremod.java | 18 ----- .../javacheck/report/JavaCheckerReporter.java | 72 +++++++++++++------ .../javacheck/test/JavaCheckerTestMod.java | 14 ++++ 7 files changed, 123 insertions(+), 57 deletions(-) create mode 100644 src/main/java/chylex/javacheck/Java7Checker.java delete mode 100644 src/main/java/chylex/javacheck/Java7CheckerCoremod.java create mode 100644 src/main/java/chylex/javacheck/Java8Checker.java delete mode 100644 src/main/java/chylex/javacheck/Java8CheckerCoremod.java create mode 100644 src/main/java/chylex/javacheck/test/JavaCheckerTestMod.java diff --git a/build.gradle b/build.gradle index 0ea50df..5216038 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ String archiveSuffix = " MC-UNIVERSAL v1.2.jar" minecraft{ version = "1.7.10-10.13.4.1492-1.7.10" - assetDir = "eclipse/assets" + runDir = "eclipse" } task java7Jar(type: Jar, dependsOn: "jar"){ @@ -51,6 +51,8 @@ reobf{ reobf java8Jar{ classpath -> classpath = configurations.compile } } +reobf.enabled = false + processResources{ inputs.property "version", project.version inputs.property "mcversion", project.minecraft.version 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 17b8a1b..0000000 --- a/src/main/java/chylex/javacheck/Java7CheckerCoremod.java +++ /dev/null @@ -1,18 +0,0 @@ -package chylex.javacheck; -import java.util.Map; -import org.apache.commons.lang3.JavaVersion; -import chylex.javacheck.report.JavaCheckerReporter; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin; - -public class Java7CheckerCoremod implements IFMLLoadingPlugin{ - @Override - public String getSetupClass(){ - JavaCheckerReporter.minVersion = JavaVersion.JAVA_1_7; - return JavaCheckerReporter.class.getName(); - } - - @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 e13bea0..0000000 --- a/src/main/java/chylex/javacheck/Java8CheckerCoremod.java +++ /dev/null @@ -1,18 +0,0 @@ -package chylex.javacheck; -import java.util.Map; -import org.apache.commons.lang3.JavaVersion; -import chylex.javacheck.report.JavaCheckerReporter; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin; - -public class Java8CheckerCoremod implements IFMLLoadingPlugin{ - @Override - public String getSetupClass(){ - JavaCheckerReporter.minVersion = JavaVersion.JAVA_1_8; - return JavaCheckerReporter.class.getName(); - } - - @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 deebeac..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 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; -import cpw.mods.fml.relauncher.FMLRelaunchLog; -import cpw.mods.fml.relauncher.IFMLCallHook; -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); + } +}