<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Loading...</title> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" /> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css" rel="stylesheet" /> <style> body { background-color: #2b2b2b; color: #ffffff; overflow-x: hidden; overflow-y: scroll; } .container { text-align: center; margin-top: 50px; } .github-button-container { position: absolute; top: 10px; right: 10px; } .github-button-container a.btn { color: #ffffff; border-color: #ffffff; } .github-button-container a.btn:hover { background-color: #ffffff; color: #000000; } #info { text-align: left; min-width: 50vw; } details { text-align: left; padding: 6px; border-radius: 1rem; background-color: rgba(0, 0, 0, 0.5); margin-bottom: 1rem; } summary { background-color: rgba(255, 255, 255, 0.1); padding: 4px; border-radius: 0.6rem; padding-left: 8px; } h6 { font-weight: normal; } </style> </head> <body> <div class="container"> <h1>EaglerForge Injector</h1> <div class="github-button-container"> <a href="https://github.com/eaglerforge/EaglerForgeInjector" class="btn btn-default" target="_blank" > <i class="fab fa-github"></i> GitHub </a> </div> <h6> Adds ModAPI with more functionality (adds hooking into functions, exposes all classes, etc) to unminified unobfuscated EaglercraftX offline downloads (web support coming soon). </h6> <br /> <div class="custom-file mb-3"> <input class="custom-file-input" type="file" id="htmlFile" accept=".html,.js" /> <label class="custom-file-label" for="htmlFile" >Choose .html file...</label > <br /> <span> <label>Minify: </label><input type="checkbox" oninput="globalThis.doShronk = this.checked"> <label>MinifyExtras: </label><input type="checkbox" oninput="globalThis.doShronkPlus = this.checked"> <label>EaglerForge: </label><input checked type="checkbox" oninput="globalThis.doEaglerforge = this.checked"> <code id="status">Awaiting input...</code></span> <br /><br /> <button class="btn btn-primary" id="giveme">Make modded client</button> <button class="btn btn-primary" id="givemeserver"> Make modded server (Indev) </button> </div> <br /><br /><br /> <span>Info:</span> <div id="#info"> <details> <summary> Where can I download an unobfuscated unsigned Eaglercraft build? </summary> <a href="https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds/releases/latest" >https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds/releases/latest</a > </details> <details> <summary> How do I compile my own unobfuscated unsigned Eaglercraft build? </summary> <a href="docs/compiling_client">tutorial here</a> </details> <details> <summary>How does this tool work?</summary> The injector works by analysing your uploaded file for patterns that appear in TeaVM's compiled JavaScript code. Then, it will replace all functions with proxies to the original code, which it moves into <code>ModAPI.hooks.methods</code>. It does similar things with static properties and constructors, and then hooks into <code>$rt_metadata</code> to access auxilary information. </details> <details> <summary>Where documentation???</summary> <a href="https://eaglerforge.github.io/EaglerForgeInjector/docs" >https://eaglerforge.github.io/EaglerForgeInjector/docs</a > </details> </div> </div> <!-- Libraries --> <script src="libs/babel.min.js"></script> <script src="libs/filesaver.min.js"></script> <script> document.querySelector("#htmlFile").addEventListener("input", (e) => { if (e.target.files[0]) { document.querySelector(".custom-file-label").innerText = e.target.files[0].name; } }); var modapi_preinit = `globalThis.ModAPI ||= {}; ModAPI.hooks ||= {}; ModAPI.hooks.freezeCallstack = false; ModAPI.hooks._rippedData ||= []; ModAPI.hooks._rippedInterfaceMap ||= {}; ModAPI.hooks._teavm ||= {}; ModAPI.hooks._rippedConstructors ||= {}; ModAPI.hooks._rippedInternalConstructors ||= {}; ModAPI.hooks.methods ||= {}; ModAPI.hooks._rippedMethodTypeMap ||= {}; ModAPI.hooks._postInit ||= ()=>{}; ModAPI.hooks._rippedStaticProperties ||= {}; ModAPI.hooks._rippedStaticIndexer ||= {}; `; var freezeCallstack = `if(ModAPI.hooks.freezeCallstack){return false};`; </script> <script src="backgroundLogger.js"></script> <script src="patches.js"></script> <script src="injector.minify.js"></script> <script src="injector.js"></script> <!-- Code assets --> <script src="postinit.js"></script> <script src="modloader.js"></script> <script src="modgui.js"></script> <script src="efserver.js"></script> </body> </html>