hack

Mod panel with rainbow watermark, unban feature, draggable watermark with saved position, Killaura toggle, and Jesus (walk on water & lava) for bloxd.io

Fra og med 16.09.2025. Se den nyeste version.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         hack
// @namespace    http://tampermonkey.net/
// @version      1.6
// @description  Mod panel with rainbow watermark, unban feature, draggable watermark with saved position, Killaura toggle, and Jesus (walk on water & lava) for bloxd.io
// @author       You
// @match        *://bloxd.io/*
// @grant        none
// ==/UserScript==
(function() {
    'use strict';

    //__START__HACK_CODE_FROM_UGVS_TXT______________________________________________

    let Fuxny = {};
    let defaultAccent = "#00f2ff";

    const TITLE = "Midnight__" //-----------------------Title


    const changeHealthBar = true // --------------------Change health bar color to gradient color
    const spoofRanksEnabled = true; // -----------------Gives you all ranks (YT, Super, Developer)
    const ATTACK_INTERVAL_MS = 20; // -----------------How fast to hit players with triggerbot/killAura    LOW = BAN
    let desiredPotionSlot = 1 //------------------------What slot should potions go to? Numbers start at zero! 0-9
    let spikeSlot = 8 //--------------------------------What slot do spikes automatically go in? 0-9
    let webSlot = 9 //----------------------------------What slot do webs / nets automatically go in? 0-9


    let alreadyConnected = null;
    let colyRoom = null;
    let sendBytesName = null;
    let gameObjects = {};
    let injectedBool = false;
    let myId = 1
    let isInitializing = true;
    let clientOptions = null;
    let noaParent = null;
    let noaKeyInParent = null;
    let blinkState = {
        enabled: false,
        originalSendBytes: null,
        queued: [],
        interval: 0,
        noPacket: false
    };

    let everEnabled = {};

    let wallJumpInterval = null;
    let wallJumpRunning = false;


    let lockPlayerWaterStateInterval = null;
    let waterJumpingEnabled = false


    let wireFramesBool = false;


    let espEnabled = false;

    let chestESPEnabled = false;
    let oreESPEnabled = false;
    let chestOreInterval = null;
    let chestBoxes = {};



    let isSkyboxHidden = false;


    let triggerBotEnabled = false;
    let toggleTriggerBotInterval = null;


    const possibleNames = [
        //"LegLeftMesh",
        //"LegRightMesh",
        //"TorsoNode",
        //"ArmLeftMesh",
        //"ArmRightMesh",
        "BodyMesh",
        'Body|Armour',
        //"HeadMesh"
    ]; // Potential detection: If the player has leg armour there is no way leftLegMesh could have been hit.
    let killAuraEnabled = false
    let killAuraIntervalId = null
    let lastClosestId = null
    let newBox = null;
    let newBoxId = null;
    let __nullKey = null; //Entity enabled key
    let __stringKey = null; //Entity ID key "Then why didn't you just label them that?"
    let animationFrameId = null;
    let hitBoxEnabled = false;
    const hitboxes = {};


    let cachedNameTagParent = null;
    let cachedBHOPParent = null;


    let autoPotionEnabled = false;
    let autoPotionInterval = null;


    let nameTagsEnabled = false;
    let nameTagsIntervalId = null;
    let nameTagParent = null;


    let bhopEnabled = false;
    let bhopIntervalId = null;

    let enemyHealthGuiEnabled = false;
    let healthWatcherInterval = null;
    let lastPercent = null;
    let lastChangeTime = Date.now();
    let resetTimeout = null;


    let eIdKey = null;
    let targetEntity = null;
    let targetEntityDistance = null;


    let pickupReachEnabled = false; //Credits to wang!!!!
    let originalGetEntitiesInAABB = null;
    const RANGE_MULTIPLIER = 5;
    let ghMethodKey = null;
    let proto = null;


    let bhopKnifeEnabled = false;
    let spaceVid;
    let fadeVolumeInterval;
    let spaceHeld = false;
    let bigHeadsEnabled = false;
    let antiBanEnabled = false;


    const scannedChunks = new Set();
    let chunkDataField = null;

    // ETC
    let playerKey = null;
    let moveState = null;
    let physState = null;
    let humanoidMeshlist = null;
    let playerEntity = null;
    let skyboxEntity = null;
    let skyboxMesh = null;
    let bigHeadsInterval = null;
    let scaffoldIntervalId = null;
    let targetFinderId = null;
    let setHealthBar = null;
    let playerInventoryParent = null;


    // Variables and helper functions outside the object
    let distance = 0.1;
    let moveInterval = null;
    let lastUpTime = 0;



    var S = {
        normalizeVector(t) { let e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2]; if (e > 0) { let i = 1 / Math.sqrt(e); return [t[0] * i, t[1] * i, t[2] * i] } return t },
        distanceBetween(t, e) { let i = e[0] - t[0], o = e[1] - t[1], s = e[2] - t[2]; return i * i + o * o + s * s },
        distanceBetweenSqrt(t, e) { return Math.sqrt(this.distanceBetween(t, e)) },
        lerp(t, e, i) { return t + (e - t) * i }
    };
    var D = {
        fakeMouseEvent(t) {
            let e = { button: 0, buttons: 1, clientX: Math.floor(Math.random() * 999 + 1), clientY: Math.floor(Math.random() * 999 + 1), screenX: Math.floor(Math.random() * 999 + 1), screenY: Math.floor(Math.random() * 999 + 1), target: document.querySelector("#noa-container"), type: t, isTrusted: !0, view: window, bubbles: !0, cancelable: !0, timeStamp: performance.now() };
            return e.prototype = MouseEvent.prototype, e
        }
    };
    var C = {
        wpRequire: null, _cachedNoa: null,
        get noa() { return this?._cachedNoa || (this._cachedNoa = r.values(this.bloxdProps).find(t => t?.entities)), this._cachedNoa },
        init() {
            let t = Object.getOwnPropertyDescriptors(window), e = Object.keys(t).find(s => t[s]?.set?.toString().includes("++")), i = window[e] = window[e], o = Math.floor(Math.random() * 9999999 + 1);
            i.push([ [o], {}, s => this.wpRequire = s ]), this.bloxdProps = r.values(this.findModule("nonBlocksClient:")).find(s => typeof s == "object")
        },
        findModule(t) { let e = this.wpRequire.m; for (let i in e) { let o = e[i]; if (o && o.toString().includes(t)) return this.wpRequire(i) } return null }
    }, l = C;
    var I = {
        getPosition(t) { return l.noa.entities.getState(t, "position").position },
        get getMoveState() { return r.values(l.noa.entities)[36] },
        getPhysicsBody(t) { return l.noa.entities.getState(t, "physics").body },
        get registry() { return r.values(l.noa)[17] },
        get getBlockSolidity() { return r.values(this.registry)[5] },
        get getBlockID() { return l.noa.bloxd[Object.getOwnPropertyNames(l.noa.bloxd.constructor.prototype)[3]].bind(l.noa.bloxd) },
        get getHeldItem() { return r.values(l.noa.entities).find(t => t?.length == 1 && t?.toString()?.length < 13 && t?.toString().includes(").")) },
        safeGetHeldItem(t) { let e; try { e = this.getHeldItem(t) } catch {} return e },
        get playerList() { return r.values(l.noa.bloxd.getPlayerIds()).filter(t => t !== 1 && this.safeGetHeldItem(t)).map(t => parseInt(t)) },
        get doAttack() { let t = this.safeGetHeldItem(1); return (t?.doAttack || t.breakingItem.doAttack).bind(t) },
        setVelocity(t = null, e = null, i = null) { let o = this.getPhysicsBody(1), s = r.values(o)[16]; t !== null && (s[0] = t), e !== null && (s[1] = e), i !== null && (s[2] = i) },
        isAlive(t) { return r.values(l.noa.entities)[37](t).isAlive },
        touchingWall() { let t = this.getPosition(1), e = .35, i = [ [0, 0, 0], [e, 0, 0], [-e, 0, 0], [0, 0, e], [0, 0, -e], [e, 0, e], [e, 0, -e], [-e, 0, e], [-e, 0, -e] ], o = [0, 1, 2]; for (let [s, c, d] of i) for (let u of o) { let m = Math.floor(t[0] + s), h = Math.floor(t[1] + c + u), E = Math.floor(t[2] + d), M = this.getBlockID(m, h, E); if (this.getBlockSolidity(M)) return !0 } return !1 }
    };
    var n = { noa: I, mouse: D };

    var r = { //WANG
        keys(e) {
            var t = [],
                o = 0;
            for (var s in e) e != null && (t[o] = s, o++);
            return t
        },
        values(e) {
            for (var t = this.keys(e), o = [], s = 0, i = 0; s < t.length;) {
                var l = t[s],
                    d = e[l];
                o[i] = d, i++, s++
            }
            return o
        },
        assign(e, ...t) {
            let o = Object(e);
            for (let s = 0; s < t.length; s++) {
                let i = t[s];
                if (i != null)
                    for (let l in i) o[l] = i[l]
            }
            return o
        }
    };



    function fadeVolume(from, to, duration) {
        const steps = 30;
        const stepTime = duration / steps;
        let current = 0;

        if (fadeVolumeInterval) clearInterval(fadeVolumeInterval);

        fadeVolumeInterval = setInterval(() => {
            current++;
            const progress = current / steps;
            spaceVid.volume = from + (to - from) * progress;

            if (current >= steps) {
                clearInterval(fadeVolumeInterval);
                fadeVolumeInterval = null;
            }
        }, stepTime * 1000);
    }

    function onKeyDown(e) {
        if (e.code === 'Space' && !spaceHeld) {
            spaceHeld = true;
            spaceVid.style.opacity = '1';
            spaceVid.play();
            fadeVolume(spaceVid.volume, 0.1, 2.5); // fade in to 0.8 over 2 seconds
        }
    }

    function onKeyUp(e) {
        if (e.code === 'Space') {
            spaceHeld = false;
            spaceVid.style.opacity = '0';
            fadeVolume(spaceVid.volume, 0.1, 2.5); //
            setTimeout(() => {
                if (!spaceHeld) spaceVid.pause();
            }, 500);
        }
    }


    function showTemporaryNotification(message, duration = 1500) {
        const defaultBackGroundColor = 'rgba(0, 0, 0, 0.5)'; // semi-transparent black
        const defaultBackGroundBlur = 9;
        const defaultAccent = "#ff0000"; // HEX accent color

        // Create a notification container if it doesn't exist
        let notificationContainer = document.getElementById('notification-container');
        if (!notificationContainer) {
            notificationContainer = document.createElement('div');
            notificationContainer.id = 'notification-container';
            notificationContainer.style.position = 'fixed';
            notificationContainer.style.bottom = '20px';
            notificationContainer.style.right = '20px';
            notificationContainer.style.zIndex = '132';
            document.body.appendChild(notificationContainer);
        }

        // Create notification element
        const notification = document.createElement('div');
        notification.textContent = message;

        // Style the notification
        notification.style.padding = '12px';
        notification.style.color = '#fff';
        notification.style.borderRadius = '4px';
        notification.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.2)';
        notification.style.transition = 'opacity 0.5s ease-in-out, transform 0.5s ease-in-out';
        notification.style.opacity = '0';
        notification.style.transform = 'translateY(20px)';
        notification.style.marginBottom = '10px';
        notification.style.backgroundColor = defaultBackGroundColor;
        notification.style.backdropFilter = `blur(${defaultBackGroundBlur}px)`;

        // Border using accent color
        notification.style.border = `2px solid ${defaultAccent}`;

        // Optional: give it a slight gradient inner glow (if you want it fancier)
        // notification.style.boxShadow = `0 0 12px ${defaultAccent}, 0 4px 8px rgba(0,0,0,0.2)`;

        // Add to container
        notificationContainer.appendChild(notification);

        // Trigger the fade-in effect
        setTimeout(() => {
            notification.style.opacity = '1';
            notification.style.transform = 'translateY(0)';
        }, 10);

        // Set up the fade-out and removal
        setTimeout(() => {
            notification.style.opacity = '0';
            // No translateY(-20px) because you disliked that

            setTimeout(() => {
                notification.remove();
                if (notificationContainer.children.length === 0) {
                    notificationContainer.remove();
                }
            }, 500);
        }, duration);
    }

    function clearESPBoxes() {
        for (const key in chestBoxes) {
            for (const {
                    mesh,
                    id
                } of chestBoxes[key]) {
                mesh.dispose();
                Fuxny.entities.deleteEntity(id);
            }
        }
        scannedChunks.clear();
        chestBoxes = {};
    }

    function reverseIndex(i, stride) {
        const x = Math.floor(i / stride[0]);
        const remX = i % stride[0];
        const y = Math.floor(remX / stride[1]);
        const z = remX % stride[1];
        return [x, y, z];
    }

    function getChunkKey(chunk) {
        const [wx, wy, wz] = chunk.pos || [0, 0, 0];
        const cx = Math.floor(wx / 32);
        const cy = Math.floor(wy / 32);
        const cz = Math.floor(wz / 32);
        return `${cx}|${cy}|${cz}|overworld`;
    }

    function scanChunk(chunk, blockIDs) {
        const blockData = chunk[chunkDataField];
        if (!blockData) return;

        const {
            data,
            stride
        } = blockData;

        const pos = chunk.pos || [0, 0, 0];
        if (!data || !stride) return;

        const chunkKey = getChunkKey(chunk);
        for (let i = 0; i < data.length; i++) {
            const blockID = data[i];
            if (!blockIDs.includes(blockID)) continue;




            const [x, y, z] = reverseIndex(i, stride);
            const worldX = pos[0] + x + 0.5;
            const worldY = pos[1] + y + 0.5;
            const worldZ = pos[2] + z + 0.5;

            const mesh = Fuxny.Lion.Mesh.CreateBox("espbox", 0.5, false, 1, Fuxny.Lion.scene);
            mesh.position.set(worldX, worldY, worldZ);
            mesh.renderingGroupId = 1;

            mesh.material = new Fuxny.Lion.StandardMaterial("mat", Fuxny.Lion.scene)

            const id = Fuxny.entities.add([worldX, worldY, worldZ], null, null, mesh);
            if (!chestBoxes[chunkKey]) chestBoxes[chunkKey] = [];
            chestBoxes[chunkKey].push({
                mesh,
                id
            });


            if ([204, 205, 206, 207].includes(blockID)) {
                console.log("FOUNDCHEST")

                mesh.material.diffuseColor = new Fuxny.Lion.Color3(1, 0.5, 0); // orange
                mesh.material.emissiveColor = new Fuxny.Lion.Color3(1, 0.5, 0); // makes it glow orange
            }
            if (blockID === 45) {
                mesh.material.diffuseColor = new Fuxny.Lion.Color3(0, 0, 1); // blue
                mesh.material.emissiveColor = new Fuxny.Lion.Color3(0, 0, 1); // makes it glow blue
            }

            if (blockID === 465) {
                mesh.material.diffuseColor = new Fuxny.Lion.Color3(0.7, 0.5, 1); // pale purple
                mesh.material.emissiveColor = new Fuxny.Lion.Color3(0.7, 0.5, 1); // makes it glow pale purple
            }




        }
    }

    function scanAllChunks() {
        if (!Fuxny?.world || !Fuxny?.world?.[Fuxny.impKey]?.hash) return;
        const chunkHash = Fuxny.world[Fuxny.impKey].hash;
        // Step 1: Remove boxes for chunks no longer loaded
        for (const scannedKey of scannedChunks) {
            if (!(scannedKey in chestBoxes)) continue;

            if (!Object.values(chunkHash).some(chunk => getChunkKey(chunk) === scannedKey)) {
                // Delete all meshes for this chunk
                for (const {
                        mesh,
                        id
                    } of chestBoxes[scannedKey]) {
                    mesh.dispose(); // remove from scene
                    Fuxny.entities.deleteEntity(id); // remove from entity system if needed
                }
                delete chestBoxes[scannedKey];
                scannedChunks.delete(scannedKey);
            }
        }

        // Step 2: Scan newly loaded chunks
        for (const chunkKey in chunkHash) {

            const chunk = chunkHash[chunkKey];
            if (!chunkDataField) {
                autoDetectChunkDataField(chunk);
                if (!chunkDataField) continue; // Skip if still not found
            }

            const blockData = chunk[chunkDataField];
            if (!blockData?.data || !blockData.stride || !chunk.pos) continue;


            const key = getChunkKey(chunk);
            if (scannedChunks.has(key)) continue;
            scannedChunks.add(key);
            if (chestESPEnabled) scanChunk(chunk, [204, 205, 206, 207]);
            if (oreESPEnabled) scanChunk(chunk, [44, 45, 465, 50]);
        }
    }

    function stopMoving() {
        if (moveInterval) {
            clearInterval(moveInterval);
            moveInterval = null;
        }
    }

    function startMoving() {
        if (moveInterval) return; // Already moving

        moveInterval = setInterval(() => {
            let pos = Fuxny.entities.getState(1, 'position').position;
            let h = Fuxny.camera.heading;
            let p = Fuxny.camera.pitch;

            let newX = pos[0];
            let newY = pos[1];
            let newZ = pos[2];

            const now = Date.now();

            if (p < -1) {
                // Looking up: move up only if 500ms have passed
                if (now - lastUpTime >= 500) {
                    newY += distance + 0.9;
                    lastUpTime = now;
                }
            } else if (p > 1) {
                // Looking down: move down
                newY -= distance;
            } else {
                // Move forward horizontally
                newX += Math.sin(h) * distance;
                newZ += Math.cos(h) * distance;
            }

            Fuxny.entities.setPosition(1, newX, newY, newZ);
        }, 20);
    }

    function dumpAllFunctions(obj, includePrototype = false) {
        const seen = new Set();
        let current = obj;
        let index = 1;

        console.group(`📦 Function Dump`);

        do {
            const props = Object.getOwnPropertyNames(current);
            for (const key of props) {
                if (seen.has(key)) continue;
                seen.add(key);

                try {
                    const val = obj[key];
                    if (typeof val === "function") {
                        console.groupCollapsed(`🔹 [${index++}] ${key}()`);
                        console.log(val.toString());
                        console.groupEnd();
                    }
                } catch (e) {
                    console.warn(`⚠️ Could not access function '${key}':`, e);
                }
            }

            current = includePrototype ? Object.getPrototypeOf(current) : null;

        } while (current && current !== Object.prototype);

        console.groupEnd();
    }

    function searchForTerm(obj, term) {
        const results = [];
        const visited = new WeakSet();

        function recurse(current, path = []) {
            if (typeof current !== 'object' || current === null) return;

            if (visited.has(current)) return;
            visited.add(current);

            for (const key in current) {
                if (!Object.hasOwn(current, key)) continue;

                const value = current[key];
                const keyMatch = key.toLowerCase().includes(term.toLowerCase());
                const valMatch = (
                    typeof value === 'string' ||
                    typeof value === 'number' ||
                    typeof value === 'boolean'
                ) && String(value).toLowerCase().includes(term.toLowerCase());

                if (keyMatch || valMatch) {
                    results.push({
                        path: [...path, key].join('.'),
                        key: key,
                        value: value
                    });
                }

                if (typeof value === 'object' && value !== null) {
                    recurse(value, [...path, key]);
                }
            }
        }

        recurse(obj);
        return results;
    }

    function matchesAllPatterns(fn) {
        const patterns = ["this.names.position", ".base[0]"].map(p => p.replace(/\s+/g, ''));
        try {
            const src = fn.toString().replace(/\s+/g, '');
            return patterns.every(p => src.includes(p));
        } catch {
            return false;
        }
    }

    function findClassConstructor(obj) {
        let current = obj;
        while (current) {
            for (const key of Reflect.ownKeys(current)) {
                let val;
                try {
                    const desc = Object.getOwnPropertyDescriptor(current, key);
                    val = desc?.value ?? current[key];
                } catch {
                    continue;
                }
                if (typeof val === "function" && matchesAllPatterns(val)) {
                    return val;
                }
            }
            current = Object.getPrototypeOf(current);
        }
        return null;
    }

    function findGhMethod(clsConstructor) {
        const protoLocal = clsConstructor?.prototype;
        if (!protoLocal) return null;

        for (const key of Reflect.ownKeys(protoLocal)) {
            if (key === "constructor") continue;
            const fn = protoLocal[key];
            if (typeof fn === "function" && matchesAllPatterns(fn)) {
                return {
                    fn,
                    key
                };
            }
        }
        return null;
    }

    const toggleBlink = (interval = 0, noPacket = false) => {
        blinkState.enabled = !blinkState.enabled;
        blinkState.interval = interval;
        blinkState.noPacket = noPacket;

        if (blinkState.enabled) {
            console.log(`[Blink] ENABLED — interval: ${interval}, noPacket: ${noPacket}`);

            colyRoom[sendBytesName] = (...args) => {

                const [J, T] = args;
                const send = () => blinkState.originalSendBytes.call(colyRoom, J, T);

                if (interval > 0) {
                    setTimeout(send, interval);
                } else {
                    blinkState.queued.push([J, T]);
                }
            };
        } else {
            console.log(`[Blink] DISABLED — sending ${blinkState.queued.length} packets.`);

            for (const [J, T] of blinkState.queued) {
                blinkState.originalSendBytes.call(colyRoom, J, T);
            }

            colyRoom[sendBytesName] = blinkState.originalSendBytes;
            blinkState.queued = [];
        }
    };

    function wangPlace(position) {

        let heldBlock = r.values(Fuxny.noa.entities[Fuxny.impKey])[22].list[0]._blockItem;
        let worldInstanceKey = Object.keys(heldBlock)[0];
        let worldInstance = Object.values(heldBlock)[0];
        let targetedBlockKey = Object.keys(worldInstance)[25];
        let targetedBlock = worldInstance[targetedBlockKey];

        function spoofTargetedBlock(position) {
            return new Proxy({}, {
                get(target, prop, receiver) {
                    if (prop === worldInstanceKey) {
                        return new Proxy(worldInstance, {
                            get(inner, key) {
                                if (key === targetedBlockKey) {
                                    let spoofedTargetedBlock = structuredClone(targetedBlock) || {};
                                    spoofedTargetedBlock.position = position;
                                    return spoofedTargetedBlock;
                                }
                                return worldInstance[key];
                            },
                        });
                    }

                    if (prop == "checkTargetedBlockCanBePlacedOver") {
                        return () => true;
                    }

                    if (typeof heldBlock[prop] == "function") {
                        return heldBlock[prop].bind(heldBlock);
                    } else {
                        return heldBlock[prop];
                    }
                },
            });
        }

        heldBlock.placeBlock.call(spoofTargetedBlock(position));
    }

    function placeToPlayer(position) {

        // Convert to block coordinates by flooring each component
        const blockX = Math.floor(position[0]);
        const blockY = Math.floor(position[1]);
        const blockZ = Math.floor(position[2]);
        if (playerEntity.checkTargetedBlockCanBePlacedOver([blockX, blockY - 3, blockZ]) || r.values(Fuxny.world)[47].call(Fuxny.world, blockX, blockY - 3, blockZ) === 0) {
            wangPlace([blockX, blockY - 3, blockZ])
        }
        if (playerEntity.checkTargetedBlockCanBePlacedOver([blockX, blockY - 2, blockZ]) || r.values(Fuxny.world)[47].call(Fuxny.world, blockX, blockY - 2, blockZ) === 0) {
            wangPlace([blockX, blockY - 2, blockZ])
        }
        if (playerEntity.checkTargetedBlockCanBePlacedOver([blockX, blockY - 1, blockZ]) || r.values(Fuxny.world)[47].call(Fuxny.world, blockX, blockY - 1, blockZ) === 0) {
            wangPlace([blockX, blockY - 1, blockZ])
        }
        if (playerEntity.checkTargetedBlockCanBePlacedOver([blockX, blockY, blockZ]) || r.values(Fuxny.world)[47].call(Fuxny.world, blockX, blockY, blockZ) === 0) {
            wangPlace([blockX, blockY, blockZ])
        }

    }

    function placeSpike(position) {

        // Convert to block coordinates by flooring each component
        const blockX = Math.floor(position[0]);
        const blockY = Math.floor(position[1]);
        const blockZ = Math.floor(position[2]);
        if (playerEntity.checkTargetedBlockCanBePlacedOver([blockX, blockY + 1, blockZ]) || r.values(Fuxny.world)[47].call(Fuxny.world, blockX, blockY + 1, blockZ) === 0) {
            wangPlace([blockX, blockY + 1, blockZ])
        }
    }

    function moveItem(itemName, desiredSlot) {
        if (!playerInventoryParent || !playerInventoryParent.playerInventory?.items) {
            console.warn("❌ playerInventoryParent is not set. Run findAndSavePlayerInventoryParent() first.");
            return false;
        }
        const items = playerInventoryParent.playerInventory.items;
        let oldSlot = null;
        for (let i = 0; i < items.length; i++) {
            const item = items[i];

            if (!item || typeof item.name !== 'string') continue;
            const name = item.name.toLowerCase();
            if (name.includes(itemName)) {


                oldSlot = i;
                break;
            }
        }
        if (oldSlot === null) {
            console.warn(`❌ No ${itemName} found in slot 10 or higher.`);
            return false;
        }
        console.log(`🔁 Swapping ${itemName} from slot ${oldSlot} with slot ${desiredSlot}`);
        playerInventoryParent.swapPosClient(oldSlot, desiredSlot, null);
        return true;
    }

    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }

    function bunnyHop() {
        if (!physState.isOnGround?.() || moveState.crouching || moveState.speed < 0.05) return;
        moveState.jumping = true;
        physState._hadJumpInputPrevTick = false;
        setTimeout(() => {
            moveState.jumping = false;
        }, 20);
    }

    function waitForElement(selector, callback) {
        if (alreadyConnected) {
            injectButton.disabled = false;
            injectButton.textContent = "Click if game loaded."
            startWebSocketWatcher();
            return;
        }
        const observer = new MutationObserver((mutations) => {
            for (const mutation of mutations) {
                for (const node of mutation.addedNodes) {
                    if (node.nodeType === 1 && node.matches(selector)) {
                        observer.disconnect();
                        callback(node);
                        return;
                    }
                }
            }
        });

        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    }

    async function autoSW() {
        if (lastClosestId && targetEntityDistance <= 36) { // place web then spikes

            if (moveItem("net", webSlot) || moveItem("web", webSlot)) {
                let enemyPos = Fuxny.entities.getState(lastClosestId, 'position').position;

                Fuxny.noa.inputs.down['_events'][`HotBarSlot${webSlot + 1}`]();

                placeToPlayer(enemyPos);

                await sleep(50); // delay before switching to spikes

                if (moveItem("spikes", spikeSlot)) {
                    Fuxny.noa.inputs.down['_events'][`HotBarSlot${spikeSlot + 1}`]();
                    placeSpike(enemyPos);
                }
            } else { // just place spikes
                if (moveItem("spikes", spikeSlot)) {
                    Fuxny.noa.inputs.down['_events'][`HotBarSlot${spikeSlot + 1}`]();
                    await sleep(50);

                    let enemyPos = Fuxny.entities.getState(lastClosestId, 'position').position;
                    placeToPlayer(enemyPos);
                } else {
                    console.log("no spikes or webs!");
                }
            }
            Fuxny.noa.inputs.down['_events'].HotBarSlot1();
        } else {
            console.log("No target or too far");
        }
        if (!everEnabled.autoSWUsed) {
            everEnabled.autoSWUsed = true
        };
    }

function triggerXPDuper() {
    if (!injectedBool) {
        showTemporaryNotification("❌ Inject first!");
        return;
    }
    try {
        const sendPacketModule = Fuxny.findModule("push({message");
        const sendPacket = Object.values(sendPacketModule).find(fn => fn?.toString().includes("window.localStorage.getItem("));

        if (!sendPacket) {
            showTemporaryNotification("❌ Could not find sendPacket function.");
            return;
        }

        const inventory = Fuxny.noa.entities.getState(1, "inventory").inventory;
        if (!inventory) {
            showTemporaryNotification("❌ Could not find inventory.");
            return;
        }

        sendPacket(20, {
            "zy": inventory._selectedSlotI,
            "xy": 0
        });

        inventory.pickUpItem({
            "name": "Aura XP Fragment",
            "typeObj":  Fuxny.noa.bloxd.getItemTypeObj("Aura XP Fragment"),
            "amount": 4,
            "attributes": {}
        });

        showTemporaryNotification("✨ XP Duper triggered!");

    } catch (error) {
        console.error("[XPDuper] Error:", error);
        showTemporaryNotification("❌ XP Duper failed. See console.");
    }
}

    function makeHitboxes() {
        if (!injectedBool || !Fuxny.rendering) return;

        const rendering = r.values(Fuxny.rendering)[18];
        if (!rendering) return;

        const playerIds = n.noa.playerList;
        if (!playerIds) return;

        const activeEIds = new Set(playerIds);

        // Create hitboxes for new players
        for (const playerId of playerIds) {
            if (hitboxes[playerId]) continue; // Skip if hitbox already exists

            let newBox_00 = Fuxny.Lion.Mesh.CreateBox("hitbox_mesh_" + playerId, 1, false, 1, Fuxny.Lion.scene);
            newBox_00.renderingGroupId = 2;

            newBox_00.material = new Fuxny.Lion.StandardMaterial("mat", Fuxny.Lion.scene);
            newBox_00.material.diffuseColor = new Fuxny.Lion.Color3(1, 1, 1);
            newBox_00.material.emissiveColor = new Fuxny.Lion.Color3(1, 1, 1);
            newBox_00.name = '_hitbox';
            newBox_00.id = '__hitbox_' + playerId;

            let defaultPosition = new newBox_00.position.constructor(0, 0.32, 0);
            newBox_00.position = defaultPosition.clone();
            newBox_00._scaling._y = 2.2;
            newBox_00.material.alpha = 0.5;
            newBox_00.isVisible = hitBoxEnabled;

            const transformNodeKey = playerId.toString();
            rendering.attachTransformNode(newBox_00, transformNodeKey, 13);
            r.values(Fuxny.rendering)[27].call(Fuxny.rendering, newBox_00);

            Object.defineProperty(newBox_00._nodeDataStorage, '_isEnabled', {
                get: () => true,
                set: (v) => {},
                configurable: false
            });

            hitboxes[playerId] = newBox_00;
        }

        // Cleanup hitboxes for players who have left
        for (const eId in hitboxes) {
            if (!activeEIds.has(parseInt(eId))) {
                hitboxes[eId]?.dispose();
                delete hitboxes[eId];
            }
        }

        // Toggle visibility for all active hitboxes
        for (const eId in hitboxes) {
            if (hitboxes[eId]) {
                hitboxes[eId].isVisible = hitBoxEnabled;
            }
        }
    }

    function startHealthWatcher() {
        if (healthWatcherInterval) clearInterval(healthWatcherInterval);

        healthWatcherInterval = setInterval(() => {
            if (!injectedBool || !lastClosestId) {
                setHealthBar(100, false); // Hide bar if no target
                return;
            }

            const state = Fuxny.entities.getState(lastClosestId, "genericLifeformState");
            if (!state || !state.isAlive) {
                setHealthBar(100, false);
                return;
            }

            // This is an assumption based on common game engine patterns.
            // The old method was obfuscated and has broken.
            const health = state.health;
            const maxHealth = state.maxHealth;

            if (typeof health === 'number' && typeof maxHealth === 'number' && maxHealth > 0) {
                const percent = (health / maxHealth) * 100;
                setHealthBar(percent, true);
            } else {
                setHealthBar(100, false);
            }

        }, 300);
    }

    (() => {
        // Remove if already present
        const old = document.getElementById("vertical-health-bar");
        if (old) old.remove();

        // Create bar container
        const container = document.createElement("div");
        container.id = "vertical-health-bar";
        Object.assign(container.style, {
            position: "fixed",
            left: "calc(50% - 200px)", // 100px left of center
            top: "50%",
            transform: "translateY(-50%)",
            width: "4px",
            height: "200px",
            background: "#000",
            border: "2px solid black",
            zIndex: 120,
            pointerEvents: "none",
            display: "flex",
            alignItems: "flex-end",
            overflow: "hidden"
        });

        // Create fill element
        const fill = document.createElement("div");
        Object.assign(fill.style, {
            width: "100%",
            height: "100%",
            background: "limegreen",
            transform: "scaleY(1)",
            transformOrigin: "bottom",
            transition: "transform 0.2s ease, background 0.2s ease", // <-- add comma here
        });

        container.appendChild(fill);
        document.body.appendChild(container);

        // Function to compute smooth gradient color from green → red
        function getHealthColor(health) {
            const ratio = health / 100;

            if (ratio > 0.5) {
                // Bright green → orange
                const t = (ratio - 0.5) * 2;
                const r = Math.round(255 * (1 - t));
                const g = 255;
                return `rgb(${r}, ${g}, 0)`; // green to yellow to orange
            } else {
                // Orange → red
                const t = ratio * 2;
                const r = 255;
                const g = Math.round(255 * t);
                return `rgb(${r}, ${g}, 0)`; // orange to red
            }
        }


        // Global health setter and show/hide toggle
        setHealthBar = function(health, show = true) {
            const clamped = Math.max(0, Math.min(health, 100));
            fill.style.transform = `scaleY(${clamped / 100})`;
            fill.style.background = getHealthColor(clamped);
            container.style.display = show ? "flex" : "none";
        };
        setHealthBar(100, false)
    })();


    function performInjection() {
        l.init();
        function inject() {
            let winDescriptors = Object.getOwnPropertyDescriptors(window);
            let wpName = Object.keys(winDescriptors).find(key => winDescriptors[key]?.set?.toString().includes("++"));
            let wpInstance = window[wpName] = window[wpName];

            // HILOCATOR push
            wpInstance.push([
                [Math.floor(Math.random() * 90000) + 10000], {},
                function(wpRequire) {
                    Fuxny.findModule = (code) => wpRequire(Object.keys(wpRequire.m)[Object.values(wpRequire.m).findIndex(m => m.toString().includes(code))]);
                    Fuxny.Props = Object.values(Fuxny.findModule("nonBlocksClient:")).find(prop => typeof prop == "object");
                    Fuxny.noa = Object.values(Fuxny.Props).find(prop => prop?.entities);
                    //Credits to, you guessed it wang!
                }
            ]);


            const targetValue = r.values(Fuxny.noa.entities)[2];
            const entityEntries = Object.entries(Fuxny.noa.entities);
            Fuxny.impKey = entityEntries.find(([_, val]) => val === targetValue)?.[0];
            Fuxny.registry = r.values(Fuxny.noa)[17]
            Fuxny.rendering = r.values(Fuxny.noa)[12]
            Fuxny.entities = Fuxny.noa.entities;


            Fuxny.ECS = r.values(Fuxny.noa)[19]

            if (Fuxny.impKey) {
                console.log("importantList identified:", Fuxny.impKey);

                // Attempt to find BHOP references
                const key = Fuxny.impKey;
                if (key) {
                    const entity = Fuxny.noa.entities?.[key];
                    if (entity?.moveState?.list?.[0] && entity?.movement?.list?.[0]) {
                        playerKey = key;
                        moveState = entity.moveState.list[0];
                        physState = entity.movement.list[0];
                        cachedBHOPParent = entity;
                        console.log("✅ Cached BHOP entity data");
                    } else {
                        console.warn("⚠️ Found key but missing BHOP components");
                    }
                } else {
                    console.warn("❌ BHOP player key not found");
                }
            }

            function findeIdKey() {

                const rendering = r.values(Fuxny.rendering)[18];
                const objectData = rendering?.objectData;
                if (!objectData) return;

                const sample = objectData[1];
                for (const key in sample) {
                    if (sample[key] === 1) {
                        eIdKey = key;
                        break;
                    }
                }
            }

            findeIdKey();

            let mesh = r.values(Fuxny.rendering)[7].meshes[0];
            let scene = r.values(Fuxny.rendering)[7];
            let engine = scene.getEngine();
            let StandardMaterial = mesh.material.constructor;
            let Color3 = mesh.material.diffuseColor.constructor;
            let sceneLoaderMod = Fuxny.findModule("getEngine().displayLoadingUI()");
            const addKey = r.values(Fuxny.entities)[10]
            const addComponent = Fuxny.noa.entities[addKey];
            Fuxny.world = r.values(Fuxny.noa)[11]
            Fuxny.physics = Fuxny.noa.physics
            Fuxny.camera = Fuxny.noa.camera
            Fuxny.bloxd = Fuxny.noa.bloxd
            Fuxny.clientOptions = r.values(Fuxny.noa)[29]
            Fuxny.Lion = {
                scene,
                engine,
                InstancedMesh: mesh.constructor,
                Mesh: mesh.constructor,
                Scene: scene.constructor,
                Engine: engine.constructor,
                sceneLoader: Object.values(sceneLoaderMod).find(mod => typeof mod.ImportMesh === "function"),
                Color3,
                StandardMaterial,
                addComponent,
                addKey
            };
            playerInventoryParent = Fuxny.entities[Fuxny.impKey].inventory.list[0].opWrapper

            function autoDetectChunkDataField(chunk) {
                for (const key of Object.keys(chunk)) {
                    const val = chunk[key];
                    if (!val) continue;

                    if (
                        typeof val === "object" &&
                        Array.isArray(val.stride) &&
                        val.stride.length === 3 &&
                        (
                            Array.isArray(val.data) ||
                            ArrayBuffer.isView(val.data) // covers Uint16Array etc.
                        )
                    ) {
                        console.log("✅ Detected chunk data field:", key);
                        chunkDataField = key;
                        return key;
                    }
                }

                console.warn("❌ Failed to auto-detect chunk data field");
                return null;
            }

            autoDetectChunkDataField(Object.values(Fuxny.world[Fuxny.impKey].hash)[0]);


            const maybeEntity = r.values(r.values(Fuxny.entities[Fuxny.impKey])[22].list[0])[1];

            const hasDoAttackDirect = typeof maybeEntity?.doAttack === 'function';
            const hasDoAttackBreakingItem = typeof maybeEntity?.breakingItem?.doAttack === 'function';

            if (hasDoAttackDirect) {
                console.log("maybeEntity has doAttack");
                playerEntity = maybeEntity;
            } else if (hasDoAttackBreakingItem) {
                console.log("maybeEntity.breakingItem has doAttack");
                playerEntity = maybeEntity.breakingItem;
            } else {
                console.warn("Neither maybeEntity nor its breakingItem has doAttack");
                playerEntity = null;
            }

            function findOnlysendBytes(obj) {
                if (!obj) {
                    console.warn("❌ Provided object is null or undefined.");
                    return null;
                }

                const proto = Object.getPrototypeOf(obj);
                const props = Object.getOwnPropertyNames(proto);

                for (const key of props) {
                    if (key === 'constructor') continue;

                    const val = proto[key];
                    if (typeof val === 'function') {
                        const str = val.toString();

                        // Looser but effective pattern detection
                        const looksLikesendBytes =
                            val.length === 2 &&
                            /Protocol\.ROOM_DATA_BYTES/i.test(str) &&
                            str.includes('Uint8Array') &&
                            /typeof/.test(str) && // just check any typeof usage
                            str.includes('.encode') &&
                            (str.includes('.byteLength') || str.includes('.length')) &&
                            str.includes('.set');

                        if (looksLikesendBytes) {
                            console.log(`✅ Real sendBytes found: ${key}`);
                            return key;
                        }
                    }
                }

                console.warn("❌ sendBytes function not found.");
                return null;
            }

            // Usage
            colyRoom = r.values(Fuxny.bloxd.client.msgHandler)[0];
            sendBytesName = findOnlysendBytes(colyRoom);

            if (!colyRoom || typeof colyRoom[sendBytesName] !== "function") {
                console.warn("[Blink] colyRoom or sendBytes not ready.");
            }

            blinkState = {
                enabled: false,
                originalSendBytes: colyRoom[sendBytesName],
                queued: [],
                interval: 0,
                noPacket: false
            };




            cachedNameTagParent = Fuxny.Lion.scene


            injectedBool = true;
        }

        function setupKillAuraBox() {


            newBox = Fuxny.Lion.Mesh.CreateBox("mesh", 1, false, 1, Fuxny.Lion.scene);
            newBox.renderingGroupId = 1;
            newBoxId = Fuxny.entities.add([0, 10, 0], null, null, newBox);

            //newBox.Da = true;
            newBox.material = new Fuxny.Lion.StandardMaterial("mat", Fuxny.Lion.scene);
            newBox.material.diffuseColor = new Fuxny.Lion.Color3(1, 1, 1);
            newBox.material.emissiveColor = new Fuxny.Lion.Color3(1, 1, 1);
            newBox.name = 'BodyMesh';
            newBox.id = 'BodyMesh';
            newBox.isVisible = false;

            // Find null key
            __nullKey = null;
            for (const key in newBox) {
                if (key.length === 2 && newBox[key] === null) {
                    __nullKey = key;
                    break;
                }
            }
            if (__nullKey) {
                newBox[__nullKey] = false;
            }

            Fuxny.entityList = r.values(Fuxny.noa)[30]

            humanoidMeshlist = Fuxny.entities[Fuxny.impKey]?.humanoidMesh?.list;
            __stringKey = null;
            if (Array.isArray(humanoidMeshlist)) {
                outerLoop: for (const obj of humanoidMeshlist) {
                    for (const key in obj) {
                        if (typeof obj[key] === "string") {
                            __stringKey = key;
                            break outerLoop;
                        }
                    }
                }
            } else {
                console.error("❌ Invalid humanoidMeshlist path.");
            }

            // Follow loop
            function followHeadLoop() {
                if (newBox) {
                    const playerId = 1;
                    const playerPosState = Fuxny.entities.getState(playerId, "position");

                    if (playerPosState && Array.isArray(playerPosState.position)) {
                        const [x, y, z] = playerPosState.position;
                        const newPos = [x, y + 1.5, z];
                        Fuxny.entities.setPosition(newBoxId, newPos);
                    } else {
                        console.error("Player position not found or invalid");
                    }
                }

                animationFrameId = requestAnimationFrame(followHeadLoop);
            }

            // Start the loop
            animationFrameId = requestAnimationFrame(followHeadLoop);
        }

        function startTargetFinder() {
            if (targetFinderId) clearInterval(targetFinderId);

            targetFinderId = setInterval(() => {
                if (!injectedBool || !Fuxny.entities) return;

                if (!Fuxny.entities.getState(myId, "genericLifeformState")?.isAlive) {
                    lastClosestId = null;
                    return;
                }

                const myPos = Fuxny.entities.getState(myId, 'position')?.position;
                if (!myPos) return;

                const playerIds = n.noa.playerList;
                if (!playerIds) return;

                let closestId = null;
                let minDist = 100; // Max distance squared (10 blocks)

                for (const playerId of playerIds) {
                    const pos = Fuxny.entities.getState(playerId, 'position')?.position;
                    if (!pos) continue;

                    const state = Fuxny.entities.getState(playerId, "genericLifeformState");
                    if (!state || !state.isAlive) continue;

                    const dist = S.distanceBetween(myPos, pos);
                    if (dist < minDist) {
                        minDist = dist;
                        closestId = playerId;
                    }
                }

                if (lastClosestId !== closestId) {
                    if (hitboxes[lastClosestId]) { // Revert old target color
                         hitboxes[lastClosestId].material.diffuseColor = new Fuxny.Lion.Color3(1, 1, 1);
                         hitboxes[lastClosestId].material.emissiveColor = new Fuxny.Lion.Color3(1, 1, 1);
                    }
                    if (hitboxes[closestId]) { // Highlight new target
                        hitboxes[closestId].material.diffuseColor = new Fuxny.Lion.Color3(1, 0, 0);
                        hitboxes[closestId].material.emissiveColor = new Fuxny.Lion.Color3(1, 0, 0);
                    }
                }

                lastClosestId = closestId;

            }, 200);
        }
        inject();
        setupKillAuraBox();
        startTargetFinder();
        setInterval(makeHitboxes, 1000);
    }

    waitForElement('div.MainLoadingState.FullyFancyText', (el) => {
        console.log('Target div appeared:', el);
        performInjection();
        if (!injectedBool) {
            showTemporaryNotification("injection failed");
        } else {
            showTemporaryNotification("injection successful");
        }
    });

    //__END__HACK_CODE_FROM_POTTERY009_TXT________________________________________________


    // --- ICONS (Lucide style SVGs) ---
    const icons = {
        main: `<svg xmlns="https://share.google/images/bnk5ooUCKdAgerfSZ" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M12 2v20M2 12h20"/></svg>`,
        visuals: `<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 3v9h9"/></svg>`,
        experimental: `<svg xmlns="https://share.google/images/bnk5ooUCKdAgerfSZ" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg>`,
        settings: `<svg xmlns="https://share.google/images/bnk5ooUCKdAgerfSZ" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06c.46.46 1.14.61 1.82.33h.01a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09c0 .66.39 1.25 1 1.51.68.28 1.36.13 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06c-.46.46-.61 1.14-.33 1.82.26.61.85 1 1.51 1H21a2 2 0 0 1 0 4h-.09c-.66 0-1.25.39-1.51 1z"/></svg>`
    };

    // --- STYLES ---
    const style = document.createElement("style");
    style.textContent = `
        /* Background */
        body::before {
            content: "";
            position: fixed;
            top: 0; left: 0;
            width: 100%; height: 100%;
            background: radial-gradient(circle at center, #00f2ff 0%, #00f2ff 100%);
            background-image: url("https://share.google/images/bnk5ooUCKdAgerfSZ");
            z-index: -1;
        }

        /* Main container */
        #spectra-ui {
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 520px;
            max-width: 95%;
            height: 320px;
            background: rgba(15, 15, 20, 0.92);
            border-radius: 14px;
            border: 1px solid rgba(255,255,255,0.1);
            display: flex;
            overflow: hidden;
            color: white;
            font-family: "Segoe UI", sans-serif;
            box-shadow: 0 0 25px rgba(255, 255, 255, 0.2); /* White Glow */
            z-index: 999999;
        }

        /* UI Controls */
        #spectra-exit-btn {
            position: absolute;
            top: 8px;
            right: 12px;
            font-size: 20px;
            color: #aaa;
            cursor: pointer;
            transition: color 0.2s;
            z-index: 10;
        }
        #spectra-exit-btn:hover {
            color: #00f2ff;
        }
        #spectra-reopen-btn {
            position: fixed;
            top: 20px;
            left: 20px;
            width: 40px;
            height: 40px;
            background: rgba(30, 30, 35, 0.9);
            border: 1px solid rgba(255, 255, 255, 0.2);
            border-radius: 8px;
            display: none; /* Hidden by default */
            justify-content: center;
            align-items: center;
            font-size: 24px;
            color: white;
            cursor: pointer;
            z-index: 1000000;
            box-shadow: 0 0 15px rgba(0,0,0,0.5);
        }

        /* Sidebar */
        #spectra-sidebar {
            width: 150px;
            background: linear-gradient(180deg, #111, #00f2ff);
            border-right: 1px solid rgba(255,255,255,0.08);
            display: flex;
            flex-direction: column;
            align-items: stretch;
            padding: 12px 0;
        }

        /* Logo blend */
        #spectra-sidebar .logo-wrap {
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 8px 0 16px;
            margin-bottom: 12px;
            border-bottom: 1px solid rgba(255,255,255,0.1);
        }
        #spectra-sidebar img {
            width: 65px;
            border-radius: 10px;
            /* Removed the box-shadow for the logo */
        }

        /* Tabs with icons */
        .spectra-tab {
            padding: 10px 14px;
            margin: 4px 8px;
            border-radius: 8px;
            cursor: pointer;
            font-size: 14px;
            display: flex;
            align-items: center;
            gap: 8px;
            color: #ddd;
            transition: background 0.2s, color 0.2s;
        }
        .spectra-tab svg {
            flex-shrink: 0;
        }
        .spectra-tab span {
            flex: 1;
        }
        .spectra-tab:hover {
            background: rgba(255,255,255,0.08);
            color: #fff;
        }
        .spectra-tab.active {
            background: linear-gradient(90deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.05)); /* White Active Tab */
            color: #fff;
            font-weight: 600;
        }

        /* Content area */
        #spectra-content {
            flex: 1;
            padding: 16px;
            overflow-y: auto;
        }
        .spectra-category-title {
            font-size: 15px;
            font-weight: bold;
            margin-bottom: 10px;
            border-bottom: 1px solid rgba(255,255,255,0.12);
            padding-bottom: 4px;
        }

        /* Toggles */
        .spectra-toggle {
            display: flex;
            justify-content: space-between;
            align-items: center;
            background: rgba(255,255,255,0.04);
            padding: 8px 12px;
            margin: 5px 0;
            border-radius: 8px;
            transition: background 0.2s;
        }
        .spectra-button {
            background: rgba(255,255,255,0.04);
            padding: 8px 12px;
            margin: 5px 0;
            border-radius: 8px;
            transition: background 0.2s;
            color: white;
            font-size: 14px;
            border: 1px solid rgba(255,255,255,0.1);
            cursor: pointer;
            text-align: center;
            width: 100%;
        }
        .spectra-button:hover {
            background: rgba(255,255,255,0.08);
        }
        .spectra-toggle:hover {
            background: rgba(255,255,255,0.08);
        }
        .spectra-toggle label {
            font-size: 14px;
        }
        .spectra-toggle input {
            appearance: none;
            width: 34px;
            height: 18px;
            background: #00f2ff;
            border-radius: 20px;
            position: relative;
            cursor: pointer;
            transition: 0.3s;
        }
        .spectra-toggle input:checked {
            background: #00f2ff; /* Green Toggle */
        }
        .spectra-toggle input::before {
            content: "";
            position: absolute;
            top: 2px; left: 2px;
            width: 14px; height: 14px;
            background: Blue;
            border-radius: 50%;
            transition: 0.3s;
        }
        .spectra-toggle input:checked::before {
            left: 18px;
            background: #00f2ff;
        }

        .hidden { display: none; }
    `;
    document.head.appendChild(style);

    // --- UI ---
    const ui = document.createElement("div");
    ui.id = "spectra-ui";
    ui.innerHTML = `
        <div id="spectra-exit-btn">✖</div>
        <div id="spectra-sidebar">
            <div class="logo-wrap">
                <img src="https://share.google/images/bnk5ooUCKdAgerfSZ" alt="Ugvs Logo">
            </div>
            <div class="spectra-tab active" data-tab="main">${icons.main}<span>Main</span></div>
            <div class="spectra-tab" data-tab="visuals">${icons.visuals}<span>Visuals</span></div>
            <div class="spectra-tab" data-tab="experimental">${icons.experimental}<span>Experimental</span></div>
            <div class="spectra-tab" data-tab="settings">${icons.settings}<span>Settings</span></div>
        </div>
        <div id="spectra-content">
            <div class="spectra-category" data-tab-content="main">
                <div class="spectra-category-title">Main</div>
                <div class="spectra-toggle"><label>Killaura</label><input type="checkbox" id="hack-killaura"></div>
                <div class="spectra-toggle"><label>Spider</label><input type="checkbox" id="hack-spider"></div>
                <div class="spectra-toggle"><label>Jesus</label><input type="checkbox" id="hack-jesus"></div>
                <div class="spectra-toggle"><label>BHOP</label><input type="checkbox" id="hack-bhop"></div>
                <div class="spectra-toggle"><label>Scaffold</label><input type="checkbox" id="hack-scaffold"></div>
                <div class="spectra-toggle"><label>Walljump</label><input type="checkbox" id="hack-walljump"></div>
                <div class="spectra-toggle"><label>Waterjump</label><input type="checkbox" id="hack-waterjump"></div>
                <div class="spectra-toggle"><label>Noclip Move</label><input type="checkbox" id="hack-noclip-move"></div>
                <div class="spectra-toggle"><label>Kill Softly</label><input type="checkbox" id="hack-kill-softly"></div>
                <div class="spectra-toggle"><label>BHOP Knife</label><input type="checkbox" id="hack-bhop-knife"></div>
                <button class="spectra-button" id="hack-auto-sw">Auto SW</button>
                <button class="spectra-button" id="hack-noclip-place">Noclip Place</button>
                <button class="spectra-button" id="hack-high-jump">High Jump</button>
                <button class="spectra-button" id="hack-xp-duper">XP Duper</button>
            </div>

            <div class="spectra-category hidden" data-tab-content="visuals">
                <div class="spectra-category-title">Visuals</div>
                <div class="spectra-toggle"><label>ESP</label><input type="checkbox" id="hack-esp"></div>
                <div class="spectra-toggle"><label>Chest ESP</label><input type="checkbox" id="hack-chest-esp"></div>
                <div class="spectra-toggle"><label>Ore ESP</label><input type="checkbox" id="hack-ore-esp"></div>
                <div class="spectra-toggle"><label>Hitboxes</label><input type="checkbox" id="hack-hitboxes"></div>
                <div class="spectra-toggle"><label>Nametags</label><input type="checkbox" id="hack-nametags"></div>
                <div class="spectra-toggle"><label>Enemy Health</label><input type="checkbox" id="hack-enemy-health"></div>
                <div class="spectra-toggle"><label>Night</label><input type="checkbox" id="hack-night"></div>
                <div class="spectra-toggle"><label>Bigheads</label><input type="checkbox" id="hack-bigheads"></div>
            </div>

            <div class="spectra-category hidden" data-tab-content="experimental">
                <div class="spectra-category-title">Experimental</div>
                <div class="spectra-toggle"><label>Blink</label><input type="checkbox" id="hack-blink"></div>
                <div class="spectra-toggle"><label>Pickup Reach</label><input type="checkbox" id="hack-pickup-reach"></div>
                <div class="spectra-toggle"><label>Anti-Spike</label><input type="checkbox" id="hack-anti-spike"></div>
                <button class="spectra-button" id="hack-spawn-teleport">/spawn Teleport</button>
                <button class="spectra-button" id="hack-anti-web">Anti-Web</button>
            </div>

            <div class="spectra-category hidden" data-tab-content="settings">
                <div class="spectra-category-title">Settings</div>
                <div class="spectra-toggle"><label>Anti-Ban (Safer)</label><input type="checkbox" id="hack-anti-ban"></div>
                <button class="spectra-button" id="hack-health-color">Set Health Color</button>
                <button class="spectra-button" id="hack-ranks">Spoof Ranks</button>
                <button class="spectra-button" id="hack-player-coords">Show Player Coords</button>
                <button class="spectra-button" id="hack-purge-cookies">Purge Cookies & Reload</button>
                <button class="spectra-button" id="hack-discord">Discord</button>
                <button class="spectra-button" id="hack-unban">Attempt Unban (Reload)</button>
            </div>
        </div>
    `;
    document.body.appendChild(ui);

    // --- Create and append the floating reopen button ---
    const reopenBtn = document.createElement("div");
    reopenBtn.id = "spectra-reopen-btn";
    reopenBtn.innerHTML = '☰';
    document.body.appendChild(reopenBtn);

    // --- Sidebar logic ---
    const tabs = document.querySelectorAll(".spectra-tab");
    const contents = document.querySelectorAll("[data-tab-content]");

    tabs.forEach((tab) => {
        tab.addEventListener("click", () => {
            tabs.forEach((t) => t.classList.remove("active"));
            tab.classList.add("active");

            const target = tab.getAttribute("data-tab");
            contents.forEach((c) => {
                c.classList.add("hidden");
                if (c.getAttribute("data-tab-content") === target) {
                    c.classList.remove("hidden");
                }
            });
        });
    });

    // --- UI Controls Logic ---
    const exitBtn = document.getElementById("spectra-exit-btn");
    const mainUI = document.getElementById("spectra-ui");

    if (exitBtn && reopenBtn && mainUI) {
        // Event to hide the main UI and show the reopen button
        exitBtn.addEventListener("click", () => {
            mainUI.style.display = "none";
            reopenBtn.style.display = "flex"; // Use 'flex' to center the icon
        });

        // Event to show the main UI and hide the reopen button
        reopenBtn.addEventListener("click", () => {
            reopenBtn.style.display = "none";
            mainUI.style.display = "flex"; // Restore original display property
        });
    }

    // --- NEW HACK MODULES ---
    class Module {
        constructor(name) { this.name = name; this.isEnabled = false; }
        onEnable() {}
        onDisable() {}
        enable() { this.isEnabled = true; this.onEnable(); }
        disable() { this.isEnabled = false; this.onDisable(); }
        toggle() { this.isEnabled ? this.disable() : this.enable(); }
    }

    class AntiSpike extends Module {
        constructor() { super("AntiSpike"); }
        onEnable() {
            let items = r.values(r.values(l.findModule("Gun:class")).find(o => typeof o == "object"));
            let registryKey = r.keys(n.noa.registry)[12];
            items.filter(o => o.name.includes("Spikes")).forEach(o => { n.noa.registry[registryKey][o.id] = true; });
        }
        onDisable() {
            let items = r.values(r.values(l.findModule("Gun:class")).find(o => typeof o == "object"));
            let registryKey = r.keys(n.noa.registry)[12];
            items.filter(o => o.name.includes("Spikes")).forEach(o => { n.noa.registry[registryKey][o.id] = false; });
        }
    }

    class Spider extends Module {
        constructor() { super("Spider"); }
        onRender() {
            if (l.noa.inputs.state.jump && n.noa.touchingWall()) {
                n.noa.setVelocity(null, 5, null);
            }
        }
    }

    class Killaura extends Module {
        constructor() {
            super("Killaura");
            this.lastExecutionTime = 0;
            this.delay = 100;
        }
        onRender() {
            let now = Date.now();
            if (now - this.lastExecutionTime >= this.delay) {
                this.lastExecutionTime = now;
                this.tryKill();
            }
        }
        tryKill() {
            let myPos = n.noa.getPosition(1);
            const killRadius = antiBanEnabled ? 4.5 : 7;
            n.noa.playerList.forEach(playerId => {
                let enemyPos = n.noa.getPosition(playerId);
                if (enemyPos && S.distanceBetweenSqrt(myPos, enemyPos) <= killRadius) {
                    let vector = S.normalizeVector([enemyPos[0] - myPos[0], enemyPos[1] - myPos[1], enemyPos[2] - myPos[2]]);
                    n.noa.doAttack(vector, playerId.toString(), "BodyMesh");
                    n.noa.getHeldItem(1)?.trySwingBlock?.();
                    n.noa.getMoveState(1)?.setArmsAreSwinging?.();
                }
            });
        }
    }

    class Jesus extends Module {
        constructor() { super("Jesus"); }
        onEnable() {
            let items = r.values(r.values(l.findModule("Gun:class")).find(o => typeof o == "object"));
            let registryKey = r.keys(n.noa.registry)[12];
            n.noa.registry[registryKey][items.find(o => o.name == "Water").id] = true;
            n.noa.registry[registryKey][items.find(o => o.name == "Lava").id] = true;
        }
        onDisable() {
            let items = r.values(r.values(l.findModule("Gun:class")).find(o => typeof o == "object"));
            let registryKey = r.keys(n.noa.registry)[12];
            n.noa.registry[registryKey][items.find(o => o.name == "Water").id] = false;
            n.noa.registry[registryKey][items.find(o => o.name == "Lava").id] = false;
        }
    }

    class Unban extends Module {
        constructor() { super("Unban"); }
        onEnable() {
            document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });
            location.reload();
        }
    }

    class HighJump extends Module {
        constructor() { super("HighJump"); }
        onEnable() {
            n.noa.setVelocity(null, 40, null);
        }
    }

    const newHacks = {
        antiSpike: new AntiSpike(),
        spider: new Spider(),
        killaura: new Killaura(),
        jesus: new Jesus(),
        unban: new Unban(),
        highJump: new HighJump()
    };

    // --- HACK LOGIC & WIRING ---
    function setupHackEventListeners() {
        // Helper function to ensure injection before activation
        const preCheck = (featureName, checkboxElement) => {
            if (!injectedBool) {
                showTemporaryNotification(`❌ Inject first to use ${featureName}!`);
                if (checkboxElement) checkboxElement.checked = false;
                return false;
            }
            return true;
        };

        // --- Abstraction for Toggles/Buttons ---
        const setupRenderToggle = (id, module) => {
            document.getElementById(id)?.addEventListener('change', e => {
                if (!preCheck(module.name, e.target)) return;
                module.isEnabled = e.target.checked;
                if (e.target.checked) {
                    if (module.onEnable) module.onEnable();
                    if (module.onRender && !modulesToRender.includes(module)) modulesToRender.push(module);
                } else {
                    if (module.onDisable) module.onDisable();
                    const index = modulesToRender.indexOf(module);
                    if (index > -1) modulesToRender.splice(index, 1);
                }
                showTemporaryNotification(`${module.name} ${module.isEnabled ? 'enabled' : 'disabled'}`);
            });
        };

        const setupSimpleToggle = (id, module) => {
            document.getElementById(id)?.addEventListener('change', e => {
                if (!preCheck(module.name, e.target)) return;
                module.toggle();
                showTemporaryNotification(`${module.name} ${module.isEnabled ? 'enabled' : 'disabled'}`);
            });
        };

        const setupButton = (id, module) => {
            document.getElementById(id)?.addEventListener('click', () => {
                if (!preCheck(module.name)) return;
                module.enable();
                showTemporaryNotification(`${module.name} triggered`);
            });
        };

        // --- Wire up New Hacks ---
        setupRenderToggle('hack-killaura', newHacks.killaura);
        setupRenderToggle('hack-spider', newHacks.spider);
        setupSimpleToggle('hack-jesus', newHacks.jesus);
        setupSimpleToggle('hack-anti-spike', newHacks.antiSpike);
        setupButton('hack-high-jump', newHacks.highJump);
        setupButton('hack-unban', newHacks.unban);

        // --- Wire up Old Hacks ---
        // Note: The old "Kill Aura" is replaced by the new one.
        document.getElementById('hack-bhop')?.addEventListener('change', e => {
            if (!preCheck("BHOP", e.target)) return;
            if (e.target.checked) {
                bhopIntervalId = setInterval(bunnyHop, 10);
                showTemporaryNotification("BHOP enabled");
            } else {
                clearInterval(bhopIntervalId);
                bhopIntervalId = null;
                showTemporaryNotification("BHOP disabled");
            }
        });

        document.getElementById('hack-scaffold')?.addEventListener('change', e => {
            if (!preCheck("Scaffold", e.target)) return;
            if (e.target.checked) {
                scaffoldIntervalId = setInterval(() => {
                    const pos = Fuxny.entities.getState(1, 'position').position;
                    if (!pos || !playerEntity || playerEntity.heldItemState.heldType !== "CubeBlock") return;
                    const exactX = pos[0], exactZ = pos[2];
                    const blockX = Math.floor(exactX), blockY = Math.floor(pos[1]), blockZ = Math.floor(exactZ);
                    const checkPlace = (x, y, z) => (playerEntity.checkTargetedBlockCanBePlacedOver([x, y, z]) || r.values(Fuxny.world)[47].call(Fuxny.world, x, y, z) === 0);
                    if (checkPlace(blockX, blockY - 1, blockZ)) { wangPlace([blockX, blockY - 1, blockZ]); return; }
                    const dx = exactX - blockX, dz = exactZ - blockZ;
                    const offsets = [];
                    if (dx < 0.3) offsets.push([-1, 0]); if (dx > 0.7) offsets.push([1, 0]);
                    if (dz < 0.3) offsets.push([0, -1]); if (dz > 0.7) offsets.push([0, 1]);
                    for (const [ox, oz] of offsets) {
                        const nx = blockX + ox, nz = blockZ + oz;
                        if (checkPlace(nx, blockY - 1, nz)) { wangPlace([nx, blockY - 1, nz]); return; }
                    }
                }, 50);
                showTemporaryNotification("Scaffold enabled");
            } else {
                clearInterval(scaffoldIntervalId);
                scaffoldIntervalId = null;
                showTemporaryNotification("Scaffold disabled");
            }
        });

        document.getElementById('hack-walljump')?.addEventListener('change', e => {
            if (!preCheck("Walljump", e.target)) return;
            const client = Fuxny?.clientOptions, body = Fuxny?.physics?.bodies?.[0];
            if (!client || !body) return;
            if (e.target.checked) {
                Object.defineProperty(client, "airJumpCount", { get: () => { if (!body.resting) return 0; const [rx, , rz] = body.resting; return (rx === 1 || rx === -1 || rz === 1 || rz === -1) ? 999 : 0; }, set(_) {}, configurable: true });
                showTemporaryNotification("Walljump enabled");
            } else {
                Object.defineProperty(client, "airJumpCount", { value: 0, writable: true, configurable: true });
                showTemporaryNotification("Walljump disabled");
            }
        });

        document.getElementById('hack-waterjump')?.addEventListener('change', e => {
             if (!preCheck("Waterjump", e.target)) return;
             const c = Fuxny?.entities?.[Fuxny.impKey]?.movement?.list?.[0];
             if (!c) return;
             if(e.target.checked) {
                try {
                    Object.defineProperty(c, "inAirFromWater", { get: () => false, set: () => {}, configurable: true });
                    Object.defineProperty(c, "_jumpCount", { get: () => 0, set: () => {}, configurable: true });
                    Object.defineProperty(c, "_ticksOutOfWater", { get: () => 346, set: () => {}, configurable: true });
                    Object.defineProperty(c, "isOnIce", { get: () => true, set: () => {}, configurable: true });
                    showTemporaryNotification("Waterjump enabled");
                } catch (err) { console.error("Error enabling waterjump:", err); }
             } else {
                try {
                    Object.defineProperty(c, "inAirFromWater", { value: false, writable: true, configurable: true });
                    Object.defineProperty(c, "_jumpCount", { value: 0, writable: true, configurable: true });
                    Object.defineProperty(c, "_ticksOutOfWater", { value: 0, writable: true, configurable: true });
                    Object.defineProperty(c, "isOnIce", { value: false, writable: true, configurable: true });
                    showTemporaryNotification("Waterjump disabled");
                } catch (err) { console.error("Error disabling waterjump:", err); }
             }
        });

        document.getElementById('hack-noclip-move')?.addEventListener('change', e => {
            if (!preCheck("Noclip Move", e.target)) return;
            if (e.target.checked) { startMoving(); showTemporaryNotification("Noclip Move enabled"); }
            else { stopMoving(); showTemporaryNotification("Noclip Move disabled"); }
        });

        document.getElementById('hack-kill-softly')?.addEventListener('change', e => {
            if (!preCheck("Kill Softly", e.target)) return;
            if (e.target.checked) { playerEntity.heldItemState.swingDuration = 1500; showTemporaryNotification("Kill Softly enabled"); }
            else { playerEntity.heldItemState.swingDuration = 200; showTemporaryNotification("Kill Softly disabled"); }
        });

        document.getElementById('hack-bhop-knife')?.addEventListener('change', e => {
            if (!preCheck("BHOP Knife", e.target)) return;
            if (e.target.checked) {
                bhopKnifeEnabled = true;
                spaceVid = document.createElement('video');
                spaceVid.src = 'https://files.catbox.moe/6tm4e7.webm';
                spaceVid.preload = 'auto'; spaceVid.loop = true; spaceVid.muted = false; spaceVid.volume = 0; spaceVid.playbackRate = 1; spaceVid.playsInline = true;
                Object.assign(spaceVid.style, { position: 'fixed', top: '50%', left: '50%', width: '100vw', height: '100vh', objectFit: 'cover', transform: 'translate(-50%, -50%) scaleX(1.4)', zIndex: 21, pointerEvents: 'none', opacity: '0', transition: 'opacity 2.5s ease', });
                document.body.appendChild(spaceVid);
                window.addEventListener('keydown', onKeyDown);
                window.addEventListener('keyup', onKeyUp);
                showTemporaryNotification("BHOP Knife enabled");
            } else {
                bhopKnifeEnabled = false;
                window.removeEventListener('keydown', onKeyDown);
                window.removeEventListener('keyup', onKeyUp);
                if (spaceVid) { spaceVid.pause(); if (spaceVid.parentNode) spaceVid.parentNode.removeChild(spaceVid); spaceVid = null; }
                spaceHeld = false;
                if (fadeVolumeInterval) clearInterval(fadeVolumeInterval);
                showTemporaryNotification("BHOP Knife disabled");
            }
        });

        document.getElementById('hack-auto-sw')?.addEventListener('click', () => { if (preCheck("Auto SW")) autoSW(); });
        document.getElementById('hack-xp-duper')?.addEventListener('click', () => { triggerXPDuper(); });
        document.getElementById('hack-noclip-place')?.addEventListener('click', () => {
            if (!preCheck("Noclip Place")) return;
            let pos = Fuxny.entities.getState(1, 'position').position;
            Fuxny.entities.setPosition(1, pos[0], pos[1], pos[2] + 1);
            let playerEntity = r.values(Fuxny.entities[Fuxny.impKey])[22].list[0];
            playerEntity._blockItem.placeBlock();
        });

        // --- Visuals ---
        document.getElementById('hack-esp')?.addEventListener('change', e => {
            if (!preCheck("ESP", e.target)) return;
            espEnabled = e.target.checked;
            const groupId = espEnabled ? 2 : 0;
            if (Array.isArray(r.values(Fuxny.rendering)[18].thinMeshes)) {
                for (const thinMesh of r.values(Fuxny.rendering)[18].thinMeshes) {
                    if (thinMesh?.mesh && typeof thinMesh.mesh.renderingGroupId === "number") {
                        thinMesh.mesh.renderingGroupId = groupId;
                    }
                }
            }
            showTemporaryNotification(`ESP ${espEnabled ? 'enabled' : 'disabled'}`);
        });

        document.getElementById('hack-chest-esp')?.addEventListener('change', e => {
            if (!preCheck("Chest ESP", e.target)) return;
            chestESPEnabled = e.target.checked;
            if (chestESPEnabled || oreESPEnabled) {
                if (!chestOreInterval) { chestOreInterval = setInterval(scanAllChunks, 5000); }
                scanAllChunks();
            } else {
                if (chestOreInterval) { clearInterval(chestOreInterval); chestOreInterval = null; }
                clearESPBoxes();
            }
            showTemporaryNotification(`Chest ESP ${chestESPEnabled ? 'enabled' : 'disabled'}`);
        });

        document.getElementById('hack-ore-esp')?.addEventListener('change', e => {
            if (!preCheck("Ore ESP", e.target)) return;
            oreESPEnabled = e.target.checked;
            if (chestESPEnabled || oreESPEnabled) {
                if (!chestOreInterval) { chestOreInterval = setInterval(scanAllChunks, 5000); }
                scanAllChunks();
            } else {
                if (chestOreInterval) { clearInterval(chestOreInterval); chestOreInterval = null; }
                clearESPBoxes();
            }
            showTemporaryNotification(`Ore ESP ${oreESPEnabled ? 'enabled' : 'disabled'}`);
        });

        document.getElementById('hack-hitboxes')?.addEventListener('change', e => {
            if (!preCheck("Hitboxes", e.target)) return;
            hitBoxEnabled = e.target.checked;
            for (const eId in hitboxes) {
                const box = hitboxes[eId];
                if (box) box.isVisible = hitBoxEnabled;
            }
            showTemporaryNotification(`Hitboxes ${hitBoxEnabled ? 'enabled' : 'disabled'}`);
        });

        document.getElementById('hack-nametags')?.addEventListener('change', e => {
            if (!preCheck("Nametags", e.target)) return;
            if (e.target.checked) {
                nameTagsEnabled = true;
                if (!cachedNameTagParent) { nameTagsEnabled = false; return; }
                nameTagParent = cachedNameTagParent;
                nameTagsIntervalId = setInterval(() => {
                    const entityList = Fuxny.entityList;
                    if (!entityList) return;
                    for (const subGroup of Object.values(entityList)) {
                        if (!subGroup) continue;
                        for (const obj of Object.values(subGroup)) {
                            if (obj?.lobbyLeaderboardValues) {
                                try {
                                    Object.defineProperty(obj, 'hasPriorityNametag', { get: () => true, set(v){}, configurable: true });
                                    Object.defineProperty(obj, 'canSee', { get: () => true, set(v){}, configurable: true });
                                } catch (e) {}
                            }
                        }
                    }
                    for (const key in nameTagParent) {
                        const tag = nameTagParent;
                        if (tag && typeof tag === 'object' && tag.id?.includes('NameTag')) {
                            try {
                                Object.defineProperty(tag, '_isVisible', { get: () => true, set(v){}, configurable: true });
                                Object.defineProperty(tag, 'renderingGroupId', { get: () => 3, set(v){}, configurable: true });
                            } catch (e) {}
                        }
                    }
                }, 15000);
                showTemporaryNotification("Nametags enabled");
            } else {
                nameTagsEnabled = false;
                clearInterval(nameTagsIntervalId);
                nameTagsIntervalId = null;
                if (nameTagParent) {
                    for (const key in nameTagParent) {
                        const tag = nameTagParent[key];
                        if (tag && typeof tag === 'object' && tag.id?.includes('NameTag')) {
                            try {
                                const current = tag._isVisible;
                                delete tag._isVisible;
                                tag._isVisible = current;
                            } catch (e) {}
                        }
                    }
                }
                nameTagParent = null;
                showTemporaryNotification("Nametags disabled");
            }
        });

        document.getElementById('hack-enemy-health')?.addEventListener('change', e => {
             if (!preCheck("Enemy Health", e.target)) return;
             if (e.target.checked) {
                 startHealthWatcher();
                 showTemporaryNotification("Enemy Health enabled");
             } else {
                if (healthWatcherInterval) clearInterval(healthWatcherInterval);
                if (resetTimeout) clearTimeout(resetTimeout);
                setHealthBar(100, false);
                lastPercent = null;
                showTemporaryNotification("Enemy Health disabled");
             }
        });

        document.getElementById('hack-night')?.addEventListener('change', e => {
            if (!preCheck("Night", e.target)) return;
            if(e.target.checked) {
                if(!skyboxMesh) {
                    for (let i = 0; i < 10000; i++) {
                        const meshState = Fuxny.entities.getState(i, "mesh");
                        if (meshState?.mesh?.id === "skyBox") {
                            skyboxEntity = i; skyboxMesh = meshState.mesh; break;
                        }
                    }
                }
                if(skyboxMesh) skyboxMesh.isVisible = false;
                showTemporaryNotification("Night enabled");
            } else {
                if(skyboxMesh) skyboxMesh.isVisible = true;
                showTemporaryNotification("Night disabled");
            }
        });

        document.getElementById('hack-bigheads')?.addEventListener('change', e => {
            if (!preCheck("Bigheads", e.target)) return;
            const objectData = r.values(Fuxny.rendering)[18].objectData;
            if (e.target.checked) {
                for (let key in objectData) {
                    let obj = objectData[key];
                    if (obj?.type === "Player" && obj.nodes?.[16] && obj !== objectData[1]) {
                        let node = obj.nodes[16];
                        node.scale._x = 6; node.scale._y = 6; node.scale._z = 6;
                        node.position._y = -1;
                    }
                }
                bigHeadsInterval = setInterval(() => {
                    for (let key in objectData) {
                        let obj = objectData[key];
                        if (obj?.type === "Player" && obj.nodes?.[16] && obj !== objectData[1]) {
                            let node = obj.nodes[16];
                            if (node.scale._x === 1) {
                                node.scale._x = 6; node.scale._y = 6; node.scale._z = 6;
                                node.position._y = -1;
                            }
                        }
                    }
                }, 10000);
                showTemporaryNotification("Bigheads enabled");
            } else {
                for (let key in objectData) {
                    let obj = objectData[key];
                    if (obj?.type === "Player" && obj.nodes?.[16] && obj !== objectData[1]) {
                         let node = obj.nodes[16];
                         node.scale._x = 1; node.scale._y = 1; node.scale._z = 1;
                         node.position._y = 0.7199999690055847;
                    }
                }
                clearInterval(bigHeadsInterval);
                bigHeadsInterval = null;
                showTemporaryNotification("Bigheads disabled");
            }
        });

        // --- Experimental ---
        document.getElementById('hack-blink')?.addEventListener('change', e => {
            if (!preCheck("Blink", e.target)) return;
            toggleBlink();
            showTemporaryNotification(`Blink ${blinkState.enabled ? 'enabled' : 'disabled'}`);
        });

        document.getElementById('hack-pickup-reach')?.addEventListener('change', e => {
            if (!preCheck("Pickup Reach", e.target)) return;
            if (e.target.checked) {
                 if (!proto || !originalGetEntitiesInAABB) {
                    const cls = findClassConstructor(Fuxny.noa.entities);
                    if (!cls) { console.warn("[pickupReach] Could not find class constructor"); return; }
                    const ghMethod = findGhMethod(cls);
                    if (!ghMethod) { console.warn("[pickupReach] Could not find getEntitiesInAABB method"); return; }
                    proto = cls.prototype;
                    originalGetEntitiesInAABB = ghMethod.fn;
                    ghMethodKey = ghMethod.key;
                }
                proto[ghMethodKey] = function(box, name) {
                    const center = [(box.base[0] + box.max[0]) / 2, (box.base[1] + box.max[1]) / 2, (box.base[2] + box.max[2]) / 2];
                    const halfSize = [(box.max[0] - box.base[0]) / 2, (box.max[1] - box.base[1]) / 2, (box.max[2] - box.base[2]) / 2];
                    const enlarged = { base: center.map((c, i) => c - halfSize[i] * RANGE_MULTIPLIER), max: center.map((c, i) => c + halfSize[i] * RANGE_MULTIPLIER) };
                    return originalGetEntitiesInAABB.call(this, enlarged, name);
                };
                pickupReachEnabled = true;
                showTemporaryNotification("Pickup Reach enabled");
            } else {
                if(proto && ghMethodKey) proto[ghMethodKey] = originalGetEntitiesInAABB;
                pickupReachEnabled = false;
                showTemporaryNotification("Pickup Reach disabled");
            }
        });

        document.getElementById('hack-spawn-teleport')?.addEventListener('click', () => {
            if (!preCheck("Spawn Teleport")) return;
            function findElementByText(text) {
                const all = document.querySelectorAll('div, span, button, a');
                for (const el of all) if (el.textContent.trim() === text) return el;
                return null;
            }
            const teleportButtonText = findElementByText('Teleport To Lobby Spawn');
            if (teleportButtonText) {
                let clickable = teleportButtonText;
                while (clickable && !clickable.onclick && clickable.tagName !== 'BUTTON') clickable = clickable.parentElement;
                if (clickable) clickable.click();
                else teleportButtonText.click();
                showTemporaryNotification("Teleporting to spawn...");
            } else showTemporaryNotification("Teleport button not found.");
        });

        document.getElementById('hack-anti-web')?.addEventListener('click', () => {
            if (!preCheck("Anti-Web")) return;
            Object.defineProperty(Fuxny.entities[Fuxny.impKey].moveState.list[0].speedMultiplier.multipliers, "inCobweb", { configurable: true, enumerable: true, get() { return 1; }, set(value) {} });
            showTemporaryNotification("Anti-Web applied");
        });

        // --- Settings ---
        document.getElementById('hack-anti-ban')?.addEventListener('change', e => {
            antiBanEnabled = e.target.checked;
            showTemporaryNotification(`Anti-Ban Mode ${antiBanEnabled ? 'ENABLED' : 'DISABLED'}`);
        });

        document.getElementById('hack-health-color')?.addEventListener('click', () => {
             const healthBar = document.getElementsByClassName("BottomScreenStatBar")[0];
             if (healthBar) {
                healthBar.style.background = defaultAccent;
                showTemporaryNotification("Health bar color set");
             }
        });

        document.getElementById('hack-ranks')?.addEventListener('click', () => {
            if (!preCheck("Ranks")) return;
            Fuxny.entityList[1][1].ranks[0] = "developer";
            Fuxny.entityList[1][1].ranks[1] = "youtuber";
            Fuxny.entityList[1][1].ranks[2] = "super";
            showTemporaryNotification("Ranks spoofed");
        });

        document.getElementById('hack-player-coords')?.addEventListener('click', () => {
            if (!preCheck("Player Coords")) return;
            for (const key in Fuxny.bloxd.entityNames) {
                if (key === "1") continue;
                const nameObj = Fuxny.bloxd.entityNames[key];
                const state = Fuxny.entities.getState(key, 'position');
                if (!state || !state.position) continue;
                const pos = state.position;
                const x = Math.round(pos[0]); const y = Math.round(pos[1]); const z = Math.round(pos[2]);
                const baseName = nameObj.entityName.replace(/\s*\(\-?\d+,\s*\-?\d+,\s*\-?\d+\)$/, "");
                nameObj.entityName = `${baseName} (${x}, ${y}, ${z})`;
            }
            showTemporaryNotification("Player coords updated in leaderboard");
        });

        document.getElementById('hack-purge-cookies')?.addEventListener('click', () => {
            window.onbeforeunload = null;
            const deleteCookie = (name, path = "/", domain = "") => {
                let cookieStr = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=${path};`;
                if (domain) cookieStr += `domain=${domain};`;
                document.cookie = cookieStr;
            };
            const cookies = document.cookie.split(";");
            cookies.forEach(cookie => {
                const eqPos = cookie.indexOf("=");
                const name = eqPos > -1 ? cookie.slice(0, eqPos).trim() : cookie.trim();
                deleteCookie(name, "/");
                const hostname = location.hostname;
                const domainParts = hostname.split(".");
                if (domainParts.length > 2) {
                    const baseDomain = domainParts.slice(-2).join(".");
                    deleteCookie(name, "/", baseDomain);
                }
            });
            showTemporaryNotification("Cookies purged. Reloading...");
            setTimeout(() => location.reload(), 150);
        });

        document.getElementById('hack-discord')?.addEventListener('click', () => {
            window.open("https://discord.gg/Se2ArWNe", "_blank");
        });
    }

    setupHackEventListeners();

    const modulesToRender = [];
    function renderLoop() {
        for (const module of modulesToRender) {
            module.onRender();
        }
        requestAnimationFrame(renderLoop);
    }
    renderLoop();
})();