diff --git a/src/js/mods/demo_mod.js b/src/js/mods/demo_mod.js index e11c3667..43ceffd4 100644 --- a/src/js/mods/demo_mod.js +++ b/src/js/mods/demo_mod.js @@ -2,8 +2,8 @@ import { Entity } from "../game/entity"; /* typehints:end */ -export default function ({ Mod, MetaBuilding }) { - class MetaDemoModBuilding extends MetaBuilding { +export default function (shapez) { + class MetaDemoModBuilding extends shapez.MetaBuilding { constructor() { super("demoModBuilding"); } @@ -19,7 +19,7 @@ export default function ({ Mod, MetaBuilding }) { setupEntityComponents(entity) {} } - return class ModImpl extends Mod { + return class ModImpl extends shapez.Mod { constructor(app, modLoader) { super( app, diff --git a/src/js/mods/modloader.js b/src/js/mods/modloader.js index 8edc2d3d..5732b083 100644 --- a/src/js/mods/modloader.js +++ b/src/js/mods/modloader.js @@ -31,12 +31,37 @@ export class ModLoader { initMods() { LOG.log("hook:init"); + + 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]) { + continue; + } + Object.defineProperty(exports, member, { + get() { + return module[member]; + }, + set(v) { + module[member] = v; + }, + }); + } + }); + } + this.initialized = true; this.modLoadQueue.forEach(modClass => { - const mod = new (modClass({ - Mod, - MetaBuilding, - }))(this.app, this); + const mod = new (modClass(exports))(this.app, this); mod.init(); this.mods.push(mod); });