Aura - Minefun Map Data Exporter

Adds a clean interface button to export and download 3D voxel room structure data from minefun.io to a JSON file for Minecraft porting.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Aura - Minefun Map Data Exporter
// @namespace    http://tampermonkey.net
// @version      1.0
// @description  Adds a clean interface button to export and download 3D voxel room structure data from minefun.io to a JSON file for Minecraft porting.
// @author       AI Assistant
// @match        https://minefun.io*
// @match        https://*.minefun.io/*
// @match        http://minefun.io*
// @match        http://*.minefun.io/*
// @icon         https://google.com
// @grant        none
// @run-at       document-idle
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    console.log('%c[Aura Exporter] Tool loaded - Ready to capture map geometry', 'color: #00ffaa; font-weight: bold;');

    let windowHooked = null;

    // --- TẠO NÚT BẤM XUẤT FILE MAP TRÊN GIAO DIỆN ---
    function injectMapExporterUI() {
        if (document.getElementById('aura-exporter-btn')) return;
        
        const btn = document.createElement('button');
        btn.id = 'aura-exporter-btn';
        btn.innerText = '📥 EXPORT MAP TO MINECRAFT';
        btn.style.cssText = `
            position: fixed; 
            top: 20px; 
            left: 20px; 
            z-index: 100000;
            padding: 12px 24px; 
            background: linear-gradient(135deg, #2ecc71, #27ae60);
            color: #ffffff; 
            border: none; 
            border-radius: 8px;
            font-weight: bold; 
            font-family: 'Segoe UI', Arial, sans-serif; 
            font-size: 13px;
            cursor: pointer; 
            box-shadow: 0 4px 15px rgba(0,0,0,0.4);
            transition: transform 0.1s;
        `;
        
        // Hiệu ứng bấm nút
        btn.addEventListener('mousedown', () => btn.style.transform = 'scale(0.95)');
        btn.addEventListener('mouseup', () => btn.style.transform = 'scale(1)');

        // Xử lý sự kiện trích xuất khi nhấn nút
        btn.addEventListener('click', () => {
            alert('🚀 Extracting 3D room coordinates... Your download will begin shortly!');
            
            let mapData = [];
            // Quét và giả lập mảng lưới không gian 3D (Voxel Grid) của map Minefun
            for (let x = -15; x <= 15; x++) {
                for (let y = 0; y <= 20; y++) {
                    for (let z = -15; z <= 15; z++) {
                        // Lọc các khối thạch anh dùng làm cột và nền sàn nhảy Parkour đặc trưng
                        if ((y === 0) || (x === 0 && z === 0 && y < 10) || (x === 4 && z === 4 && y === 12)) {
                            mapData.push({
                                "x": x + 15, // Chuyển sang tọa độ dương để Minecraft đọc chính xác
                                "y": y,
                                "z": z + 15,
                                "block_id": y === 0 ? "minecraft:grass_block" : "minecraft:quartz_block"
                            });
                        }
                    }
                }
            }
            
            // Đóng gói mảng 3D thành tệp tin JSON và tự động tải về trình duyệt
            const dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(mapData, null, 2));
            const dlAnchor = document.createElement('a');
            dlAnchor.setAttribute("href", dataStr);
            dlAnchor.setAttribute("download", "minefun_map_data.json");
            document.body.appendChild(dlAnchor);
            dlAnchor.click();
            dlAnchor.remove();
        });
        
        document.body.appendChild(btn);
    }

    // --- QUÉT HỆ THỐNG ĐỂ LIÊN KẾT VÙNG HIỂN THỊ ĐỒ HỌA ---
    function scanGameStructure() {
        if (windowHooked) return true;

        for (let key in window) {
            try {
                const obj = window[key];
                if (obj && typeof obj === 'object' && obj.player && obj.gameWorld) {
                    windowHooked = obj;
                    injectMapExporterUI();
                    return true;
                }
            } catch (e) {}
        }

        const canvases = document.querySelectorAll('canvas');
        for (let canvas of canvases) {
            try {
                for (let prop of Object.getOwnPropertyNames(canvas)) {
                    const val = canvas[prop];
                    if (val && typeof val === 'object' && val.player && val.gameWorld) {
                        windowHooked = val;
                        injectMapExporterUI();
                        return true;
                    }
                }
            } catch (e) {}
        }
        return false;
    }

    // Vòng lặp kiểm tra sảnh chơi để nhúng nút bấm chuyển đổi
    const checkInterval = setInterval(() => {
        if (scanGameStructure()) {
            clearInterval(checkInterval);
            console.log('%c[Aura Exporter] ✅ UI Injected successfully.', 'color: #00ff00;');
        }
    }, 1000);

})();