diff --git a/src/js/globals.d.ts b/src/js/globals.d.ts index bf870fab..f6983645 100644 --- a/src/js/globals.d.ts +++ b/src/js/globals.d.ts @@ -22,6 +22,8 @@ declare const G_IS_RELEASE: boolean; declare const G_CHINA_VERSION: boolean; declare const G_WEGAME_VERSION: boolean; +declare const shapez: any; + // Polyfills declare interface String { replaceAll(search: string, replacement: string): string; @@ -95,6 +97,8 @@ declare interface Window { registerMod: any; anyModLoaded: any; + shapez: any; + webkitRequestAnimationFrame(); assert(condition: boolean, failureMessage: string); diff --git a/src/js/mods/demo_mod.nobuild/index.js b/src/js/mods/demo_mod.nobuild/index.js index 1ff42074..c8f166ba 100644 --- a/src/js/mods/demo_mod.nobuild/index.js +++ b/src/js/mods/demo_mod.nobuild/index.js @@ -1,4 +1,4 @@ -registerMod(shapez => { +registerMod(() => { class DemoModComponent extends shapez.Component { static getId() { return "DemoMod"; diff --git a/src/js/mods/modloader.js b/src/js/mods/modloader.js index f9926eff..7cbcc0fd 100644 --- a/src/js/mods/modloader.js +++ b/src/js/mods/modloader.js @@ -41,9 +41,41 @@ export class ModLoader { return this.mods.length > 0; } + exposeExports() { + if (G_IS_DEV || G_IS_STANDALONE) { + let exports = {}; + const modules = require.context("../", true, /\.js$/); + + Array.from(modules.keys()).forEach(key => { + // @ts-ignore + const module = modules(key); + for (const member in module) { + if (member === "default") { + continue; + } + if (exports[member]) { + throw new Error("Duplicate export of " + member); + } + Object.defineProperty(exports, member, { + get() { + return module[member]; + }, + set(v) { + module[member] = v; + }, + }); + } + }); + + window.shapez = exports; + } + } + async initMods() { LOG.log("hook:init"); + this.exposeExports(); + if (G_IS_STANDALONE || G_IS_DEV) { try { let mods = []; @@ -71,36 +103,9 @@ export class ModLoader { } } - let exports = {}; - - if (G_IS_DEV || G_IS_STANDALONE) { - const modules = require.context("../", true, /\.js$/); - - Array.from(modules.keys()).forEach(key => { - // @ts-ignore - const module = modules(key); - for (const member in module) { - if (member === "default") { - continue; - } - if (exports[member]) { - throw new Error("Duplicate export of " + member); - } - Object.defineProperty(exports, member, { - get() { - return module[member]; - }, - set(v) { - module[member] = v; - }, - }); - } - }); - } - this.initialized = true; this.modLoadQueue.forEach(modClass => { - const mod = new (modClass(exports))(this.app, this); + const mod = new (modClass())(this.app, this); mod.init(); this.mods.push(mod); });