1
0
mirror of https://github.com/chylex/Java-Checker.git synced 2025-07-22 23:04:33 +02:00

Rewrite JC as a tweaker, make it work on all MC versions, add clickable link

This commit is contained in:
chylex 2015-10-12 17:41:06 +02:00
parent bb9f99feea
commit e62a337dff
7 changed files with 123 additions and 57 deletions

View File

@ -21,7 +21,7 @@ String archiveSuffix = " MC-UNIVERSAL v1.2.jar"
minecraft{ minecraft{
version = "1.7.10-10.13.4.1492-1.7.10" version = "1.7.10-10.13.4.1492-1.7.10"
assetDir = "eclipse/assets" runDir = "eclipse"
} }
task java7Jar(type: Jar, dependsOn: "jar"){ task java7Jar(type: Jar, dependsOn: "jar"){
@ -51,6 +51,8 @@ reobf{
reobf java8Jar{ classpath -> classpath = configurations.compile } reobf java8Jar{ classpath -> classpath = configurations.compile }
} }
reobf.enabled = false
processResources{ processResources{
inputs.property "version", project.version inputs.property "version", project.version
inputs.property "mcversion", project.minecraft.version inputs.property "mcversion", project.minecraft.version

View File

@ -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];
}
}

View File

@ -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){}
}

View File

@ -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];
}
}

View File

@ -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){}
}

View File

@ -1,29 +1,49 @@
package chylex.javacheck.report; 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.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.JavaVersion;
import org.apache.commons.lang3.SystemUtils; 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 final class JavaCheckerReporter{
public static JavaVersion minVersion = null; public static void run(JavaVersion minVersion){
if (minVersion == null || !SystemUtils.isJavaVersionAtLeast(minVersion)){
@Override if (minVersion == null)minVersion = JavaVersion.JAVA_1_8;
public Void call() throws Exception{
if (!SystemUtils.isJavaVersionAtLeast(minVersion)){ try{
FMLRelaunchLog.severe(getConsoleReport()); Class relaunchLog = findRelaunchLog();
JOptionPane.showMessageDialog(null, "<html>"+getWindowReport()+"</html>","Outdated Java",JOptionPane.ERROR_MESSAGE); if (relaunchLog != null)relaunchLog.getMethod("severe",String.class,Object[].class).invoke(null,getConsoleReport(minVersion),new Object[0]);
throw new OutdatedJavaException(); }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") return new StringBuilder(242).append("\n")
.append("\n!! DO NOT REPORT !!\n\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") .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(); .toString();
} }
static String getWindowReport(){ private static String getWindowReport(JavaVersion minVersion){
return new StringBuilder(230) 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("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.") .append("Please, uninstall the old version first to prevent further issues.")
.toString(); .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;
}
} }

View File

@ -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);
}
}