Проблема с запуском Spigot1.16.5 плагина

Рейтинг: 0Ответов: 1Опубликовано: 09.02.2023

Ошибка:

org.bukkit.plugin.InvalidPluginException: Abnormal plugin type
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:80) ~[spigot-1-16-5.jar:3004-Spigot-138d451-e5cb519]
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:135) ~[spigot-1-16-5.jar:3004-Spigot-138d451-e5cb519]
    at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:394) ~[spigot-1-16-5.jar:3004-Spigot-138d451-e5cb519]
    at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:301) ~[spigot-1-16-5.jar:3004-Spigot-138d451-e5cb519]
    at org.bukkit.craftbukkit.v1_16_R3.CraftServer.loadPlugins(CraftServer.java:382) ~[spigot-1-16-5.jar:3004-Spigot-138d451-e5cb519]
    at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:185) ~[spigot-1-16-5.jar:3004-Spigot-138d451-e5cb519]
    at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:809) ~[spigot-1-16-5.jar:3004-Spigot-138d451-e5cb519]
    at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[spigot-1-16-5.jar:3004-Spigot-138d451-e5cb519]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_341]
Caused by: java.lang.InstantiationException: dab.dab.Dab
    at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_341]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[spigot-1-16-5.jar:3004-Spigot-138d451-e5cb519]
    ... 8 more
Caused by: java.lang.NoSuchMethodException: dab.dab.Dab.<init>()
    at java.lang.Class.getConstructor0(Unknown Source) ~[?:1.8.0_341]
    at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_341]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[spigot-1-16-5.jar:3004-Spigot-138d451-e5cb519]
    ... 8 more

Main:

package dab.dab;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.File;
import java.io.IOException;
import java.util.List;


public class Dab extends JavaPlugin implements Listener {
    @Override
    public void onEnable(){
        getLogger().info("[DAB] has been enabled!");
    }

    public void onDisable() {
        getLogger().info("[DAB] has been disabled!");
    }


    private final File arenasFile;
    private final YamlConfiguration arenasConfig;
    public Dab(File arenasFile, YamlConfiguration arenasConfig) {
        this.arenasFile = arenasFile;
        this.arenasConfig = arenasConfig;
    }

    public void addArena(String name, int size, int lobbyX, int lobbyY, int lobbyZ, int startX, int startY, int startZ) {
        arenasConfig.set(name + ".size", size);
        arenasConfig.set(name + ".lobby.world", "Dab");
        arenasConfig.set(name + ".lobby.x", lobbyX);
        arenasConfig.set(name + ".lobby.y", lobbyY);
        arenasConfig.set(name + ".lobby.z", lobbyZ);
        arenasConfig.set(name + ".start.world", "Dab");
        arenasConfig.set(name + ".start.x", startX);
        arenasConfig.set(name + ".start.y", startY);
        arenasConfig.set(name + ".start.z", startZ);
        try {
            arenasConfig.save(arenasFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    private static final int TARGET_SCORE = 5;
    private final int BOARD_SIZE = 10;
    public int[][] board = new int[BOARD_SIZE][BOARD_SIZE];
    public int currentPlayer = 1;
    int completedBoxes = 0;

    public void PubStartGame(DabArena arena) {
        // Clear the arena's board
        arena.clearBoard(board, completedBoxes);

        // Get a list of all players in the arena
        List<DabPlayer> players = arena.getPlayers();
    }

    public DabArena getArena(String arenaName) {
        ConfigurationSection arenaSection = arenasConfig.getConfigurationSection("arenas." + arenaName);
        if (arenaSection == null) {
            return null;
        }

        DabArena arena = new DabArena(arenaName, arenaSection.getInt("size"), arenaSection.getInt("lobby.x"), arenaSection.getInt("lobby.y"), arenaSection.getInt("lobby.z"),
                arenaSection.getInt("start.x"), arenaSection.getInt("start.y"), arenaSection.getInt("start.z"));

        return arena;
    }


    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        Block block = event.getClickedBlock();
        if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
            drawLine(player, block, true);
        } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
            drawLine(player, block, false);
        }
    }

    private void drawLine(Player player, Block block, boolean isHorizontal) {
        int x = block.getX();
        int y = block.getY();
        int z = block.getZ();
        if (isHorizontal == true) {
            block.getRelative(1, 0, 0).setType(Material.STONE);
            board[x][z] = currentPlayer;
        } else {
            block.getRelative(0, 0, 1).setType(Material.STONE);
            board[x][z] = currentPlayer;
        }
        checkForCompletedBox(x, y, z);
        currentPlayer = (currentPlayer == 1) ? 2 : 1;
    }

    private void checkForCompletedBox(int x, int y, int z) {

        // Check if the left line is filled
        if (x > 0 && board[x - 1][z] == currentPlayer && board[x][z] == currentPlayer) {
            // Check if the bottom line is filled
            if (z > 0 && board[x][z - 1] == currentPlayer) {
                completedBoxes++;
            }
            // Check if the top line is filled
            if (z < BOARD_SIZE - 1 && board[x][z + 1] == currentPlayer) {
                completedBoxes++;
            }
        }
        // Check if the right line is filled
        if (x < BOARD_SIZE - 1 && board[x + 1][z] == currentPlayer && board[x][z] == currentPlayer) {
            // Check if the bottom line is filled
            if (z > 0 && board[x][z - 1] == currentPlayer) {
                completedBoxes++;
            }
            // Check if the top line is filled
            if (z < BOARD_SIZE - 1 && board[x][z + 1] == currentPlayer) {
                completedBoxes++;
            }
        }

        if (completedBoxes > 0) {
            // Add points to the current player
            int[] playerScores = new int[0];
            playerScores[currentPlayer] += completedBoxes;
            // Check if a player has reached the target score
            if (playerScores[currentPlayer] >= TARGET_SCORE) {
                // End the game and declare the winner
                boolean gameOver = true;
                int winner = currentPlayer;

            }
        }
    }


}

Plugin.yml:

name: Dab
version: 1.16.5
main: dab.dab.Dab
api-version: 1.16

Пробовал менять плагин yml, но не с версией 1.16, не с 1.16.5 не работает. Спрашивал у чат гпт, искал в интернете, но видимо для ру-англо нета это не популярная проблема.

Ответы

▲ 0

Bukkit требует конструктор, который не принимает параметров:

Caused by: java.lang.NoSuchMethodException: dab.dab.Dab.()

По умолчанию, если нет конструкторов, то конструктор без параметров уже существует. У вас же есть тот, который принимает:

public Dab(File arenasFile, YamlConfiguration arenasConfig) {
        this.arenasFile = arenasFile;
        this.arenasConfig = arenasConfig;
    }

Следовательно, нужно создать ещё один, что-то вроде

public Dab() { }