MineFun.io 全功能模組選單(自動攻擊/挖礦/ESP/滑桿)

整合:自動攻擊、自瞄、滑桿速度調整、方塊ESP、自動挖礦等功能(按 M 開關選單)

// ==UserScript==
// @name         MineFun.io 全功能模組選單(自動攻擊/挖礦/ESP/滑桿)
// @namespace    http://tampermonkey.net/
// @version      3.0
// @description  整合:自動攻擊、自瞄、滑桿速度調整、方塊ESP、自動挖礦等功能(按 M 開關選單)
// @author       ChatGPT
// @match        *://minefun.io/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    const settings = {
        aimbot: false,
        headlock: false,
        esp: false,
        speedHack: false,
        autoAttack: false,
        autoMine: false,
        blockESP: false,
        aimRange: 50,
        moveSpeed: 1.0
    };

    // ===== 選單 UI =====
    const menu = document.createElement('div');
    menu.style = `
        position: fixed;
        top: 80px;
        left: 80px;
        background: rgba(0, 0, 0, 0.85);
        padding: 15px;
        color: white;
        font-family: monospace;
        font-size: 14px;
        border-radius: 10px;
        z-index: 9999;
        cursor: move;
    `;
    menu.innerHTML = `
        <h4>🧠 MineFun.io 模組</h4>
        <label><input type="checkbox" id="aimbot"> 自瞄</label><br>
        <label><input type="checkbox" id="headlock"> 鎖頭</label><br>
        <label><input type="checkbox" id="esp"> 敵人透視</label><br>
        <label><input type="checkbox" id="blockESP"> 方塊ESP</label><br>
        <label><input type="checkbox" id="speedHack"> 加速移動</label><br>
        <label><input type="checkbox" id="autoAttack"> 自動攻擊</label><br>
        <label><input type="checkbox" id="autoMine"> 自動挖礦</label><br><br>
        🔄 鎖定距離:<input type="range" id="rangeSlider" min="10" max="100" value="50"><span id="rangeVal">50</span><br>
        ⚡ 移動速度:<input type="range" id="speedSlider" min="0.5" max="3" step="0.1" value="1.0"><span id="speedVal">1.0</span><br>
        <p style="font-size:12px;">按 M 鍵 開關選單</p>
    `;
    document.body.appendChild(menu);

    // 拖曳功能
    let dragging = false, offsetX = 0, offsetY = 0;
    menu.addEventListener('mousedown', e => {
        dragging = true;
        offsetX = e.clientX - menu.offsetLeft;
        offsetY = e.clientY - menu.offsetTop;
    });
    document.addEventListener('mouseup', () => dragging = false);
    document.addEventListener('mousemove', e => {
        if (dragging) {
            menu.style.left = `${e.clientX - offsetX}px`;
            menu.style.top = `${e.clientY - offsetY}px`;
        }
    });

    // M 鍵開關
    let menuVisible = true;
    document.addEventListener('keydown', e => {
        if (e.key.toLowerCase() === 'm') {
            menuVisible = !menuVisible;
            menu.style.display = menuVisible ? 'block' : 'none';
        }
    });

    // 綁定選項
    [
        'aimbot', 'headlock', 'esp', 'speedHack',
        'autoAttack', 'autoMine', 'blockESP'
    ].forEach(id => {
        document.getElementById(id).addEventListener('change', e => {
            settings[id] = e.target.checked;
        });
    });

    // 滑桿控制
    const rangeSlider = document.getElementById('rangeSlider');
    const rangeVal = document.getElementById('rangeVal');
    rangeSlider.addEventListener('input', () => {
        settings.aimRange = parseInt(rangeSlider.value);
        rangeVal.textContent = settings.aimRange;
    });

    const speedSlider = document.getElementById('speedSlider');
    const speedVal = document.getElementById('speedVal');
    speedSlider.addEventListener('input', () => {
        settings.moveSpeed = parseFloat(speedSlider.value);
        speedVal.textContent = settings.moveSpeed;
    });

    // ===== 主功能循環 =====
    setInterval(() => {
        const player = window?.game?.player;
        const entities = window?.game?.entities || [];
        const world = window?.game?.world;

        if (!player) return;

        // 移動加速
        if (settings.speedHack && player.speed) {
            player.speed = settings.moveSpeed;
        }

        // 自動挖礦(模擬滑鼠左鍵)
        if (settings.autoMine) {
            document.dispatchEvent(new MouseEvent('mousedown', { bubbles: true }));
        }

        // 自動攻擊最近敵人
        const enemies = entities.filter(e => e.isEnemy && e.health > 0);
        if (settings.autoAttack && enemies.length > 0) {
            const nearest = enemies.sort((a, b) =>
                player.position.distanceTo(a.position) - player.position.distanceTo(b.position)
            )[0];
            if (nearest && player.attack) {
                player.attack(nearest);
            }
        }

        // 自瞄(最近敵人)
        if ((settings.aimbot || settings.headlock) && enemies.length > 0) {
            const nearby = enemies.filter(e =>
                player.position.distanceTo(e.position) < settings.aimRange
            );
            const target = nearby.sort((a, b) =>
                player.position.distanceTo(a.position) - player.position.distanceTo(b.position)
            )[0];
            if (target) {
                const lockPos = settings.headlock && target.head ? target.head : target.position;
                player.lookAt?.(lockPos);
            }
        }

        // 敵人ESP
        if (settings.esp) {
            enemies.forEach(e => {
                if (e.mesh?.material && !e.__espMarked) {
                    e.mesh.material.depthTest = false;
                    e.mesh.material.color?.set?.('#ff0000');
                    e.__espMarked = true;
                }
            });
        }

        // 方塊ESP / 採礦ESP
        if (settings.blockESP && world?.blocks) {
            world.blocks.forEach(b => {
                if (b.mesh?.material && !b.__espMarked) {
                    b.mesh.material.emissive?.set?.('#00ff00');
                    b.mesh.material.depthTest = false;
                    b.__espMarked = true;
                }
            });
        }

    }, 100);
})();
(function () {
    'use strict';

    const settings = {
        fly: false,
        speedHack: false,
        noclip: false,
        autoMine: false,
        infiniteJump: false,
        autoAttack: false,
        invisible: false,
        itemESP: false
    };

    const keysPressed = {};

    // 模組選單 UI
    const menu = document.createElement('div');
    menu.id = 'modMenu';
    menu.style = `
        position: fixed;
        top: 100px;
        left: 100px;
        background: rgba(0, 0, 0, 0.85);
        padding: 12px;
        color: white;
        font-family: monospace;
        font-size: 14px;
        border-radius: 10px;
        z-index: 9999;
        cursor: move;
    `;
    menu.innerHTML = `
        <h4>🧩 MineFun.io 模組</h4>
        <label><input type="checkbox" id="fly"> 飛行模式</label><br>
        <label><input type="checkbox" id="speed"> 加速</label><br>
        <label><input type="checkbox" id="noclip"> 穿牆</label><br>
        <label><input type="checkbox" id="autoMine"> ⛏ 自動挖掘</label><br>
        <label><input type="checkbox" id="infiniteJump"> 🦘 無限跳</label><br>
        <label><input type="checkbox" id="autoAttack"> 🗡 自動攻擊</label><br>
        <label><input type="checkbox" id="invisible"> 🫥 隱形模式</label><br>
        <label><input type="checkbox" id="itemESP"> 🧱 物資ESP</label><br>
        <p style="font-size:12px;">按 M 鍵 開/關選單</p>
    `;
    document.body.appendChild(menu);

    // 拖曳功能
    let dragging = false, offsetX = 0, offsetY = 0;
    menu.addEventListener('mousedown', e => {
        dragging = true;
        offsetX = e.clientX - menu.offsetLeft;
        offsetY = e.clientY - menu.offsetTop;
    });
    document.addEventListener('mouseup', () => dragging = false);
    document.addEventListener('mousemove', e => {
        if (dragging) {
            menu.style.left = `${e.clientX - offsetX}px`;
            menu.style.top = `${e.clientY - offsetY}px`;
        }
    });

    // 選單顯示開關
    let menuVisible = true;
    document.addEventListener('keydown', e => {
        keysPressed[e.key] = true;
        if (e.key.toLowerCase() === 'm') {
            menuVisible = !menuVisible;
            menu.style.display = menuVisible ? 'block' : 'none';
        }
    });
    document.addEventListener('keyup', e => {
        keysPressed[e.key] = false;
    });

    // 綁定 checkbox
    Object.keys(settings).forEach(id => {
        const el = document.getElementById(id);
        if (el) el.addEventListener('change', e => settings[id] = e.target.checked);
    });

    // 主功能迴圈
    setInterval(() => {
        const player = window?.game?.player;
        const world = window?.game?.world;
        if (!player) return;

        // 飛行模式
        if (settings.fly) {
            player.velocity.y = 0;
            if (keysPressed[' ']) player.position.y += 0.2;
            if (keysPressed['Shift']) player.position.y -= 0.2;
        }

        // 加速
        if (settings.speedHack) player.speed = 2.5;

        // 穿牆
        if (settings.noclip) player.noClip = true;

        // 無限跳
        if (settings.infiniteJump) player.canJump = true;

        // 自動挖掘(模擬滑鼠點擊)
        if (settings.autoMine) {
            const evt = new MouseEvent('mousedown', { bubbles: true });
            document.dispatchEvent(evt);
        }

        // 隱形(若支援材質屬性)
        if (settings.invisible && player.mesh?.material) {
            player.mesh.material.transparent = true;
            player.mesh.material.opacity = 0.1;
        }

        // 自動攻擊最近敵人(假設 game.entities 有敵人)
        if (settings.autoAttack && window?.game?.entities) {
            const enemies = game.entities.filter(e => e.isEnemy && e.health > 0);
            const target = enemies.sort((a, b) =>
                player.position.distanceTo(a.position) - player.position.distanceTo(b.position)
            )[0];
            if (target) {
                player.lookAt(target.position);
                player.attack?.(target);
            }
        }

        // 物資 ESP(高亮物品方塊)
        if (settings.itemESP && world?.items) {
            world.items.forEach(item => {
                if (item.mesh?.material) {
                    item.mesh.material.emissive?.set?.('#ffff00');
                    item.mesh.material.depthTest = false;
                }
            });
        }

    }, 100);
})();