1
0
mirror of https://github.com/chylex/Java-Checker.git synced 2025-06-13 02:34:07 +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{
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

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

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