Spaces:
Running
Running
| function loadLoader() { | |
| window.ModLoader = function ModLoader(ModsArr) { | |
| if (!window.eaglerMLoaderMainRun) { | |
| var searchParams = new URLSearchParams(location.search); | |
| searchParams.getAll("Mod").forEach((ModToAdd) => { | |
| console.log( | |
| "EaglerML: Adding Mod to loadlist from search params: " + ModToAdd | |
| ); | |
| ModsArr.push(ModToAdd); | |
| }); | |
| if ( | |
| !!eaglercraftXOpts && | |
| !!eaglercraftXOpts.Mods && | |
| Array.isArray(eaglercraftXOpts.Mods) | |
| ) { | |
| eaglercraftXOpts.Mods.forEach((ModToAdd) => { | |
| console.log( | |
| "EaglerML: Adding Mod to loadlist from eaglercraftXOpts: " + | |
| ModToAdd | |
| ); | |
| ModsArr.push(ModToAdd); | |
| }); | |
| } | |
| window.eaglerMLoaderMainRun = true; | |
| } | |
| if (window.noLoadMods === true) { | |
| ModsArr.splice(0, ModsArr.length); | |
| } | |
| function checkModsLoaded(totalLoaded, identifier) { | |
| console.log( | |
| "EaglerML: Checking if Mods are finished :: " + | |
| totalLoaded + | |
| "/" + | |
| ModsArr.length | |
| ); | |
| if (totalLoaded >= ModsArr.length) { | |
| clearInterval(identifier); | |
| window.ModGracePeriod = false; | |
| if ( | |
| window.eaglerMLoaderMainRun && | |
| ModAPI && | |
| ModAPI.events && | |
| ModAPI.events.callEvent | |
| ) { | |
| ModAPI.events.callEvent("load", {}); | |
| } | |
| console.log( | |
| "EaglerML: Checking if Mods are finished :: All Mods loaded! Grace period off." | |
| ); | |
| } | |
| } | |
| function methodB(currentMod) { | |
| try { | |
| console.log("EaglerML: Loading " + currentMod + " via method B."); | |
| var script = document.createElement("script"); | |
| script.src = currentMod; | |
| script.setAttribute("data-Mod", currentMod); | |
| script.setAttribute("data-isMod", true); | |
| script.onerror = () => { | |
| console.log( | |
| "EaglerML: Failed to load " + currentMod + " via method B!" | |
| ); | |
| script.remove(); | |
| totalLoaded++; | |
| }; | |
| script.onload = () => { | |
| console.log( | |
| "EaglerML: Successfully loaded " + currentMod + " via method B." | |
| ); | |
| totalLoaded++; | |
| }; | |
| document.body.appendChild(script); | |
| } catch (error) { | |
| console.log( | |
| "EaglerML: Oh no! The Mod " + currentMod + " failed to load!" | |
| ); | |
| totalLoaded++; | |
| } | |
| } | |
| window.ModGracePeriod = true; | |
| var totalLoaded = 0; | |
| var loaderCheckInterval = null; | |
| ModsArr.forEach((c) => { | |
| let currentMod = c; | |
| console.log("EaglerML: Starting " + currentMod); | |
| try { | |
| var req = new XMLHttpRequest(); | |
| req.open("GET", currentMod); | |
| req.onload = function xhrLoadHandler() { | |
| console.log("EaglerML: Loading " + currentMod + " via method A."); | |
| var script = document.createElement("script"); | |
| try { | |
| script.src = | |
| "data:text/javascript," + encodeURIComponent(req.responseText); | |
| } catch (error) { | |
| methodB(currentMod); | |
| return; | |
| } | |
| script.setAttribute("data-Mod", currentMod); | |
| script.setAttribute("data-isMod", true); | |
| script.onerror = () => { | |
| console.log( | |
| "EaglerML: Failed to load " + currentMod + " via method A!" | |
| ); | |
| script.remove(); | |
| totalLoaded++; | |
| }; | |
| script.onload = () => { | |
| console.log( | |
| "EaglerML: Successfully loaded " + currentMod + " via method A." | |
| ); | |
| totalLoaded++; | |
| }; | |
| document.body.appendChild(script); | |
| }; | |
| req.onerror = function xhrErrorHandler() { | |
| methodB(currentMod); | |
| }; | |
| req.send(); | |
| } catch (error) { | |
| methodB(currentMod); | |
| } | |
| }); | |
| loaderCheckInterval = setInterval(() => { | |
| checkModsLoaded(totalLoaded, loaderCheckInterval); | |
| }, 500); | |
| console.log( | |
| "EaglerML: Starting to load " + ModsArr.length + " Mods..." | |
| ); | |
| window.returntotalloadedmods = function returntotalloadedmods(){ | |
| return totalLoaded | |
| } | |
| }; | |
| } |