mirror of
https://github.com/eaglerforge/EaglerForgeInjector
synced 2025-07-23 06:01:38 -09:00
commit
1f04d441b5
@ -24,9 +24,8 @@ const MINIFY = function () {
|
||||
};
|
||||
};
|
||||
async function minify(input, parser, EFIConfig) {
|
||||
if (globalThis.process) {
|
||||
var _status = console.log;
|
||||
}
|
||||
var _status = globalThis._status || console.log;
|
||||
|
||||
let isHtml = true;
|
||||
let inputHtml = input;
|
||||
|
||||
|
18
examplemods/faster_minecarts.js
Normal file
18
examplemods/faster_minecarts.js
Normal file
@ -0,0 +1,18 @@
|
||||
(function MinecartSpeedMod() {
|
||||
ModAPI.meta.title("Faster Minecarts");
|
||||
ModAPI.meta.description("Faster minecarts! Use /minecart_speed {factor} to edit the minecart's speed. Carts are very prone to being flung off rails.");
|
||||
ModAPI.meta.credits("By ZXMushroom63");
|
||||
ModAPI.meta.version("v1.0");
|
||||
|
||||
ModAPI.dedicatedServer.appendCode(function () {
|
||||
ModAPI.addEventListener("processcommand", (event) => {
|
||||
if (event.command.toLowerCase().startsWith("/minecart_speed")) {
|
||||
var speed = parseFloat(event.command.substring("/minecart_speed ".length)) || 1;
|
||||
var trueSpeed = speed * 0.4;
|
||||
ModAPI.hooks.methods.nmei_EntityMinecart_getMaximumSpeed = () => trueSpeed;
|
||||
event.sender.addChatMessage(ModAPI.reflect.getClassById("net.minecraft.util.ChatComponentText").constructors[0](ModAPI.util.str("Set minecart speed to "+speed)));
|
||||
event.preventDefault = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
})();
|
132
examplemods/veinminer.js
Normal file
132
examplemods/veinminer.js
Normal file
@ -0,0 +1,132 @@
|
||||
(function TreeChopperMod() {
|
||||
ModAPI.meta.title("Vein Miner");
|
||||
ModAPI.meta.description("Vein-mines trees & ores while crouching. Press the 'config' button for settings.");
|
||||
ModAPI.meta.credits("By ZXMushroom63");
|
||||
ModAPI.meta.version("v1.0");
|
||||
globalThis.VEINMINERCONF = {
|
||||
doLogs: true,
|
||||
doOres: true,
|
||||
doGravel: false,
|
||||
doClay: false,
|
||||
};
|
||||
try {
|
||||
Object.assign(conf, JSON.parse(localStorage.getItem("trc_mod::conf") || "{}"));
|
||||
} catch (error) {
|
||||
//swallow
|
||||
}
|
||||
ModAPI.meta.config(()=>{
|
||||
var conf = document.createElement("div");
|
||||
conf.innerHTML = `
|
||||
<h1>Vein Miner Settings <a href="javascript:void(0)" onclick="this.parentElement.parentElement.remove()" style="color:red">[X]</a></h1>
|
||||
<sub>Refresh page to apply settings</sub><br>
|
||||
<label>Veinmine Logs: </label><input type=checkbox ${VEINMINERCONF.doLogs ? "checked" : ""} oninput="VEINMINERCONF.doLogs = this.checked; this.parentElement.__save();"></input><br>
|
||||
<label>Veinmine Ores: </label><input type=checkbox ${VEINMINERCONF.doOres ? "checked" : ""} oninput="VEINMINERCONF.doOres = this.checked; this.parentElement.__save();"></input><br>
|
||||
<label>Veinmine Gravel: </label><input type=checkbox ${VEINMINERCONF.doGravel ? "checked" : ""} oninput="VEINMINERCONF.doGravel = this.checked; this.parentElement.__save();"></input><br>
|
||||
<label>Veinmine Clay: </label><input type=checkbox ${VEINMINERCONF.doClay ? "checked" : ""} oninput="VEINMINERCONF.doClay = this.checked; this.parentElement.__save();"></input><br>
|
||||
`;
|
||||
conf.style = "position: fixed; background-color: white; color: black; width: 100vw; height: 100vh; z-index: 256;top:0;left:0;";
|
||||
conf.__save = ()=>localStorage.setItem("trc_mod::conf", JSON.stringify(VEINMINERCONF));
|
||||
document.body.appendChild(conf);
|
||||
});
|
||||
|
||||
ModAPI.dedicatedServer.appendCode(`globalThis.VEINMINERCONF = ${JSON.stringify(VEINMINERCONF)};`);
|
||||
|
||||
ModAPI.dedicatedServer.appendCode(function () {
|
||||
ModAPI.addEventListener("bootstrap", () => {
|
||||
const targettedBlockIds = [];
|
||||
if (VEINMINERCONF.doLogs) {
|
||||
targettedBlockIds.push("log", "log2");
|
||||
}
|
||||
if (VEINMINERCONF.doOres) {
|
||||
targettedBlockIds.push("coal_ore", "gold_ore", "iron_ore", "lapis_ore", "quartz_ore", "diamond_ore", "emerald_ore", "redstone_ore", "lit_redstone_ore");
|
||||
}
|
||||
if (VEINMINERCONF.doGravel) {
|
||||
targettedBlockIds.push("gravel");
|
||||
}
|
||||
if (VEINMINERCONF.doClay) {
|
||||
targettedBlockIds.push("clay");
|
||||
}
|
||||
console.log(targettedBlockIds);
|
||||
const valid_log_blocks = targettedBlockIds.map(x => ModAPI.blocks[x].getRef());
|
||||
|
||||
function stringifyBlockPos(blockPos) {
|
||||
return blockPos.x + "," + blockPos.y + "," + blockPos.z;
|
||||
}
|
||||
function getNeighbors(blockPos) {
|
||||
return [
|
||||
//direct neighbors
|
||||
blockPos.down(1),
|
||||
blockPos.up(1),
|
||||
blockPos.north(1),
|
||||
blockPos.south(1),
|
||||
blockPos.east(1),
|
||||
blockPos.west(1),
|
||||
|
||||
//edges
|
||||
blockPos.down(1).north(1),
|
||||
blockPos.down(1).south(1),
|
||||
blockPos.down(1).east(1),
|
||||
blockPos.down(1).west(1),
|
||||
blockPos.up(1).north(1),
|
||||
blockPos.up(1).south(1),
|
||||
blockPos.up(1).east(1),
|
||||
blockPos.up(1).west(1),
|
||||
blockPos.north(1).east(1),
|
||||
blockPos.north(1).west(1),
|
||||
blockPos.south(1).east(1),
|
||||
blockPos.south(1).west(1),
|
||||
|
||||
//corners
|
||||
blockPos.down(1).north(1).east(1),
|
||||
blockPos.down(1).north(1).west(1),
|
||||
blockPos.down(1).south(1).east(1),
|
||||
blockPos.down(1).south(1).west(1),
|
||||
blockPos.up(1).north(1).east(1),
|
||||
blockPos.up(1).north(1).west(1),
|
||||
blockPos.up(1).south(1).east(1),
|
||||
blockPos.up(1).south(1).west(1),
|
||||
];
|
||||
}
|
||||
async function getBlockGraph(blockPos, getBlockState, targetType) {
|
||||
const closed = [stringifyBlockPos(blockPos)];
|
||||
const logs = [];
|
||||
const open = [...getNeighbors(blockPos)];
|
||||
const maxIters = 120;
|
||||
var i = 0;
|
||||
while (open.length > 0 && i < maxIters) {
|
||||
const target = open.pop();
|
||||
|
||||
closed.push(stringifyBlockPos(target));
|
||||
|
||||
i++;
|
||||
const iBlockState = await getBlockState(target.getRef());
|
||||
if (iBlockState.block.getRef() === targetType) {
|
||||
logs.push(target);
|
||||
open.push(...getNeighbors(target).filter(x => !closed.includes(stringifyBlockPos(x))));
|
||||
}
|
||||
}
|
||||
return logs;
|
||||
}
|
||||
|
||||
valid_log_blocks.forEach(b => {
|
||||
const originalHarvest = b.$harvestBlock;
|
||||
b.$harvestBlock = function ($theWorld, $player, $blockpos, $blockstate, $tileentity) {
|
||||
if ($player.$isSneaking() && !ModAPI.util.isCritical()) {
|
||||
ModAPI.promisify(async () => {
|
||||
var player = ModAPI.util.wrap($player);
|
||||
var world = ModAPI.util.wrap($theWorld);
|
||||
var harvestCall = ModAPI.promisify(player.theItemInWorldManager.tryHarvestBlock);
|
||||
|
||||
const blocks = await getBlockGraph(ModAPI.util.wrap($blockpos), ModAPI.promisify(world.getBlockState), b);
|
||||
|
||||
for (let i = 0; i < blocks.length; i++) {
|
||||
await harvestCall(blocks[i].getRef());
|
||||
}
|
||||
})();
|
||||
}
|
||||
originalHarvest.apply(this, [$theWorld, $player, $blockpos, $blockstate, $tileentity]);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
})();
|
35
index.html
35
index.html
@ -3,6 +3,21 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="description" content="EaglerForge Injector is a tool designed for modifying or injecting code into Eaglercraft clients, supporting 1.8 and 1.12.">
|
||||
<link rel="canonical" href="https://eaglerforge.github.io/eaglerforgeinjector/">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="og:title" content="EaglerForge Injector - Modding API for Eaglercraft">
|
||||
<meta property="og:url" content="https://eaglerforge.github.io/eaglerforgeinjector/">
|
||||
<meta property="og:site_name" content="EaglerForge Injector - Modding API for Eaglercraft">
|
||||
|
||||
<meta property="og:image" content="http://eaglerforge.github.io/EaglerForgeInjector/res/EaglerForgeInjector.png">
|
||||
<meta property="og:image:width" content="1024">
|
||||
<meta property="og:image:height" content="1024">
|
||||
<meta property="og:image:type" content="image/png">
|
||||
|
||||
<meta name="author" content="EaglerForge Team">
|
||||
|
||||
<title>Loading...</title>
|
||||
<link
|
||||
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"
|
||||
@ -111,14 +126,18 @@
|
||||
<summary>
|
||||
Where can I download an unobfuscated unsigned Eaglercraft build?
|
||||
</summary>
|
||||
<a
|
||||
href="https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds/releases/latest"
|
||||
>1.8: https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds/releases/latest</a
|
||||
>
|
||||
<a
|
||||
href="https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds-1.12/releases/latest"
|
||||
>1.12: https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds-1.12/releases/latest</a
|
||||
>
|
||||
<p>
|
||||
<strong>1.8:</strong>
|
||||
<a href="https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds/releases/latest">
|
||||
https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds/releases/latest
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<strong>1.12:</strong>
|
||||
<a href="https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds-1.12/releases/latest">
|
||||
https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds-1.12/releases/latest
|
||||
</a>
|
||||
</p>
|
||||
</details>
|
||||
<details>
|
||||
<summary>
|
||||
|
BIN
res/EaglerForgeInjector.png
Normal file
BIN
res/EaglerForgeInjector.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
Loading…
x
Reference in New Issue
Block a user