недопустимая ошибка плагина plugin.yml bukkit

Эй, я просмотрел эту проблему на нескольких сайтах, прежде чем опубликовать это, и я сделал все правильно, но я все еще получаю эту ошибку, когда пытаюсь загрузить свой плагин, он говорит, что ошибка не может быть недействительной plugin.yml, а затем просто дает куча строк кода и прочее (я предполагаю, что код в файлах bukkit и еще много чего, и да, мой plugin.yml сохраняется в папке src, а не в пакете, и когда я его экспортирую, я экспортирую его как .jar , в любом случае, вот мой файл plugin.yml

name: ProtHome
main: com.yahoo.m1kesanders.ProtHome.ProtHome 
version: 1.0.0
Description: A simple /home plugin 

commands:


  sethome:
    Description: sets players home

  home:
    Description: teleports player to their home

и я также использовал 4 пробела, и никакие клавиши табуляции не использовались два пробела после команд: и еще два после каждой команды

и вот мой код для плагина в eclipse на случай, если он вам нужен только для проверки имени, а что нет

package com.yahoo.m1kesanders.ProtHome;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;

public class ProtHome extends JavaPlugin{

    public static ProtHome plugin;

    public File folder = plugin.getDataFolder();
    public static File file = new File("Homes.yml");
    public static YamlConfiguration Homes = new YamlConfiguration();

    public void onEnable(){

        if(!folder.exists()){

            folder.mkdir();
        }

        if(!file.exists()){

            file.mkdir();
        }

        try {
            Homes.load(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvalidConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public boolean onCommand(CommandSender cmdsender, Command cmd, Player player) throws FileNotFoundException, IOException, InvalidConfigurationException{

        if(cmdsender.equals("sethome")){

            ProtHome.Homes.load(ProtHome.file);

            Homes.set(player.getName() + ".x", player.getLocation().getBlockX());
            Homes.set(player.getName() + ".y", player.getLocation().getBlockY());
            Homes.set(player.getName() + ".z", player.getLocation().getBlockZ());
            Homes.set(player.getName() + ".world", player.getWorld().getName());

            ProtHome.Homes.save(ProtHome.file);
        }

        else if(cmdsender.equals("home")){

            int x = (int) Homes.get(player.getName() + ".x");
            int y = (int) Homes.get(player.getName() + ".y");
            int z = (int) Homes.get(player.getName() + ".z");

            String world = (String) Homes.get(player.getName() + ".world");

            World realworld = Bukkit.getServer().getWorld(world);

            Location loc = new Location(realworld,x,y,z);

            player.teleport(loc);

        }

        return false;

    }

}

если вы, ребята, можете мне помочь, это будет много значить, спасибо за чтение


person user3471511    schedule 26.06.2014    source источник
comment
Во-первых, убедитесь, что вы используете пробелы, а не табуляцию. Во-вторых, может убрать / в описании? В-третьих, убедитесь, что plugin.yml находится НЕ в каких-либо пакетах, а в вашем src, и, наконец, попробуйте реэкспортировать плагин.   -  person Jojodmo    schedule 29.06.2014


Ответы (3)


Частично проблема может заключаться в том, что вы написали D в Description: с большой буквы, когда в примере bukkit plugin.yml все ключи в нижнем регистре.

Попробуйте экспортировать со строчной буквой d, хотя это может и не быть проблемой, это всегда помогает использовать правильную грамматику кодирования. Bukkit очень требователен к своему парсеру yaml.

Кроме того, для дальнейшего использования, обычно имена пакетов не имеют заглавных букв, только классы.

Ваш пакет com.yahoo.m1kesanders.ProtHome

Большинство пакетов com.yahoo.m1kesanders.prothome

Я не могу быть уверен, но обычно для плагинов bukkit особенно рекомендуется следовать этому общему правилу. Я не знаю, как работает загрузчик классов bukkit, но это имя пакета, написанное с большой буквы, точно не поможет.

person TheJavaCoder16    schedule 01.07.2014

Помимо того, что сказал TheJavaCoder16, похоже, вы используете неправильный метод onCommand. Вот что у вас есть (исключая throws ... и основной контент):

public boolean onCommand(CommandSender cmdsender, Command cmd, Player player)

Правильный метод:

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)

Чтобы заставить игрока проверить, если sender instanceof Player, а затем перевести отправителя на Player:

if (sender instanceof Player) {
    Player player = (Player) sender;
    //Rest of your code goes here
}

Что вам также следует опасаться, так это то, что возвращаемое false отправит отправителю сообщение об ошибке, предупреждающее его о неправильном/недопустимом использовании команды. Вы должны попытаться вернуть true, если вы не хотите, чтобы он отправил это сообщение.

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) throws FileNotFoundException, IOException, InvalidConfigurationException{
    if (sender instanceof Player) {
        Player player = (Player) sender;
        if(cmdsender.equals("sethome")){

            ProtHome.Homes.load(ProtHome.file);

            Homes.set(player.getName() + ".x", player.getLocation().getBlockX());
            Homes.set(player.getName() + ".y", player.getLocation().getBlockY());
            Homes.set(player.getName() + ".z", player.getLocation().getBlockZ());
            Homes.set(player.getName() + ".world", player.getWorld().getName());

            ProtHome.Homes.save(ProtHome.file);
        } else if(cmdsender.equals("home")){

            int x = (int) Homes.get(player.getName() + ".x");
            int y = (int) Homes.get(player.getName() + ".y");
            int z = (int) Homes.get(player.getName() + ".z");

            String world = (String) Homes.get(player.getName() + ".world");

            World realworld = Bukkit.getServer().getWorld(world);

            Location loc = new Location(realworld,x,y,z);

            player.teleport(loc);

        }
    }

    return true;

}
person Rishaan Gupta    schedule 23.04.2015

Часто вы можете буквально сделать все правильно, и все равно будет выдаваться ошибка или исключение. Это может показаться глупым ответом, но обновляли ли вы файл plugin.yml ПЕРЕД его экспортом? Это может происходить часто и встречается чаще, чем вы думаете.

person Brendan    schedule 24.04.2017