CraftNite Schematics Loader (Local + Picker + Auto Msg)

Load custom .schematic files into CraftNite and auto announce script author

// ==UserScript==
// @name         CraftNite Schematics Loader (Local + Picker + Auto Msg)
// @namespace    http://tampermonkey.net/
// @version      1.4
// @description  Load custom .schematic files into CraftNite and auto announce script author
// @license      All rights reserved
// @author       You
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // -------------------- Overlay --------------------
    const overlay = document.createElement('div');
    overlay.innerText = 'CraftNite Script Loaded ✅';
    overlay.style.position = 'fixed';
    overlay.style.top = '10px';
    overlay.style.right = '10px';
    overlay.style.padding = '6px 12px';
    overlay.style.backgroundColor = 'rgba(0,0,0,0.7)';
    overlay.style.color = 'lime';
    overlay.style.fontSize = '14px';
    overlay.style.fontFamily = 'Arial, sans-serif';
    overlay.style.zIndex = '9999';
    overlay.style.borderRadius = '5px';
    document.body.appendChild(overlay);

    // -------------------- Schematics --------------------
    const schematics = {
        hall: 'https://www.minecraft-schematics.com/download/26063',
        arena: 'https://www.minecraft-schematics.com/download/26010',
        person: null
    };

    let placementPos = null;
    let lastPickedSchematic = null;
    let personSchematic = null;

    const filePath = '/mnt/data/Adventure Time by Kaizen87.schem';
    fetch(filePath)
        .then(res => res.arrayBuffer())
        .then(buf => { personSchematic = new Uint8Array(buf); })
        .catch(err => console.error('Failed to load local schematic:', err));

    // -------------------- Chat Hook --------------------
    const originalSendChat = GAME.a865.sendChat;
    GAME.a865.sendChat = function(msg) {
        if (msg.startsWith('//')) {
            const args = msg.slice(2).split(' ');
            const command = args[0].toLowerCase();

            if (command === 'pos') {
                placementPos = GAME.a865.player.position.clone();
                addCustomChat('Schematics', `Placement position set to: ${placementPos.x.toFixed(1)}, ${placementPos.y.toFixed(1)}, ${placementPos.z.toFixed(1)}`);
            } else if (command === 'person') {
                if (!placementPos) return addCustomChat('Schematics', 'Error: Set position first with //pos');
                if (!personSchematic) return addCustomChat('Schematics', 'Error: Local schematic not loaded yet!');
                cheatnite.worldedit.loadSchematic(personSchematic, placementPos);
                addCustomChat('Schematics', 'Local schematic placed!');
            } else if (command === 'pick') {
                if (!placementPos) return addCustomChat('Schematics', 'Error: Set position first with //pos');
                const input = document.createElement('input');
                input.type = 'file';
                input.accept = '.schem';
                input.onchange = async (e) => {
                    const file = e.target.files[0];
                    if (!file) return;
                    const arrayBuffer = await file.arrayBuffer();
                    lastPickedSchematic = new Uint8Array(arrayBuffer);
                    cheatnite.worldedit.loadSchematic(lastPickedSchematic, placementPos);
                    addCustomChat('Schematics', `Picked schematic "${file.name}" placed!`);
                };
                input.click();
            } else if (command === 'last') {
                if (!placementPos) return addCustomChat('Schematics', 'Error: Set position first with //pos');
                if (!lastPickedSchematic) return addCustomChat('Schematics', 'Error: No schematic picked yet!');
                cheatnite.worldedit.loadSchematic(lastPickedSchematic, placementPos);
                addCustomChat('Schematics', 'Last picked schematic placed!');
            } else if (schematics[command]) {
                if (!placementPos) return addCustomChat('Schematics', 'Error: Set position first with //pos');
                loadSchematic(schematics[command], placementPos);
            } else {
                addCustomChat('Schematics', `Unknown command: ${command}`);
            }
        } else {
            originalSendChat.call(this, msg);
        }
    };

    // -------------------- Load Schematic --------------------
    async function loadSchematic(url, pos) {
        addCustomChat('Schematics', `Loading schematic from ${url}...`);
        const response = await fetch(url);
        if (!response.ok) return addCustomChat('Schematics', 'Failed to load schematic!');
        const arrayBuffer = await response.arrayBuffer();
        const schematicData = new Uint8Array(arrayBuffer);
        cheatnite.worldedit.loadSchematic(schematicData, pos);
        addCustomChat('Schematics', 'Schematic placed!');
    }

    // -------------------- Custom Chat --------------------
    function addCustomChat(sender, message) {
        GAME.a865.addChatMessage(`[${sender}] ${message}`);
    }

    // -------------------- Auto Message on Join --------------------
    const originalJoinRound = GAME.a865.joinRound;
    GAME.a865.joinRound = function(...args) {
        const result = originalJoinRound.apply(this, args);
        setTimeout(() => {
            originalSendChat.call(GAME.a865, 'using a script made by havvingyy and noorie');
        }, 2000); // Slight delay to ensure chat is ready
        return result;
    };

})();