Greasy Fork is available in English.

Melon Hub (bloxd.io)

hack client for bloxd.io, open source on github.

// ==UserScript==
// @name         Melon Hub (bloxd.io)
// @namespace    https://github.com/OfficiallyMelon/Melon-Hub
// @version      v1.0
// @description  hack client for bloxd.io, open source on github.
// @author       melon
// @match        https://bloxd.io*
// @icon         https://bloxd.io*
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        unsafeWindow
// @run-at       document-start
// ==/UserScript==


/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  n9: () => (/* binding */ addOutput),
  oP: () => (/* binding */ injectionStatus)
});

// UNUSED EXPORTS: addError, reapplyLogs

;// ./Inject/Inject.ts

var config = {
    coordinates: [null, null, null],
    methods: {},
    CurrentlyInjected: false,
    freecamPosition: [0, 0, 0]
};
// Functions
function hookObjectAssign(target, prop, handler) {
    var originalMethod = target[prop];
    target[prop] = new Proxy(originalMethod, {
        apply: function (originalFunc, thisArg, argsList) {
            handler.apply(void 0, argsList);
            return Reflect.apply(originalFunc, thisArg, argsList);
        }
    });
}
// Hook Noa (thanks blackhole for injection method, yay!)
hookObjectAssign(Object, 'assign', function () {
    var params = [];
    for (var _i = 0; _i < arguments.length; _i++) {
        params[_i] = arguments[_i];
    }
    var hasSwingTime = false;
    try {
        if (params[2].swingDuration !== undefined) {
            hasSwingTime = true;
        }
    }
    catch (err) {
        // Property swingDuration not found
    }
    var hasIdentifier = false;
    try {
        if (params[1].__id !== undefined) {
            hasIdentifier = true;
        }
    }
    catch (err) {
        // Property __id not found
    }
    if (hasSwingTime && hasIdentifier && params.length === 4 && params[2].swingDuration === 200 && params[1].__id === 1) {
        config.hookedObject = params[0];
        setTimeout(function () {
            config.babylonEngine = window.BABYLON;
            config.noaInstance = config.hookedObject.heldItem.noa;
            config.CurrentlyInjected = true;
            addOutput("Injection State:", config.noaInstance ? "Successfully hooked noa!" : "Unsuccessful, try reloading the page.");
            console.log("Successfully hooked noa!", config.noaInstance);
            window.noa = config.noaInstance;
            config.genericPlayerState = config.noaInstance.ents._storage.genericLifeForm.hash[config.noaInstance.playerEntity];
            setTimeout(function () {
                injectionStatus.style.cssText =
                    "position:absolute;bottom:5px;right:5px;width:15px;height:15px;background:green;border-radius:50%;";
            }, 100);
        }, 1);
    }
});


;// ./Modules/Packets.ts
var _a;
// Declare hookedSend globally
var hookedSend = null;
var Context = null;
function interceptSockets() {
    (function () {
        var originalDefineProperty = Object.defineProperty;
        // Hooking into the send property of window
        Object.defineProperty = function (obj, prop, descriptor) {
            try {
                if (prop === "send" && typeof descriptor.value === "function") {
                    console.log("[HOOK] Defining property: send");
                    hookedSend = descriptor.value;
                    descriptor.value = function () {
                        var args = [];
                        for (var _i = 0; _i < arguments.length; _i++) {
                            args[_i] = arguments[_i];
                        }
                        //console.log(`[HOOK] Intercepted send() call with arguments:`, args);
                        if (hookedSend) {
                            Context = this;
                            return hookedSend.apply(this, args);
                        }
                        else {
                            console.error("[HOOK ERROR] hookedSend is null");
                        }
                    };
                }
            }
            catch (error) {
                console.error("[HOOK ERROR] Failed to hook send:", error);
            }
            return originalDefineProperty.apply(this, arguments);
        };
        // Attach a getter to get hookedSend globally if needed
        Object.defineProperty(window, "getHookedSend", {
            value: function () { return hookedSend; },
            writable: false,
            configurable: false
        });
    })();
}
// function PacketConverter(Y) {
//   const P = new Array(128).fill(0).map((_, index) => index);
//   const X = new s.e("$(Y)$(e.m)");
//   return function(Y: any[]) {
//       for (let P = 0; P < Y.length; P++) {
//           const q = P + Math.floor(X.next() * (Y.length - P));
//           [Y[P], Y[q]] = [Y[q], Y[P]];
//       }
//       return Y;
//   };
// }
var PacketType = {
    PLACE_BLOCK: 114,
};
var packets = (_a = {},
    _a[PacketType.PLACE_BLOCK] = {
        pos: null,
        toBlock: null,
        checker: null
    },
    _a);
function sendPacket(packetType, data) {
    if (hookedSend && Context) {
        hookedSend.apply(Context, [packetType, data]);
    }
    else {
        console.error("[HOOK ERROR] hookedSend is null");
    }
}


;// ./Modules/Modules.ts
// Modules.ts



var ExecutionFunctions = /** @class */ (function () {
    function ExecutionFunctions() {
    }
    ExecutionFunctions.prototype.simulateLeftClick = function (element) {
        var mouseDownEvent = new MouseEvent("mousedown", {
            button: 0,
            bubbles: true,
            cancelable: true
        });
        element.dispatchEvent(mouseDownEvent);
        var mouseUpEvent = new MouseEvent("mouseup", {
            button: 0,
            bubbles: true,
            cancelable: true
        });
        element.dispatchEvent(mouseUpEvent);
    };
    ExecutionFunctions.prototype.calculateDistance = function (pos1, pos2) {
        var dx = pos2.x - pos1.x;
        var dy = pos2.y - pos1.y;
        var dz = pos2.z - pos1.z;
        return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2) + Math.pow(dz, 2));
    };
    ExecutionFunctions.prototype.simulateRightClick = function (element) {
        var mouseDownEvent = new MouseEvent("mousedown", {
            button: 2,
            bubbles: true,
            cancelable: true
        });
        element.dispatchEvent(mouseDownEvent);
        var mouseUpEvent = new MouseEvent("mouseup", {
            button: 2,
            bubbles: true,
            cancelable: true
        });
        element.dispatchEvent(mouseUpEvent);
    };
    ExecutionFunctions.prototype.distanceBetween = function (point1, point2) {
        var dx = point2[0] - point1[0];
        var dy = point2[1] - point1[1];
        var dz = point2[2] - point1[2];
        return dx * dx + dy * dy + dz * dz;
    };
    ExecutionFunctions.prototype.setDir = function (facing) {
        var heading = Math.atan2(facing[0], facing[2]);
        var pitch = Math.asin(-facing[1]);
        config.noaInstance.camera.heading = heading;
        config.noaInstance.camera.pitch = pitch;
        //cam(heading, pitch);
    };
    ExecutionFunctions.prototype.distanceBetweenSqrt = function (point1, point2) {
        return Math.sqrt(this.distanceBetween(point1, point2));
    };
    ExecutionFunctions.prototype.ChangeCrouchSpeed = function (speed) {
        config.noaInstance.serverSettings.crouchingSpeed = speed;
    };
    ExecutionFunctions.prototype.ChangeWalkSpeed = function (speed) {
        config.noaInstance.serverSettings.walkingSpeed = speed;
    };
    ExecutionFunctions.prototype.InstantRespawn = function () {
        var _a;
        if (config.noaInstance) {
            config.noaInstance.serverSettings.secsToRespawn = 0;
            (_a = document.querySelector(".NewButton.BlueButton.RespawnButton")) === null || _a === void 0 ? void 0 : _a.click();
        }
    };
    ExecutionFunctions.prototype.normalizeVector = function (vector) {
        var magnitude = vector[0] * vector[0] + vector[1] * vector[1] + vector[2] * vector[2];
        if (magnitude > 0) {
            var invMagnitude = 1 / Math.sqrt(magnitude);
            return [vector[0] * invMagnitude, vector[1] * invMagnitude, vector[2] * invMagnitude];
        }
        return vector;
    };
    ExecutionFunctions.prototype.killaura = function (range) {
        var targets = getAttackablePlayers();
        if (targets.length === 0) {
            addOutput("No targets found");
            return;
        }
        var nearestTarget = getNearestTarget(targets);
        var playerPosition = config.noaInstance.ents.getPosition(config.noaInstance.playerEntity);
        var targetPosition = config.noaInstance.ents.getPositionData(nearestTarget).position;
        if (Utilities.distanceBetweenSqrt(playerPosition, targetPosition) <= 5) {
            var originalDirection = config.noaInstance.camera._dirVector;
            config.noaInstance.camera._dirVector = Utilities.normalizeVector([
                targetPosition[0] - playerPosition[0],
                targetPosition[1] - playerPosition[1],
                targetPosition[2] - playerPosition[2]
            ]);
            var canvasElement = document.querySelector("#noa-canvas");
            if (canvasElement) {
                this.simulateLeftClick(canvasElement);
            }
            config.noaInstance.camera._dirVector = originalDirection;
        }
    };
    ExecutionFunctions.prototype.removeAllCookies = function () {
        var cookies = document.cookie.split(";");
        for (var _i = 0, cookies_1 = cookies; _i < cookies_1.length; _i++) {
            var cookie = cookies_1[_i];
            var eqPos = cookie.indexOf("=");
            var name_1 = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
            document.cookie = name_1 + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/";
        }
    };
    return ExecutionFunctions;
}());
function getAllPlayers() {
    var _a = config.noaInstance, playerNames = _a.playerNames, playerEntity = _a.playerEntity, ents = _a.ents;
    var playerIds = [];
    for (var key in playerNames) {
        if (playerNames.hasOwnProperty(key)) {
            var id = Number(key);
            if (id !== playerEntity && ents.hasComponent(id, "position") && ents.hasComponent(id, 'genericLifeformState') && ents.genericLifeformState(id).isAlive) {
                playerIds.push(id);
            }
        }
    }
    return playerIds;
}
function getAttackablePlayers() {
    return getAllPlayers().filter(function (id) { var _a; return (_a = config.noaInstance.otherPlayerSettings[config.noaInstance.playerEntity][id]) === null || _a === void 0 ? void 0 : _a.canAttack; });
}
function getNearestTarget(targets) {
    var playerPosition = config.noaInstance.ents.getPosition(config.noaInstance.playerEntity);
    var nearestTarget = undefined;
    var nearestDistance = Infinity;
    for (var _i = 0, targets_1 = targets; _i < targets_1.length; _i++) {
        var target = targets_1[_i];
        var distance = Utilities.distanceBetween(playerPosition, config.noaInstance.ents.getPosition(target));
        if (nearestTarget === undefined || distance < nearestDistance) {
            nearestTarget = target;
            nearestDistance = distance;
        }
    }
    return nearestTarget;
}
var AutoTrigger = false;
var Utilities = new ExecutionFunctions();
var Exploits = [
    {
        type: "Combat",
        title: "Kill Aura",
        desc: "Detects and attacks nearby entities",
        pertick: function (state) {
            if (state) {
                var cDist_1 = 3.5;
                var cPlayer_1 = null;
                config.noaInstance.entities._storage.position.list.forEach(function (p) {
                    if (typeof p.__id !== "number" && p.__id != 1 && p.__id !== config.noaInstance.serverPlayerEntity) {
                        var lifeformState = config.noaInstance.entities.getGenericLifeformState(p.__id);
                        if (lifeformState && lifeformState.isAlive) {
                            var myPos = config.noaInstance.entities.getPosition(1);
                            var enemyPos = p.position;
                            var myPosObj = {
                                x: myPos[0],
                                y: myPos[1],
                                z: myPos[2]
                            };
                            var enemyPosObj = {
                                x: enemyPos[0],
                                y: enemyPos[1],
                                z: enemyPos[2]
                            };
                            if (myPos[0] === enemyPos[0] && myPos[1] === enemyPos[1] && myPos[2] === enemyPos[2]) {
                                return;
                            }
                            var distance = Utilities.calculateDistance(myPosObj, enemyPosObj);
                            if (distance < cDist_1) {
                                cPlayer_1 = enemyPos;
                            }
                        }
                    }
                });
                if (cPlayer_1) {
                    var myPos = config.noaInstance.entities.getPosition(1);
                    var dirVec = [cPlayer_1[0] - myPos[0], cPlayer_1[1] - myPos[1], cPlayer_1[2] - myPos[2]];
                    var normVec = Utilities.normalizeVector(dirVec);
                    Utilities.setDir(normVec);
                    var element = document.querySelector("#noa-canvas");
                    if (element) {
                        element.dispatchEvent(new MouseEvent("mousedown", { button: 0, bubbles: true, cancelable: true }));
                        element.dispatchEvent(new MouseEvent("mouseup", { button: 0, bubbles: true, cancelable: true }));
                    }
                }
            }
        },
    },
    {
        type: "Combat",
        title: "Auto Clicker",
        desc: "Automatically clicks for you",
        pertick: function () {
            if (config.CurrentlyInjected && config.noaInstance) {
                var element = document.querySelector("#noa-canvas");
                if (element) {
                    element.dispatchEvent(new MouseEvent("mousedown", { button: 0, bubbles: true, cancelable: true }));
                    element.dispatchEvent(new MouseEvent("mouseup", { button: 0, bubbles: true, cancelable: true }));
                }
            }
        },
    },
    {
        type: "Combat",
        title: "Anti Shake",
        desc: "Disables camera shake on hit",
        pertick: function (status) {
            if (status) {
                if (config.CurrentlyInjected && config.noaInstance) {
                    config.noaInstance.entities.getState(config.noaInstance.playerEntity, "cameraShake").shakePower = 0;
                }
            }
        }
    },
    {
        type: "Player",
        title: "Scaffold",
        desc: "Automatically places blocks under you. (BROKEN)",
        pertick: function (status) {
            if (status) {
                if (config.CurrentlyInjected && config.noaInstance) {
                    var player = config.noaInstance.playerEntity;
                    var position = config.noaInstance.ents.getPosition(player);
                    var block = config.noaInstance.getBlock(position[0], position[1] - 1, position[2]);
                    var f = config.noaInstance.ents.getInventoryState(config.noaInstance.playerEntity).selectedItem;
                    var ObjID = f && ("CubeBlock" === f.typeObj.type || "TwoDBlock" === f.typeObj.type || "SlabBlock" === f.typeObj.type) ? f.typeObj.id : null;
                    if (block === 0) {
                        var roundedPosition = [
                            Math.floor(position[0]),
                            Math.floor(position[1] - 1),
                            Math.floor(position[2])
                        ];
                        addOutput("Placing block at", roundedPosition.toString());
                        addOutput("Block ID", block);
                        if (ObjID) {
                            sendPacket(PacketType.PLACE_BLOCK, {
                                pos: roundedPosition,
                                toBlock: ObjID,
                                checker: ''
                            });
                            config.noaInstance.setBlock(roundedPosition[0], roundedPosition[1], roundedPosition[2], ObjID);
                        }
                    }
                }
            }
        },
    },
    {
        type: "Player",
        title: "Instant Respawn",
        desc: "Instantly respawns you when you die.",
        pertick: function () {
            if (config.CurrentlyInjected && config.noaInstance) {
                Utilities.InstantRespawn();
            }
        },
    },
    {
        type: "Combat",
        title: "Auto Trigger",
        desc: "Auto trigger for Aimbot (BROKEN)",
        pertick: function (state) {
            AutoTrigger = state;
        }
    },
    {
        type: "Player",
        title: "Account Gen",
        desc: "Generates accounts for you to use. (Requires Refresh)",
        pertick: function () {
            Utilities.removeAllCookies();
            location.reload();
        },
    },
    {
        type: "Combat",
        title: "Aimbot",
        desc: "Automatically aims at the nearest player.",
        pertick: function (state) {
            function normalizeVector(vector) {
                var magnitude = Math.sqrt(Math.pow(vector[0], 2) + Math.pow(vector[1], 2) + Math.pow(vector[2], 2));
                if (magnitude === 0) {
                    return [0, 0, 0];
                }
                return vector.map(function (component) { return component / magnitude; });
            }
            function setDir(facing) {
                var heading = Math.atan2(facing[0], facing[2]);
                var pitch = Math.asin(-facing[1]);
                config.noaInstance.camera.heading = heading;
                config.noaInstance.camera.pitch = pitch;
                //cam(heading, pitch);
            }
            function calculateDistance(pos1, pos2) {
                var dx = pos2.x - pos1.x;
                var dy = pos2.y - pos1.y;
                var dz = pos2.z - pos1.z;
                return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2) + Math.pow(dz, 2));
            }
            if (!state) {
                return;
            }
            var cPlayer = null;
            var cDist = Infinity;
            config.noaInstance.entities._storage.position.list.forEach(function (p) {
                if (typeof p.__id !== "number" && p.__id != 1 && p.__id !== config.noaInstance.serverPlayerEntity) {
                    var lifeformState = config.noaInstance.entities.getGenericLifeformState(p.__id);
                    if (lifeformState && lifeformState.isAlive) {
                        var myPos = config.noaInstance.entities.getPosition(1);
                        var enemyPos = p.position;
                        var myPosObj = {
                            x: myPos[0],
                            y: myPos[1],
                            z: myPos[2]
                        };
                        var enemyPosObj = {
                            x: enemyPos[0],
                            y: enemyPos[1],
                            z: enemyPos[2]
                        };
                        if (myPos[0] === enemyPos[0] && myPos[1] === enemyPos[1] && myPos[2] === enemyPos[2]) {
                            return;
                        }
                        var distance = calculateDistance(myPosObj, enemyPosObj);
                        if (distance < cDist) {
                            cDist = distance;
                            cPlayer = enemyPos;
                        }
                    }
                }
            });
            if (cPlayer && cDist <= 20) {
                var myPos = config.noaInstance.entities.getPosition(1);
                var dirVec = [cPlayer[0] - myPos[0], cPlayer[1] - myPos[1], cPlayer[2] - myPos[2]];
                var normVec = normalizeVector(dirVec);
                setDir(normVec);
                if (AutoTrigger) {
                    config.noaInstance.ents.getHeldItem(config.noaInstance.playerEntity).upFirePrimary();
                }
            }
        }
    },
    {
        type: "Movement",
        title: "Auto Sprint",
        desc: "Automatically sprints when moving.",
        pertick: function () {
            if (config.CurrentlyInjected && config.noaInstance) {
                Utilities.ChangeWalkSpeed(config.noaInstance.serverSettings.runningSpeed);
            }
        },
    },
    {
        type: "Movement",
        title: "Fast Crouch",
        desc: "Increase crouching speed.",
        pertick: function (status) {
            if (status) {
                if (config.CurrentlyInjected && config.noaInstance) {
                    Utilities.ChangeCrouchSpeed(config.noaInstance.serverSettings.runningSpeed);
                }
            }
            else {
                if (config.CurrentlyInjected && config.noaInstance) {
                    Utilities.ChangeCrouchSpeed(2);
                }
            }
        },
    },
    {
        type: "Movement",
        title: "Auto Speed",
        desc: "Increase walking speed.",
        pertick: function (status) {
            if (status) {
                if (config.CurrentlyInjected && config.noaInstance) {
                    Utilities.ChangeWalkSpeed(7.4);
                }
            }
            else {
                if (config.CurrentlyInjected && config.noaInstance) {
                    Utilities.ChangeWalkSpeed(4.5);
                }
            }
        },
    },
    {
        type: "Movement",
        title: "Infinite Jump",
        desc: "Jump infinitely. (only works going up blocks)",
        pertick: function (status) {
            if (status) {
                if (config.CurrentlyInjected && config.noaInstance) {
                    config.noaInstance.serverSettings.airJumpCount = Infinity;
                }
            }
            else {
                if (config.CurrentlyInjected && config.noaInstance) {
                    config.noaInstance.serverSettings.airJumpCount = 0;
                }
            }
        },
    },
    {
        type: "Exploit",
        title: "Spider (VERY EXPERIMENTAL)",
        desc: "Climb walls.",
        pertick: function (status) {
            if (status) {
                if (config.CurrentlyInjected && config.noaInstance) {
                    var noa = config.noaInstance;
                    var player = noa.playerEntity;
                    var position = noa.ents.getPosition(player); // [x, y, z]
                    var x = position[0];
                    var y = position[1];
                    var z = position[2];
                    var blockInFront = noa.getBlock(x, y, z + 1);
                    if (blockInFront !== 0) {
                        noa.ents.getPhysicsBody(player).applyImpulse([0, noa.serverSettings.jumpAmount * 0.03, 0]);
                    }
                }
            }
        },
    }
];


;// ./Saves/Save.ts
var Save_SaveManager = /** @class */ (function () {
    function SaveManager() {
    }
    SaveManager.saveBoolean = function (key, value, overwrite) {
        if (overwrite === void 0) { overwrite = true; }
        if (overwrite || localStorage.getItem(key) === null) {
            localStorage.setItem(key, JSON.stringify(value));
        }
    };
    SaveManager.importBoolean = function (key) {
        var value = localStorage.getItem(key);
        return value ? JSON.parse(value) : false;
    };
    SaveManager.saveString = function (key, value) {
        localStorage.setItem(key, value);
    };
    SaveManager.importString = function (key) {
        return localStorage.getItem(key);
    };
    SaveManager.saveObject = function (key, value) {
        localStorage.setItem(key, JSON.stringify(value));
    };
    SaveManager.importObject = function (key) {
        var value = localStorage.getItem(key);
        return value ? JSON.parse(value) : null;
    };
    return SaveManager;
}());


;// ./UI/Keybinds.ts
var loadKeybinds = function () {
    var savedKeybinds = localStorage.getItem('keybinds');
    if (savedKeybinds) {
        return JSON.parse(savedKeybinds);
    }
    else {
        return [
            {
                Module: "Kill Aura",
                Keybind: "",
                KeybindCode: "",
            },
            {
                Module: "Aimbot",
                Keybind: "",
                KeybindCode: "",
            },
            {
                Module: "Auto Clicker",
                Keybind: "",
                KeybindCode: "",
            },
            {
                Module: "Scaffold",
                Keybind: "",
                KeybindCode: "",
            },
            {
                Module: "Auto Trigger",
                Keybind: "",
                KeybindCode: "",
            },
            {
                Module: "Auto Sprint",
                Keybind: "",
                KeybindCode: "",
            },
            {
                Module: "Fast Crouch",
                Keybind: "",
                KeybindCode: "",
            },
            {
                Module: "Infinite Jump",
                Keybind: "",
                KeybindCode: "",
            },
            {
                Module: "Auto Speed",
                Keybind: "",
                KeybindCode: "",
            },
        ];
    }
};
var Keybinds = loadKeybinds();
function ChangeKeybind(Module, Key, KeyCode) {
    for (var _i = 0, Keybinds_1 = Keybinds; _i < Keybinds_1.length; _i++) {
        var element = Keybinds_1[_i];
        if (element.Module === Module) {
            element.Keybind = Key !== null ? Key : element.Keybind;
            element.KeybindCode = KeyCode !== null ? KeyCode : element.KeybindCode;
        }
    }
    localStorage.setItem('keybinds', JSON.stringify(Keybinds));
}


;// ./UI/UI.ts
// Imports





// UI
var UI_link = document.createElement('link');
UI_link.rel = 'stylesheet';
UI_link.href = 'https://fonts.googleapis.com/css2?family=Gabarito:wght@400;500&display=swap';
var UI_frame = document.createElement('div');
UI_frame.style.cssText = 'position:fixed;top:10px;right:10px;width:697.5px;height:448.5px;background-color:transparent;border-radius:10px;overflow:hidden;z-index:2147483646';
var rightImage = document.createElement('img');
rightImage.src = 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/RightMelon.png?raw=true';
rightImage.style.cssText = 'width:697.5px;height:448.5px';
rightImage.style.position = 'relative';
var leftImage = document.createElement('img');
leftImage.src = 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/LeftMelon.png?raw=true';
leftImage.style.cssText = 'position:fixed;top:10px;right:495px;width:217.5px;height:448.5px;z-index:2147483646';
var melonHubText = document.createElement('div');
melonHubText.innerText = 'Melon Hub';
melonHubText.style.cssText = 'position:absolute; top: 20px; left: 34px; font-family: Inter, sans-serif; font-size: 22px; font-weight: 500; color: white; z-index: 2147483647;';
var versionText = document.createElement('div');
versionText.innerText = '1.0';
versionText.style.cssText = 'position:absolute; top: 20px; left: 145px; font-family: Inter, sans-serif; font-size: 14px; font-weight: 300; color: white; z-index: 2147483647;';
var buttonContainer = document.createElement('div');
buttonContainer.style.cssText = 'position:absolute;top:60px;left:-25px;width:217.5px;height:448.5px;z-index:2147483651;';
var rightButtonContainer = document.createElement('div');
rightButtonContainer.id = 'rightButtonContainer';
rightButtonContainer.style.cssText = 'position: absolute; top: 50px; right: 10px; width: 470px; height: 380px; z-index: 2147483649; overflow-y: auto; overflow-x: hidden; padding-right: 10px; box-sizing: border-box;';
var miniConsole = document.createElement('div');
miniConsole.id = 'miniConsole';
miniConsole.style.cssText = 'position: absolute; top: 40px; right: 5px; width: 470px; height: 380px; background-color: black; color: green; overflow-y: auto; padding: 10px; box-sizing: border-box; font-family: monospace; font-size: 14px; border: 2px solid gray; border-radius: 10px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); display: none; z-index: 20000000000;';
var injectionStatus = document.createElement("div");
injectionStatus.id = 'injectionStatus';
injectionStatus.style.cssText =
    "position:absolute;bottom:5px;right:5px;width:15px;height:15px;background:red;border-radius:50%;";
// Create UI
document.head.appendChild(UI_link); // frame
UI_frame.appendChild(rightImage); // frame
UI_frame.appendChild(leftImage); // frame
UI_frame.appendChild(melonHubText); // title
UI_frame.appendChild(versionText); // version
UI_frame.appendChild(buttonContainer); // buttons
UI_frame.appendChild(rightButtonContainer); // right buttons
UI_frame.appendChild(miniConsole); // debug console
UI_frame.appendChild(injectionStatus); // injection status
document.body.appendChild(UI_frame);
// Intercept Sockets
interceptSockets();
// Debug Console
var logs = [];
function addOutput() {
    var args = [];
    for (var _i = 0; _i < arguments.length; _i++) {
        args[_i] = arguments[_i];
    }
    var text = args.join(' ');
    var output = document.createElement('div');
    output.textContent = "> ".concat(text);
    output.style.color = 'green';
    output.style.marginBottom = '5px';
    miniConsole.appendChild(output);
    miniConsole.scrollTop = miniConsole.scrollHeight;
    logs.push({ text: text, type: 'output' });
}
function addError() {
    var args = [];
    for (var _i = 0; _i < arguments.length; _i++) {
        args[_i] = arguments[_i];
    }
    var text = args.join(' ');
    var output = document.createElement('div');
    output.textContent = "> ".concat(text);
    output.style.color = 'red';
    output.style.marginBottom = '5px';
    miniConsole.appendChild(output);
    miniConsole.scrollTop = miniConsole.scrollHeight;
    logs.push({ text: text, type: 'error' });
}
function reapplyLogs() {
    miniConsole.innerHTML = '';
    logs.forEach(function (log) {
        if (log.type === 'output') {
            addOutput(log.text);
        }
        else if (log.type === 'error') {
            addError(log.text);
        }
    });
}
// Dragging
var isDragging = false;
var offsetX = 0;
var offsetY = 0;
UI_frame.addEventListener('mousedown', function (e) {
    isDragging = true;
    offsetX = e.clientX - UI_frame.getBoundingClientRect().left;
    offsetY = e.clientY - UI_frame.getBoundingClientRect().top;
    UI_frame.style.cursor = 'grabbing';
});
document.addEventListener('mousemove', function (e) {
    if (isDragging) {
        var newLeft = "".concat(e.clientX - offsetX, "px");
        var newTop = "".concat(e.clientY - offsetY, "px");
        UI_frame.style.left = newLeft;
        UI_frame.style.top = newTop;
        leftImage.style.left = "".concat(e.clientX - offsetX, "px");
        leftImage.style.top = "".concat(e.clientY - offsetY, "px");
    }
});
document.addEventListener('mouseup', function () {
    isDragging = false;
    UI_frame.style.cursor = 'default';
});
// Functions
var buttonStateTable = {};
function createRightButton(title, secondTitle, additionalInfo, onClick) {
    var btn = document.createElement("div");
    btn.style.cssText = "\n  position:relative;width:450px;height:75px;margin-bottom:10px;border-radius: 10px; right: -5px;\n  transition:transform 0.2s;cursor:pointer;\n  background:url('https://raw.githubusercontent.com/OfficiallyMelon/files-cdn/refs/heads/main/bloxd-ui/ButtonHolder.png') no-repeat center/cover;\n  transform-origin: top;\n";
    btn.onmouseenter = function () { return (btn.style.transform = "scaleY(1.05)"); };
    btn.onmouseleave = function () { return (btn.style.transform = "scaleY(1)"); };
    var titleContainer = document.createElement("div");
    titleContainer.style.cssText = "position:absolute;top:5px;left:5px;display:flex;align-items:center;";
    btn.appendChild(titleContainer);
    var titleText = document.createElement("div");
    titleText.innerText = title;
    titleText.style.cssText =
        "font-family:Gabarito,sans-serif;font-size:16px;font-weight:500;color:white;";
    titleContainer.appendChild(titleText);
    var secondTitleText = document.createElement("div");
    secondTitleText.innerText = secondTitle;
    secondTitleText.style.cssText =
        "margin-left:5px;font-family:Gabarito,sans-serif;font-size:13px;font-weight:400;color:rgba(255, 255, 255, 0.56);";
    titleContainer.appendChild(secondTitleText);
    var descriptionText = document.createElement("div");
    descriptionText.innerText = additionalInfo;
    descriptionText.style.cssText =
        "position:absolute;top:50px;left:5px;font-family:Gabarito,sans-serif;font-size:14px;font-weight:400;color:rgba(255, 255, 255, 0.71);";
    btn.appendChild(descriptionText);
    var redCircle = document.createElement("div");
    redCircle.style.cssText =
        "position:absolute;bottom:5px;right:5px;width:15px;height:15px;background:red;border-radius:50%;";
    btn.appendChild(redCircle);
    if (!(title in buttonStateTable)) {
        buttonStateTable[title] = false;
    }
    redCircle.style.backgroundColor = buttonStateTable[title] ? "green" : "red";
    var intervalId;
    Keybinds.forEach(function (keybind) {
        if (keybind.Module === title) {
            console.log("keybind");
            document.addEventListener('keydown', function (event) {
                console.log(event.key, keybind.Keybind);
                if (event.key !== keybind.Keybind) {
                    return;
                }
                if (keybind.KeybindCode.length > 0 && event.code !== keybind.KeybindCode) {
                    return;
                }
                console.log(keybind.Keybind);
                buttonStateTable[title] = !buttonStateTable[title];
                redCircle.style.backgroundColor = buttonStateTable[title] ? "green" : "red";
                if (intervalId === undefined) {
                    intervalId = window.setInterval(function () {
                        onClick(buttonStateTable[title]);
                    }, 1);
                }
                else {
                    window.clearInterval(intervalId);
                    intervalId = undefined;
                }
                addOutput("Toggled", title, "to", buttonStateTable[title] ? "on" : "off");
            });
        }
    });
    btn.onclick = function () {
        buttonStateTable[title] = !buttonStateTable[title];
        Save_SaveManager.saveObject('buttonStates', buttonStateTable);
        if (!Save_SaveManager.importBoolean(title)) {
            Save_SaveManager.saveBoolean(title, buttonStateTable[title], true);
        }
        redCircle.style.backgroundColor = buttonStateTable[title] ? "green" : "red";
        addOutput("Toggled", title, "to", buttonStateTable[title] ? "on" : "off");
        if (title === "Account Gen") {
            if (intervalId === undefined) {
                onClick(buttonStateTable[title]);
                intervalId = window.setTimeout(function () { }, 1);
            }
        }
        else {
            if (intervalId === undefined) {
                if (config.noaInstance) {
                    intervalId = window.setInterval(function () {
                        onClick(buttonStateTable[title]);
                    }, 1);
                }
            }
            else {
                window.clearInterval(intervalId);
                intervalId = undefined;
            }
        }
    };
    return btn;
}
function createRightSliderButton(title, secondTitle, additionalInfo, onClick, minSliderValue, maxSliderValue) {
    var btn = document.createElement("div");
    btn.style.cssText = "\n  position:relative;width:450px;height:100px;margin-bottom:10px;border-radius: 10px; right: -5px;\n  transition:transform 0.2s;cursor:pointer;\n  background:url('https://raw.githubusercontent.com/OfficiallyMelon/files-cdn/refs/heads/main/bloxd-ui/ButtonHolder.png') no-repeat center/cover;\n  transform-origin: top;\n";
    btn.onmouseenter = function () { return (btn.style.transform = "scaleY(1.05)"); };
    btn.onmouseleave = function () { return (btn.style.transform = "scaleY(1)"); };
    var titleContainer = document.createElement("div");
    titleContainer.style.cssText = "position:absolute;top:5px;left:5px;display:flex;align-items:center;";
    btn.appendChild(titleContainer);
    var titleText = document.createElement("div");
    titleText.innerText = title;
    titleText.style.cssText =
        "font-family:Gabarito,sans-serif;font-size:16px;font-weight:500;color:white;";
    titleContainer.appendChild(titleText);
    var secondTitleText = document.createElement("div");
    secondTitleText.innerText = secondTitle;
    secondTitleText.style.cssText =
        "margin-left:5px;font-family:Gabarito,sans-serif;font-size:13px;font-weight:400;color:rgba(255, 255, 255, 0.56);";
    titleContainer.appendChild(secondTitleText);
    var descriptionText = document.createElement("div");
    descriptionText.innerText = additionalInfo;
    descriptionText.style.cssText =
        "position:absolute;top:50px;left:5px;font-family:Gabarito,sans-serif;font-size:14px;font-weight:400;color:rgba(255, 255, 255, 0.71);";
    btn.appendChild(descriptionText);
    var slider = document.createElement("input");
    slider.type = "range";
    slider.min = minSliderValue.toString();
    slider.max = maxSliderValue.toString();
    slider.value = minSliderValue.toString();
    slider.style.cssText = "position:absolute;bottom:5px;right:5px;width:200px;";
    btn.appendChild(slider);
    slider.oninput = function () {
        var newSliderValue = parseInt(slider.value, 10);
        onClick(newSliderValue);
    };
    btn.onclick = function () {
        buttonStateTable[title] = !buttonStateTable[title];
        SaveManager.saveObject('buttonStates', buttonStateTable);
        var newSliderValue = parseInt(slider.value, 10);
        onClick(newSliderValue);
    };
    return btn;
}
function createRightThemeButton(title, secondTitle, additionalInfo, onClick) {
    var btn = document.createElement("div");
    btn.style.cssText = "\n  position:relative;width:450px;height:75px;margin-bottom:10px;border-radius: 10px; right: -5px;\n  transition:transform 0.2s;cursor:pointer;\n  background:url('https://raw.githubusercontent.com/OfficiallyMelon/files-cdn/refs/heads/main/bloxd-ui/ButtonHolder.png') no-repeat center/cover;\n  transform-origin: top;\n";
    btn.onmouseenter = function () { return (btn.style.transform = "scaleY(1.05)"); };
    btn.onmouseleave = function () { return (btn.style.transform = "scaleY(1)"); };
    var titleContainer = document.createElement("div");
    titleContainer.style.cssText = "position:absolute;top:5px;left:5px;display:flex;align-items:center;";
    btn.appendChild(titleContainer);
    var titleText = document.createElement("div");
    titleText.innerText = title;
    titleText.style.cssText =
        "font-family:Gabarito,sans-serif;font-size:16px;font-weight:500;color:white;";
    titleContainer.appendChild(titleText);
    var secondTitleText = document.createElement("div");
    secondTitleText.innerText = secondTitle;
    secondTitleText.style.cssText =
        "margin-left:5px;font-family:Gabarito,sans-serif;font-size:13px;font-weight:400;color:rgba(255, 255, 255, 0.56);";
    titleContainer.appendChild(secondTitleText);
    var descriptionText = document.createElement("div");
    descriptionText.innerText = additionalInfo;
    descriptionText.style.cssText =
        "position:absolute;top:50px;left:5px;font-family:Gabarito,sans-serif;font-size:14px;font-weight:400;color:rgba(255, 255, 255, 0.71);";
    btn.appendChild(descriptionText);
    if (!(title in buttonStateTable)) {
        buttonStateTable[title] = false;
    }
    btn.onclick = function () {
        buttonStateTable[title] = !buttonStateTable[title];
        Save_SaveManager.saveObject('buttonStates', buttonStateTable);
        onClick();
    };
    return btn;
}
function createKeybindButton(title, secondTitle, additionalInfo) {
    var _a;
    var btn = document.createElement("div");
    btn.style.cssText = "\n  position:relative;width:450px;height:75px;margin-bottom:10px;border-radius: 10px; right: -5px;\n  transition:transform 0.2s;cursor:pointer;\n  background:url('https://raw.githubusercontent.com/OfficiallyMelon/files-cdn/refs/heads/main/bloxd-ui/ButtonHolder.png') no-repeat center/cover;\n  transform-origin: top;\n";
    btn.onmouseenter = function () { return (btn.style.transform = "scaleY(1.05)"); };
    btn.onmouseleave = function () { return (btn.style.transform = "scaleY(1)"); };
    var titleContainer = document.createElement("div");
    titleContainer.style.cssText = "position:absolute;top:5px;left:5px;display:flex;align-items:center;";
    btn.appendChild(titleContainer);
    var titleText = document.createElement("div");
    titleText.innerText = title;
    titleText.style.cssText =
        "font-family:Gabarito,sans-serif;font-size:16px;font-weight:500;color:white;";
    titleContainer.appendChild(titleText);
    var secondTitleText = document.createElement("div");
    secondTitleText.innerText = secondTitle;
    secondTitleText.style.cssText =
        "margin-left:5px;font-family:Gabarito,sans-serif;font-size:13px;font-weight:400;color:rgba(255, 255, 255, 0.56);";
    titleContainer.appendChild(secondTitleText);
    var descriptionText = document.createElement("div");
    descriptionText.innerText = additionalInfo;
    descriptionText.style.cssText =
        "position:absolute;top:50px;left:5px;font-family:Gabarito,sans-serif;font-size:14px;font-weight:400;color:rgba(255, 255, 255, 0.71);";
    btn.appendChild(descriptionText);
    var currentKeybind = ((_a = Keybinds.find(function (bind) { return bind.Module === title; })) === null || _a === void 0 ? void 0 : _a.Keybind) || "None";
    var keybindBox = document.createElement("div");
    keybindBox.innerText = currentKeybind;
    keybindBox.style.cssText = "\n  position: absolute;\n  bottom: 5px;\n  right: 5px;\n  width: 50px;\n  height: 20px;\n  background: rgba(0, 0, 0, 0.5);\n  color: white;\n  font-family: Gabarito, sans-serif;\n  font-size: 12px;\n  font-weight: 400;\n  text-align: center;\n  line-height: 20px;\n  border-radius: 5px;\n  cursor: pointer;\n";
    btn.appendChild(keybindBox);
    btn.onclick = function () {
        document.addEventListener("keydown", function (event) {
            ChangeKeybind(title, event.key.toString(), event.code ? event.code.toString() : "");
            keybindBox.innerText = event.key.toUpperCase();
        }, { once: true });
    };
    keybindBox.onclick = function (event) {
        event.stopPropagation();
        ChangeKeybind(title, "", "");
        keybindBox.innerText = "None";
    };
    return btn;
}
function createButton(button, index, buttonContainer) {
    var btn = document.createElement('img');
    btn.src = button.src;
    btn.style.cssText = "\n    position: absolute;\n    width: 104px;\n    height: 23.3px;\n    left: 50%;\n    transform: translateX(-50%);\n    top: ".concat(15 + index * 35, "px;\n    z-index: 2147483652;\n    transition: transform 0.2s, scale 0.2s;\n    cursor: pointer;\n  ");
    btn.addEventListener('mouseenter', function () {
        btn.style.transform = 'translateX(-50%) scale(1.05)';
    });
    btn.addEventListener('mouseleave', function () {
        btn.style.transform = 'translateX(-50%) scale(1)';
    });
    btn.addEventListener('click', button.onClick);
    buttonContainer.appendChild(btn);
}
function ButtonType(BTN_TYPE) {
    if (BTN_TYPE === void 0) { BTN_TYPE = ""; }
    console.log("active" + BTN_TYPE);
    var rightButtonContainer = document.getElementById("rightButtonContainer");
    if (!rightButtonContainer)
        return;
    while (rightButtonContainer.firstChild) {
        rightButtonContainer.removeChild(rightButtonContainer.firstChild);
    }
    if (BTN_TYPE === "Debug") {
        miniConsole.style.display = 'block';
    }
    else {
        miniConsole.style.display = 'none';
    }
    if (BTN_TYPE === "Themes") {
        themes.forEach(function (theme) {
            rightButtonContainer.appendChild(createRightThemeButton(theme.name, "(Theme)", theme.desc, function () {
                addOutput("Theme", theme.name, "is now active.");
                leftImage.src = theme.LeftImage;
                rightImage.src = theme.RightImage;
                Save_SaveManager.saveString('activeTheme', theme.name);
            }));
        });
    }
    if (BTN_TYPE === "Settings") {
        Exploits.forEach(function (exploit) {
            rightButtonContainer.appendChild(createKeybindButton(exploit.title, "Keybind", "Change keybind"));
        });
    }
    Exploits.forEach(function (exploit) {
        if (exploit.type === BTN_TYPE || BTN_TYPE === "") {
            rightButtonContainer.appendChild(createRightButton(exploit.title, "(".concat(exploit.type, ")"), exploit.desc, exploit.pertick));
        }
    });
}
var themes = [
    {
        name: "(Default) Melon Hub",
        LeftImage: "https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/LeftMelon.png?raw=true",
        RightImage: "https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/RightMelon.png?raw=true",
        desc: "The default Melon Hub theme.",
    },
    {
        name: "Netflix",
        LeftImage: "https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/LeftNetflix.png?raw=true",
        RightImage: "https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/RIghtNetflix.png?raw=true",
        desc: "Netflix theme including Red and Black colors, and Netlix logos.",
    },
    {
        name: "McDonalds",
        LeftImage: "https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/LeftMaccas.png?raw=true",
        RightImage: "https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/RightMaccas.png?raw=true",
        desc: "I ran out of theme ideas lmao"
    },
    {
        name: "Minecraft",
        LeftImage: "https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/LeftMinecraft.png?raw=true",
        RightImage: "https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/RightMinecraft.png?raw=true",
        desc: "Minecraft theme including grass and dirt blocks."
    },
    {
        name: "Hatsune Miku",
        LeftImage: "https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/LeftMiku.png?raw=true",
        RightImage: "https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/RightMiku.png?raw=true",
        desc: "I'm thinking Miku, Miku, oo-ee-oo"
    }
];
var buttonData = [
    {
        src: 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/AllBTN.png?raw=true',
        style: 'top:15px;',
        onClick: function () { return ButtonType(""); },
    },
    {
        src: 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/CombatBTN.png?raw=true',
        style: 'top:72px;',
        onClick: function () { return ButtonType("Combat"); },
    },
    {
        src: 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/MovementBTN.png?raw=true',
        style: 'top:119px;',
        onClick: function () { return ButtonType("Movement"); },
    },
    {
        src: 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/PlayerBTN.png?raw=true',
        style: 'top:166px;',
        onClick: function () { return ButtonType("Player"); },
    },
    {
        src: 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/ExploitBTN.png?raw=true',
        style: 'top:213px;',
        onClick: function () { return ButtonType("Exploit"); },
    },
    {
        src: 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/OtherBTN.png?raw=true',
        style: 'top:260px;',
        onClick: function () { return ButtonType("Other"); },
    },
    {
        src: 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/SettingsBTN.png?raw=true',
        style: 'top:354px;',
        onClick: function () { return ButtonType("Settings"); },
    },
    {
        src: 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/ThemesBTN.png?raw=true',
        style: 'top:401px;',
        onClick: function () { return ButtonType("Themes"); },
    },
    {
        src: 'https://github.com/OfficiallyMelon/Melon-Hub/blob/main/Assets/bloxd.io/DebugBTN.png?raw=true',
        style: 'top:401px;',
        onClick: function () { return ButtonType("Debug"); },
    },
];
buttonData.forEach(function (button, index) {
    var btn = document.createElement('img');
    btn.src = button.src;
    btn.style.cssText = "position: absolute; width: 104px; height: 23.3px; left: 50%; transform: translateX(-50%); top: ".concat(15 + index * 35, "px; z-index: 2147483652; transition: transform 0.2s, scale 0.2s; cursor: pointer;");
    btn.addEventListener('mouseenter', function () { return btn.style.transform = 'translateX(-50%) scale(1.05)'; });
    btn.addEventListener('mouseleave', function () { return btn.style.transform = 'translateX(-50%) scale(1)'; });
    btn.addEventListener('click', button.onClick);
    buttonContainer.appendChild(btn);
});
ButtonType("");
window.ondragstart = function () { return false; };
// Save/Import
var savedTheme = Save_SaveManager.importString('activeTheme');
if (savedTheme) {
    var theme = themes.find(function (t) { return t.name === savedTheme; });
    if (theme) {
        leftImage.src = theme.LeftImage;
        rightImage.src = theme.RightImage;
    }
}


/******/ })()
;