minefuncheat- Fixed Fly & Teleport

we do a little trolling (fixed fly & tp 2026)

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         minefuncheat- Fixed Fly & Teleport
// @description  we do a little trolling (fixed fly & tp 2026)
// @version      4.0.6
// @author       FORGEX
// @match        *://minefun.io/*
// @grant        none
// @namespace https://greasyfork.org/users/1547600
// ==/UserScript==

(() => {
    "use strict";

    // ────────────────────────────────────────────────
    //  Các phần webpack_modules, style, hooks... giữ nguyên như cũ
    //  (bạn copy nguyên từ code cũ vào đây, mình không paste lại để ngắn gọn)
    // ────────────────────────────────────────────────

    // ── Chỉnh sửa và bổ sung các module quan trọng ──

    class Fly extends Module {
        constructor() {
            super("Fly", "Movement", {
                "Vertical Speed": 6,
                "Horizontal Speed": 8
            });
            this.toggleKey = "KeyF";
            this._original = {};
            document.addEventListener("keydown", e => {
                if (e.code === this.toggleKey && !e.repeat) this.toggle();
            });
        }

        onEnable() {
            const p = hooks.A?.gameWorld?.player;
            if (!p) return;
            this._original.gravity = p.velocity?.gravity ?? 23;
            this._original.moveSpeed = p.velocity?.moveSpeed ?? 4.5;
            console.log("[Fly] Đã lưu giá trị gốc → gravity:", this._original.gravity);
        }

        onDisable() {
            const p = hooks.A?.gameWorld?.player;
            if (!p) return;
            if (this._original.gravity !== undefined) p.velocity.gravity = this._original.gravity;
            if (this._original.moveSpeed !== undefined) p.velocity.moveSpeed = this._original.moveSpeed;
            p.velocity.fastMoveSpeed = 6.4;
            console.log("[Fly] Đã khôi phục gravity & speed gốc");
        }

        onRender() {
            const p = hooks.A?.gameWorld?.player;
            if (!p || !this.isEnabled) return;

            // Tắt các cơ chế chống bay phổ biến
            p.velocity.gravity = 0;
            p.collision.isGrounded = false;
            p.collision.wasOnGround = false;
            p.onGround = false;           // một số game dùng tên này
            p.isFalling = false;
            p.fallDistance = 0;

            // Lấy hướng nhìn (yaw + pitch)
            const yaw = p.rotation.y;
            const pitch = p.rotation.x;
            const forwardX = -Math.sin(yaw) * Math.cos(pitch);
            const forwardZ = Math.cos(yaw) * Math.cos(pitch);
            const upY = Math.sin(pitch);

            const hSpeed = this.options["Horizontal Speed"];
            const vSpeed = this.options["Vertical Speed"];

            // Di chuyển ngang theo hướng nhìn + phím W/S/A/D
            let vx = 0, vz = 0;
            if (p.inputs.forward) { vx += forwardX; vz += forwardZ; }
            if (p.inputs.backward) { vx -= forwardX; vz -= forwardZ; }
            if (p.inputs.left) { vx += forwardZ; vz -= forwardX; }
            if (p.inputs.right) { vx -= forwardZ; vz += forwardX; }

            const hLen = Math.hypot(vx, vz) || 1;
            vx = (vx / hLen) * hSpeed;
            vz = (vz / hLen) * hSpeed;

            p.velocity.velVec3.x = vx;
            p.velocity.velVec3.z = vz;

            // Di chuyển dọc (Space / Ctrl)
            if (p.inputs.jump) {
                p.velocity.velVec3.y = vSpeed;
            } else if (p.inputs.crouch) {
                p.velocity.velVec3.y = -vSpeed;
            } else {
                p.velocity.velVec3.y *= 0.92; // giảm dần để không bay vèo vèo
            }

            // Giữ cho player không bị kẹt hoặc rơi đột ngột
            p.velocity.velVec3.y = Math.max(-vSpeed * 1.5, Math.min(vSpeed * 1.5, p.velocity.velVec3.y));
        }
    }

    class TeleportModule extends Module {
        constructor() {
            super("Teleport", "Misc");
            this.key = "KeyT";
            document.addEventListener("keydown", e => {
                if (e.code === this.key && !e.repeat) {
                    this.tryTeleport();
                }
            });
        }

        tryTeleport() {
            const w = hooks.A?.gameWorld;
            if (!w?.player) {
                console.warn("[TP] Không tìm thấy player");
                return;
            }

            let blockPos = null;

            // Cách 1: Dùng outline / selection system (phổ biến nhất)
            const selSystem = w.systemsManager?.activeSystems?.find(s => 
                s.currBlockPos || s.selectedPos || s.outlinePos || s.hoverPos
            );
            if (selSystem?.currBlockPos) {
                blockPos = selSystem.currBlockPos;
            }

            // Cách 2: Nếu không có → tự raycast đơn giản (dùng three.js)
            if (!blockPos && w.threeScene?.camera && w.threeScene?.scene) {
                try {
                    const THREE = window.THREE || w.threeScene.THREE;
                    if (THREE) {
                        const cam = w.threeScene.camera;
                        const dir = new THREE.Vector3();
                        cam.getWorldDirection(dir);
                        const origin = new THREE.Vector3().copy(w.player.position);
                        origin.y += 1.62; // eye height

                        const raycaster = new THREE.Raycaster(origin, dir, 0, 120);
                        const intersects = raycaster.intersectObjects(w.threeScene.scene.children, true);

                        if (intersects.length > 0) {
                            const pt = intersects[0].point;
                            blockPos = {
                                x: Math.floor(pt.x),
                                y: Math.floor(pt.y),
                                z: Math.floor(pt.z)
                            };
                        }
                    }
                } catch(e) {
                    console.warn("[TP] Raycast thủ công lỗi:", e);
                }
            }

            if (!blockPos) {
                console.warn("[TP] Không tìm thấy block đang nhìn vào");
                return;
            }

            // Teleport lên trên block 1.5–2 block để tránh kẹt
            const dest = {
                x: blockPos.x + 0.5,
                y: blockPos.y + 2,
                z: blockPos.z + 0.5
            };

            console.log("[TP] Thử dịch chuyển tới:", dest);

            // Thử nhiều cách set position (tùy game engine)
            const tries = [
                () => { w.player.position.set(dest.x, dest.y, dest.z); },
                () => { w.player.physicsPosComp?.copyPos?.(dest); },
                () => { w.player.transform?.position?.set?.(dest.x, dest.y, dest.z); },
                () => { w.player._physics?.setPosition?.(dest); },
                () => { Object.assign(w.player.position, dest); w.player.physicsPosComp?.sync?.(); }
            ];

            let success = false;
            for (const fn of tries) {
                try {
                    fn();
                    success = true;
                    console.log("[TP] Thành công với cách:", fn.toString().slice(0,60)+"...");
                    break;
                } catch(e) {}
            }

            if (!success) {
                console.error("[TP] Không cách nào set position thành công. Kiểm tra console xem player có thuộc tính position/physics không.");
            }
        }
    }

    // ── Thêm Fly & Teleport vào module manager (thay thế phiên bản cũ) ──
    // Trong phần module_moduleManager.init(), thay thế hoặc thêm lại:

    // ... các module khác giữ nguyên ...

    module_moduleManager.addModule(new Fly());
    module_moduleManager.addModule(new TeleportModule());

    // Nếu bạn đã add trước đó thì có thể xóa dòng cũ và add lại 2 module này

    // ── Phần còn lại của script (Minebuns class, events, init...) giữ nguyên ──

    const main = new Minebuns();
})();