KeineAhnung4u / Chat Spam Control with Player Info

// ==UserScript==
// @name         Chat Spam Control with Player Info
// @namespace    https://openuserjs.org/user/KeineAhnung4u
// @version      1.0
// @description  Chat spamming control with UI elements and player info
// @author       KeineAhnung4u
// @match        https://craftnite.io/*
// @grant        none
// @license MIT
// @copyright 2025, KeineAhnung4u (https://openuserjs.org/users/KeineAhnung4u)
// ==/UserScript==

(function() {
    'use strict';

    let cheatnite = {};
    let spamInterval = null;
    let isInputVisible = true;
    let playerInfo = {};  // To store IP address and coordinates for each player

    // Add spam control UI elements
    const chatBox = document.createElement('div');
    chatBox.style.position = 'fixed';
    chatBox.style.top = '50%';
    chatBox.style.left = '50%';
    chatBox.style.transform = 'translate(-50%, -50%)';
    chatBox.style.zIndex = '1000';
    chatBox.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';
    chatBox.style.padding = '10px';
    chatBox.style.borderRadius = '10px';
    chatBox.style.display = 'flex';
    chatBox.style.flexDirection = 'column';
    chatBox.style.alignItems = 'center';

    const inputField = document.createElement('input');
    inputField.type = 'text';
    inputField.placeholder = 'Enter your message';
    inputField.style.marginBottom = '10px';
    inputField.style.padding = '5px';

    const spamButton = document.createElement('button');
    spamButton.innerText = 'Spam';
    spamButton.style.marginBottom = '5px';
    spamButton.onclick = () => {
        const message = inputField.value.trim();
        if (message) {
            // Stop any existing spam
            if (spamInterval) {
                clearInterval(spamInterval);
                spamInterval = null;
            }
            // Start new spam
            spamInterval = setInterval(() => {
                var e = new a201();
                e.msg = message;
                if (G.socket && typeof G.socket.send === 'function') {
                    G.socket.send(e.a614());
                }
            }, 60);
        }
    };

    const stopButton = document.createElement('button');
    stopButton.innerText = 'Stop';
    stopButton.style.marginBottom = '5px';
    stopButton.onclick = () => {
        if (spamInterval) {
            clearInterval(spamInterval);
            spamInterval = null;
        }
    };

    const clearButton = document.createElement('button');
    clearButton.innerText = 'Clear';
    clearButton.style.marginBottom = '5px';
    clearButton.onclick = () => {
        inputField.value = '';
    };

    const playerButton = document.createElement('button');
    playerButton.innerText = 'Players';
    playerButton.style.marginBottom = '5px';
    playerButton.onclick = () => {
        startPlayerInfoSpam();
    };

    chatBox.appendChild(inputField);
    chatBox.appendChild(spamButton);
    chatBox.appendChild(stopButton);
    chatBox.appendChild(clearButton);
    chatBox.appendChild(playerButton);
    document.body.appendChild(chatBox);

    function startPlayerInfoSpam() {
        if (spamInterval) {
            clearInterval(spamInterval);
        }
        spamInterval = setInterval(() => {
            let players = getOtherPlayers();
            players.forEach(player => {
                if (player.name && player.name.toLowerCase() === "unnamed") {
                    if (!playerInfo[player.hitbox.uuid]) {
                        playerInfo[player.hitbox.uuid] = {
                            ip: `192.168.${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}`,
                            coords: `${(Math.random() * 180 - 90).toFixed(6)}, ${(Math.random() * 360 - 180).toFixed(6)}`
                        };
                    }
                    let playerWorldPosition = new THREE.Vector3();
                    player.a240.getWorldPosition(playerWorldPosition);
                    var e = new a201();
                    e.msg = `Player: ${player.name}, Location: ${playerWorldPosition.toArray()}, IP: ${playerInfo[player.hitbox.uuid].ip}, Coordinates: ${playerInfo[player.hitbox.uuid].coords}`;
                    if (G.socket && typeof G.socket.send === 'function') {
                        G.socket.send(e.a614());
                    }
                }
            });
        }, 1000); // Send player information as message every second
    }

    function getOtherPlayers() {
        return G.othera822ers.filter(player => player && player.a240).map(player => {
            if (!player.hitbox) {
                var hitbox = new THREE.Mesh(
                    new THREE.BoxGeometry(3, 10, 3),
                    new THREE.MeshBasicMaterial({ visible: true }) // Make hitboxes visible
                );
                player.hitbox = hitbox;
                player.a240.add(hitbox);
            }
            return player;
        });
    }

    // Prevent default WASD, space, and other keys when input field is focused
    inputField.addEventListener('keydown', (event) => {
        console.log(`Key pressed: ${event.key}`); // Log pressed key to console

        // Allow all alphanumeric keys and control shortcuts
        if (!event.ctrlKey && (event.key.length === 1 && event.key.match(/[a-z0-9]/i) || event.key === ' ')) {
            // Prevent game actions but allow typing
            event.preventDefault();
            event.stopPropagation();
            inputField.value += event.key;
        }
    });

    // Enable paste functionality
    inputField.addEventListener('paste', (event) => {
        // Allow default paste behavior
        setTimeout(() => {
            const pastedText = inputField.value;
            console.log(`Pasted text: ${pastedText}`);
        }, 0);
    });

    // Hide and show input box with key '7'
    document.addEventListener('keydown', (event) => {
        if (event.key === '7') {
            isInputVisible = !isInputVisible;
            chatBox.style.display = isInputVisible ? 'flex' : 'none';
        }
    });

    // G.socket.onmessage error handling
    if (G.socket) {
        G.socket.onmessage = function(event) {
            try {
                // Existing logic
            } catch (error) {
                console.error('Error processing message:', error);
            }
        };
    } else {
        console.error('G.socket is null or undefined');
    }
})();