EaglerForgeInjector/index.html
2024-09-21 12:45:14 +08:00

178 lines
5.8 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>EaglerForge Injector</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 /><br />
<button class="btn btn-primary" id="giveme">Make modded client</button>
<button class="btn btn-primary" id="givemeserver" disabled>
Make modded server (coming soonish maybe)
</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>
Once you have a local EaglercraftX workspace setup, in
<code>build.gradle</code>, set the <code>obfuscate</code> property to
<code>false</code>. Then, run <code>CompileJS.bat</code> (or .sh if on
a unix-based os), and then run <code>MakeOfflineDownload.bat</code>.
The outputted offline download will have a much larger file size than
other offline builds. This is the file you should select. (it should
have a naming convention similar to
<code>EaglercraftX_1.8_Offline_en_US.html</code>)
</details>
<details>
<summary>Roadmap?</summary>
<a href="https://eaglerforge.github.io/EaglerForgeInjector/roadmap/">roadmap.</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>
<script src="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._teavm ||= {};
ModAPI.hooks._rippedConstructors ||= {};
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="injector.js"></script>
<!-- Code assets -->
<script src="postinit.injector.js"></script>
<script src="modloader.injector.js"></script>
<script src="modgui.injector.js"></script>
<script src="efserver.js"></script>
</body>
</html>