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.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu budete musieť nainštalovať rozšírenie, ako je napríklad Tampermonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==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);

})();