Hier ist das Script-System aus meinem Clienten, da ich diesen nicht mehr updaten werde. Müsstet ihr dann - sofern ihr es nutzen wollt - ein wenig anpassen. Momo plant es soweit ich weiß auch im kommenden KSClienten einzubauen.

ScriptManager.java
Code:
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import javax.script.Invocable;
import javax.script.ScriptEngine;

/**
 *
 * @author Flav
 */
public class ScriptManager {
    private ScriptEngine engine;
    private static Map<String, Object> properties;

    static {
        properties = new HashMap<String, Object>();
    }

    public ScriptManager(ScriptEngine engine) {
        this.engine = engine;
    }

    public ScriptEngine getEngine() {
        return engine;
    }

    public void load(String file) {
        InputStreamReader reader = null;

        try {
            reader = new InputStreamReader(new FileInputStream("scripts/" + file + ".js"), "UTF-8");
            engine.eval(reader);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public Timer schedule(String name, long delay) {
        return schedule(name, null, delay);
    }

    public Timer schedule(final String name, final Object[] args, long delay) {
        Timer timer = new Timer();

        timer.schedule(new TimerTask() {
            public void run() {
                try {
                    Invocable invocable = ((Invocable) engine);

                    if (args == null) {
                        invocable.invokeFunction(name);
                    } else {
                        invocable.invokeFunction(name, args);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }, delay);

        return timer;
    }

    public Object getProperty(String key) {
        return properties.get(key);
    }

    public void setProperty(String key, Object value) {
        if (properties.containsKey(key)) {
            properties.remove(key);
        }

        properties.put(key, value);
    }
}
ScriptHolder.java
Code:
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

/**
 *
 * @author Flav
 */
public class ScriptHolder {
    private static ScriptEngineManager manager;
    private static Map<String, ScriptEngine> inputScripts;
    private static Map<String, ScriptEngine> outputScripts;
    private static ScriptEngine commandScript;

    static {
        manager = new ScriptEngineManager();
    }

    public static void load() {
        inputScripts = new HashMap<String, ScriptEngine>();
        Properties inputProperties = new Properties();
        FileReader inputReader = null;

        outputScripts = new HashMap<String, ScriptEngine>();
        Properties outputProperties = new Properties();
        FileReader ouputReader = null;

        try {
            inputReader = new FileReader("scripts/input/opcodes.properties");
            inputProperties.load(inputReader);

            ouputReader = new FileReader("scripts/output/opcodes.properties");
            outputProperties.load(ouputReader);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputReader != null) {
                    inputReader.close();
                }

                if (ouputReader != null) {
                    ouputReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        for (String key : inputProperties.stringPropertyNames()) {
            if (new File("scripts/input/" + key + ".js").exists()) {
                ScriptEngine engine = manager.getEngineByName("JavaScript");
                ScriptManager script = new ScriptManager(engine);
                engine.put("script", script);
                script.load("input/" + key);
                inputScripts.put(inputProperties.getProperty(key), engine);
            }
        }

        for (String key : outputProperties.stringPropertyNames()) {
            if (new File("scripts/output/" + key + ".js").exists()) {
                ScriptEngine engine = manager.getEngineByName("JavaScript");
                ScriptManager script = new ScriptManager(engine);
                engine.put("script", script);
                script.load("output/" + key);
                outputScripts.put(outputProperties.getProperty(key), engine);
            }
        }

        if (new File("scripts/command.js").exists()) {
            commandScript = manager.getEngineByName("JavaScript");
            ScriptManager script = new ScriptManager(commandScript);
            commandScript.put("script", script);
            script.load("command");
        }
    }

    public static ScriptEngine getInputScript(String opcode) {
        return inputScripts.get(opcode);
    }

    public static ScriptEngine getOutputScript(String opcode) {
        return outputScripts.get(opcode);
    }

    public static ScriptEngine getCommandScript() {
        return commandScript;
    }
}
Sample (Command Script)
Code:
ScriptEngine engine = ScriptHolder.getCommandScript();

if (engine != null) {
    try {
        if (((Invocable) engine).invokeFunction("parse", new Object[] { param1, param5.substring(1).split(" ") }) == Boolean.TRUE) {
            return true;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Hoffentlich finden sich in Zukunft mehr Interessenten, bisher haben sich relativ wenige von euch hierfür interessiert, dabei ist es so einfach.
__________________
Ich soll dir sagen, dass du weniger spammen sollst. Entweder sagst was, das zum Thema passt, oder du hälst die Klappe!