diff --git a/src/js/mods/mod_interface.js b/src/js/mods/mod_interface.js index ab6b4077..3f61fce1 100644 --- a/src/js/mods/mod_interface.js +++ b/src/js/mods/mod_interface.js @@ -391,11 +391,11 @@ export class ModInterface { /** * - * @param {typeof Object} classHandle + * @param {Object} obj * @param {({ $super, $old }) => any} extender */ - extendClass(classHandle, extender) { - const prototype = classHandle.prototype; + extendObject(obj, extender) { + const prototype = obj.prototype; const $super = Object.getPrototypeOf(prototype); const $old = {}; @@ -409,4 +409,13 @@ export class ModInterface { prototype[propertyName] = extensionMethods[propertyName]; }); } + + /** + * + * @param {typeof Object} classHandle + * @param {({ $super, $old }) => any} extender + */ + extendClass(classHandle, extender) { + this.extendObject(classHandle.prototype, extender); + } } diff --git a/src/js/mods/modloader.js b/src/js/mods/modloader.js index 668411f3..fa90b8a6 100644 --- a/src/js/mods/modloader.js +++ b/src/js/mods/modloader.js @@ -121,6 +121,9 @@ export class ModLoader { } window.$shapez_registerMod = (modClass, meta) => { + if (this.initialized) { + throw new Error("Can't register mod after modloader is initialized"); + } if (this.modLoadQueue.some(entry => entry.meta.id === meta.id)) { console.warn("Not registering mod", meta, "since a mod with the same id is already loaded"); return; @@ -151,8 +154,6 @@ export class ModLoader { delete window.$shapez_registerMod; - this.initialized = true; - for (let i = 0; i < this.modLoadQueue.length; i++) { const { modClass, meta } = this.modLoadQueue[i]; const modDataFile = "modsettings_" + meta.id + "__" + meta.version + ".json"; @@ -190,6 +191,7 @@ export class ModLoader { } this.modLoadQueue = []; + this.initialized = true; } }