Client for my script 🥈 (second)

Started by QUITTED_VCMP, Today at 04:38 PM

Previous topic - Next topic

QUITTED_VCMP

Event types

package vcmp.client;

public enum VCMPEventType {
    CONNECTED,
    DISCONNECTED,
    DIALOG_REQUEST,
    LOGIN_SUCCESS,
    LOGIN_FAILED,
    REGISTRATION_SUCCESS,
    CHAT_MESSAGE,
    PLAYER_JOIN,
    PLAYER_LEAVE,
    PLAYER_DEATH,
    PLAYER_KILL,
    STATS_UPDATE,
    ADMIN_MESSAGE,
    ERROR,
    UNKNOWN
}














Event listner

package vcmp.client;

public interface VCMPEventListener {
    void onVCMPEvent(VCMPEventType eventType, String data);
}












Gui client


package vcmp.client;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class VCMPClientGUI extends JFrame {
    private VCMPClient client;
   
    // GUI Components
    private JTextArea chatArea;
    private JTextField messageField;
    private JTextField hostField, portField, nameField, passwordField;
    private JButton connectButton, disconnectButton, sendButton;
    private JButton loginButton, registerButton;
    private JLabel statsLabel;
   
    // Admin panel components
    private JPanel adminPanel;
    private JTextField adminTargetField, adminParamField;
    private JButton kickButton, banButton, moneyButton, tpButton, adminButton;
   
    public VCMPClientGUI() {
        initializeGUI();
    }
   
    private void initializeGUI() {
        setTitle("VCMP Java Client - GTA Vice City Multiplayer");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
       
        // Connection panel
        JPanel connectionPanel = createConnectionPanel();
       
        // Chat area
        chatArea = new JTextArea(20, 50);
        chatArea.setEditable(false);
        chatArea.setBackground(new Color(240, 240, 240));
        JScrollPane scrollPane = new JScrollPane(chatArea);
       
        // Message panel
        JPanel messagePanel = createMessagePanel();
       
        // Stats panel
        JPanel statsPanel = createStatsPanel();
       
        // Admin panel
        adminPanel = createAdminPanel();
        adminPanel.setVisible(false); // Hidden until admin logs in
       
        // Main layout
        JPanel topPanel = new JPanel(new BorderLayout());
        topPanel.add(connectionPanel, BorderLayout.NORTH);
        topPanel.add(statsPanel, BorderLayout.SOUTH);
       
        add(topPanel, BorderLayout.NORTH);
        add(scrollPane, BorderLayout.CENTER);
        add(messagePanel, BorderLayout.SOUTH);
        add(adminPanel, BorderLayout.EAST);
       
        setupEventListeners();
        pack();
        setLocationRelativeTo(null);
    }
   
    private JPanel createConnectionPanel() {
        JPanel panel = new JPanel(new FlowLayout());
       
        hostField = new JTextField("localhost", 10);
        portField = new JTextField("8192", 5);
        nameField = new JTextField("Player", 10);
        passwordField = new JTextField("", 10);
        passwordField.setToolTipText("Enter password for login/register");
       
        connectButton = new JButton("Connect");
        disconnectButton = new JButton("Disconnect");
        loginButton = new JButton("Login");
        registerButton = new JButton("Register");
       
        disconnectButton.setEnabled(false);
        loginButton.setEnabled(false);
        registerButton.setEnabled(false);
       
        panel.add(new JLabel("Host:"));
        panel.add(hostField);
        panel.add(new JLabel("Port:"));
        panel.add(portField);
        panel.add(new JLabel("Name:"));
        panel.add(nameField);
        panel.add(new JLabel("Pass:"));
        panel.add(passwordField);
        panel.add(connectButton);
        panel.add(disconnectButton);
        panel.add(loginButton);
        panel.add(registerButton);
       
        return panel;
    }
   
    private JPanel createStatsPanel() {
        JPanel panel = new JPanel(new FlowLayout());
        statsLabel = new JLabel("Not connected");
        panel.add(statsLabel);
        return panel;
    }
   
    private JPanel createMessagePanel() {
        JPanel panel = new JPanel(new BorderLayout());
        messageField = new JTextField();
        sendButton = new JButton("Send");
       
        messageField.setEnabled(false);
        sendButton.setEnabled(false);
       
        panel.add(messageField, BorderLayout.CENTER);
        panel.add(sendButton, BorderLayout.EAST);
        return panel;
    }
   
    private JPanel createAdminPanel() {
        JPanel panel = new JPanel(new GridLayout(6, 2, 5, 5));
        panel.setBorder(BorderFactory.createTitledBorder("Admin Commands"));
       
        adminTargetField = new JTextField();
        adminParamField = new JTextField();
       
        kickButton = new JButton("Kick Player");
        banButton = new JButton("Ban Player");
        moneyButton = new JButton("Give Money");
        tpButton = new JButton("Teleport To");
        adminButton = new JButton("Set Admin Level");
       
        panel.add(new JLabel("Target ID:"));
        panel.add(adminTargetField);
        panel.add(new JLabel("Param/Reason:"));
        panel.add(adminParamField);
        panel.add(kickButton);
        panel.add(banButton);
        panel.add(moneyButton);
        panel.add(tpButton);
        panel.add(adminButton);
       
        return panel;
    }
   
    private void setupEventListeners() {
        connectButton.addActionListener(e -> connectToServer());
        disconnectButton.addActionListener(e -> disconnectFromServer());
        loginButton.addActionListener(e -> loginToServer());
        registerButton.addActionListener(e -> registerToServer());
        sendButton.addActionListener(e -> sendChatMessage());
        messageField.addActionListener(e -> sendChatMessage());
       
        // Admin command listeners
        kickButton.addActionListener(e -> executeAdminCommand("kick"));
        banButton.addActionListener(e -> executeAdminCommand("ban"));
        moneyButton.addActionListener(e -> executeAdminCommand("givemoney"));
        tpButton.addActionListener(e -> executeAdminCommand("tp"));
        adminButton.addActionListener(e -> executeAdminCommand("setadmin"));
    }
   
    private void connectToServer() {
        String host = hostField.getText();
        int port = Integer.parseInt(portField.getText());
        String name = nameField.getText();
       
        if (name.isEmpty()) {
            showError("Player name cannot be empty!");
            return;
        }
       
        client = new VCMPClient(host, port, name);
        client.addEventListener(new VCMPEventListener() {
            @Override
            public void onVCMPEvent(VCMPEventType eventType, String data) {
                SwingUtilities.invokeLater(() -> handleClientEvent(eventType, data));
            }
        });
       
        if (client.connect()) {
            connectButton.setEnabled(false);
            disconnectButton.setEnabled(true);
            loginButton.setEnabled(true);
            registerButton.setEnabled(true);
            hostField.setEnabled(false);
            portField.setEnabled(false);
            nameField.setEnabled(false);
        }
    }
   
    private void handleClientEvent(VCMPEventType eventType, String data) {
        String timestamp = java.time.LocalTime.now().format(java.time.format.DateTimeFormatter.ofPattern("HH:mm:ss"));
       
        switch (eventType) {
            case CONNECTED:
                appendToChat("[" + timestamp + "] ✓ " + data);
                break;
               
            case DISCONNECTED:
                appendToChat("[" + timestamp + "] ✗ " + data);
                resetUI();
                break;
               
            case LOGIN_SUCCESS:
                appendToChat("[" + timestamp + "] 🔑 " + data);
                handleLoginSuccess();
                break;
               
            case LOGIN_FAILED:
                appendToChat("[" + timestamp + "] ❌ " + data);
                break;
               
            case REGISTRATION_SUCCESS:
                appendToChat("[" + timestamp + "] ✅ " + data);
                handleLoginSuccess();
                break;
               
            case CHAT_MESSAGE:
                appendToChat("[" + timestamp + "] " + data);
                break;
               
            case PLAYER_JOIN:
                appendToChat("[" + timestamp + "] 🎮 " + data + " joined the game");
                break;
               
            case PLAYER_LEAVE:
                appendToChat("[" + timestamp + "] 🚪 " + data + " left the game");
                break;
               
            case PLAYER_DEATH:
                appendToChat("[" + timestamp + "] 💀 " + data);
                break;
               
            case PLAYER_KILL:
                appendToChat("[" + timestamp + "] 🔫 " + data);
                break;
               
            case STATS_UPDATE:
                updateStatsDisplay();
                break;
               
            case ERROR:
                appendToChat("[" + timestamp + "] ⚠ " + data);
                break;
               
            default:
                appendToChat("[" + timestamp + "] ? " + data);
                break;
        }
    }
   
    private void handleLoginSuccess() {
        messageField.setEnabled(true);
        sendButton.setEnabled(true);
        loginButton.setEnabled(false);
        registerButton.setEnabled(false);
        passwordField.setEnabled(false);
       
        // Show admin panel if user has admin privileges
        if (client.getAdminLevel() > 0) {
            adminPanel.setVisible(true);
            pack(); // Resize window to fit admin panel
        }
       
        updateStatsDisplay();
    }
   
    private void updateStatsDisplay() {
        String stats = String.format("Kills: %d | Deaths: %d | Money: $%d | Admin: %d",
                                  client.getKills(), client.getDeaths(),
                                  client.getMoney(), client.getAdminLevel());
        statsLabel.setText(stats);
    }
   
    private void loginToServer() {
        String password = passwordField.getText();
        if (password.isEmpty()) {
            showError("Password cannot be empty!");
            return;
        }
        client.login(password);
    }
   
    private void registerToServer() {
        String password = passwordField.getText();
        if (password.length() < 6) {
            showError("Password must be at least 6 characters!");
            return;
        }
        client.register(password);
    }
   
    private void sendChatMessage() {
        String message = messageField.getText().trim();
        if (!message.isEmpty() && client != null && client.isLoggedIn()) {
            client.sendChatMessage(message);
            messageField.setText("");
        }
    }
   
    private void executeAdminCommand(String command) {
        try {
            int targetId = Integer.parseInt(adminTargetField.getText());
            String param = adminParamField.getText();
           
            switch (command) {
                case "kick":
                    if (param.isEmpty()) {
                        showError("Please enter a kick reason!");
                        return;
                    }
                    client.kickPlayer(targetId, param);
                    break;
                   
                case "ban":
                    if (param.isEmpty()) {
                        showError("Please enter a ban reason!");
                        return;
                    }
                    client.banPlayer(targetId, param);
                    break;
                   
                case "givemoney":
                    int amount = Integer.parseInt(param);
                    client.giveMoney(targetId, amount);
                    break;
                   
                case "tp":
                    client.teleportToPlayer(targetId);
                    break;
                   
                case "setadmin":
                    int level = Integer.parseInt(param);
                    client.setAdminLevel(targetId, level);
                    break;
            }
           
            adminTargetField.setText("");
            adminParamField.setText("");
           
        } catch (NumberFormatException e) {
            showError("Invalid number format!");
        }
    }
   
    private void disconnectFromServer() {
        if (client != null) {
            client.disconnect();
        }
        resetUI();
    }
   
    private void resetUI() {
        connectButton.setEnabled(true);
        disconnectButton.setEnabled(false);
        loginButton.setEnabled(false);
        registerButton.setEnabled(false);
        messageField.setEnabled(false);
        sendButton.setEnabled(false);
        hostField.setEnabled(true);
        portField.setEnabled(true);
        nameField.setEnabled(true);
        passwordField.setEnabled(true);
        adminPanel.setVisible(false);
        statsLabel.setText("Not connected");
    }
   
    private void appendToChat(String message) {
        chatArea.append(message + "\n");
        chatArea.setCaretPosition(chatArea.getDocument().getLength());
    }
   
    private void showError(String message) {
        JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
    }
   
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new VCMPClientGUI().setVisible(true);
        });
    }
}














Depidence.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                            http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
   
    <groupId>com.vcmp</groupId>
    <artifactId>vcmp-client</artifactId>
    <version>1.0.0</version>
   
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
   

Can u tell me it's work or not pls 😭