import '@ms/nashorn' import { plugin, server, task } from '@ms/api' import { PluginManagerImpl } from '@ms/plugin' import { DefaultContainer as container, injectable, inject, postConstruct } from '@ms/container' let startTime = new Date().getTime(); @injectable() class MiaoScriptCore { @inject(server.Console) private Console: Console; @inject(task.TaskManager) private taskManager: task.TaskManager; @inject(plugin.PluginManager) private pluginManager: plugin.PluginManager; enable() { try { this.loadServerConsole(); this.loadTaskFunction(); this.loadPlugins(); } catch (error) { console.console(`§cMiaoScript start error please contact plugin author!`); console.ex(error); } console.log('MiaoScript engine loading completed... Done (' + (new Date().getTime() - startTime) / 1000 + 's)!'); return () => this.disable(); } loadServerConsole() { //@ts-ignore global.console = new this.Console(); } loadTaskFunction() { //@ts-ignore global.setTimeout = (func: Function, tick: number) => this.taskManager.create(func).later(tick).run() //@ts-ignore global.setInterval = (func: Function, tick: number) => this.taskManager.create(func).timer(tick).run() } loadPlugins() { this.pluginManager.scan('plugins'); this.pluginManager.build(container); this.pluginManager.load(); this.pluginManager.enable(); } disable() { this.pluginManager.disable(); } } function init() { try { Java.type("org.bukkit.Bukkit"); require('@ms/bukkit'); } catch (ex) { } try { Java.type("org.spongepowered.api.Sponge"); require('@ms/sponge'); } catch (ex) { } container.bind(plugin.PluginManager).to(PluginManagerImpl).inSingletonScope(); container.bind(MiaoScriptCore).to(MiaoScriptCore).inSingletonScope(); } init(); export default container.get(MiaoScriptCore).enable();