package nightmod;

import java.awt.*;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * This class handles loading of Nightmod namespaces while the splash image
 * is displayed on the screen. See entry point main() method in this class. How
 * it works:
 * 0. Assumes the splash screen is loaded (see project.clj - :manifest entry)
 * 1. Loads nightmod.core/-main using reflection (it takes time)
 * 2. Closes splash screen
 * 3. Invokes nightmod.core/-main
 */
public class Nightmod {

    private Method loadNightmodMain() throws Exception {
        final String cn = "nightmod.core";
        Class<?> clazz = Class.forName(cn);
        if (clazz == null) {
            throw new RuntimeException("Cannot load class " + cn);
        }
        Method m = clazz.getMethod("main", String[].class);
        if (m == null) {
            throw new RuntimeException("Cannot obtain method 'main'");
        }
        return m;
    }

    private void invokeNightmodMain(Method m, String[] args) throws Exception {
        m.invoke(null, (Object) args);
    }

    private void init(String[] args) throws Exception {
        final SplashScreen splash = SplashScreen.getSplashScreen();

        Method m = loadNightmodMain();

        if (splash != null) {
            splash.close();
        }

        invokeNightmodMain(m, args);
    }

    public static void main(String[] args) throws Exception {
        Properties props = System.getProperties();
        // properties to make font rendering smoother on Linux+OracleJVM/OpenJDK
        // should make no difference on other OSes and JVMs
        // set properties only if the user has not overidden them
        if (props.getProperty("awt.useSystemAAFontSettings") == null
                && props.getProperty("sun.java2d.xrender") == null) {
            props.setProperty("awt.useSystemAAFontSettings", "on");
            props.setProperty("sun.java2d.xrender", "true");
        }
        // initialize and launch Nightmod
        new Nightmod().init(args);
    }

}

@@ -92,16 +92,38 @@
 perties;
+%0Aimport javax.swing.*;
 %0A%0A/**%0A *
@@ -299,19 +299,13 @@
  0. 
-Assumes the
+Opens
  spl
@@ -320,52 +320,47 @@
 en i
-s loaded (see project.clj - :manifest entry)
+n a JWindow if it wasn't loaded via awt
 %0A * 
@@ -1198,25 +1198,24 @@
 shScreen();%0A
-%0A
         Meth
@@ -1212,24 +1212,450 @@
       Method
+ m;%0A%0A        if (splash == null) %7B%0A            JWindow window = new JWindow();%0A            ClassLoader cl = this.getClass().getClassLoader();%0A            Icon icon  = new ImageIcon(cl.getResource(%22logo_splash.png%22));%0A            window.add(new JLabel(icon));%0A            window.setSize(icon.getIconWidth(), icon.getIconHeight());%0A            window.setLocationRelativeTo(null);%0A            window.setVisible(true);%0A           
  m = loadNig
@@ -1667,25 +1667,28 @@
 Main();%0A
-%0A
+    
         
 if (spla
@@ -1683,29 +1683,116 @@
     
-if (splash != null) %7B
+window.setVisible(false);%0A            window.dispose();%0A        %7D else %7B%0A            m = loadNightmodMain();
 %0A   

Support both splashscreen techniques