Помогите Сервер не видит плагин

Статус
Закрыто для дальнейших ответов.

Conorfish

Активный участник
Пользователь
Баллы
76
Сервер плагин не видит. Eclipse ошибок не дает. Суть плагина слежка за игроками "/spec [Player]".
Main Class:
Код:
package me.qbert.SioRP;

import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;

import net.md_5.bungee.api.ChatColor;

public class SioRP extends JavaPlugin implements Listener{
    
    private static SioRP instance;
    FileConfiguration config = getConfig();
    
    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
    }
    
    public static SioRP instance() {
        return instance;
    }

    public void onDisable() {
        
    }
    public boolean onCommand (CommandSender sender, Command cmd, String label, String[] args) {
        if (cmd.getName().equalsIgnoreCase("spec")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.WHITE + "Команду могут выполнить только игроки!");
                return true;
            }
            if (args.length == 0) {
                sender.sendMessage(ChatColor.WHITE + "/spec " + ChatColor.GREEN + "[Игрок]");
                return true;
            }
            Player target = ((Server) ((Entity) sender).getWorld()).getPlayer(args[0]);
            Player p = (Player) sender;
            if (!p.hasPermission(cmd.getPermission())) {
                p.sendMessage(ChatColor.WHITE + "У вас нет прав для вылонения этой команды!");
                return true;
            }
            config.set("spec." + p.getName() + ".spec", "true");
            config.set("spec." + p.getName() + ".gamemode", p.getGameMode());
            config.set("spec." + p.getName() + "world", p.getWorld().getName());
            config.set("spec." + p.getName() + ".x", p.getLocation().getX());
            config.set("spec." + p.getName() + ".y", p.getLocation().getY());
            config.set("spec." + p.getName() + ".z", p.getLocation().getZ());
            saveConfig();
            p.setSpectatorTarget(Bukkit.getPlayerExact(target.getName()));
        }
        if (cmd.getName().equalsIgnoreCase("specoff")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.WHITE + "Команду могут выполнить только игроки!");
                return true;
            }
            Player p = (Player) sender;
            if (!config.getString("spec." + p.getName() + ".spec").equals("true")) {
                p.sendMessage(ChatColor.WHITE + "Вы не за кем не наблюдаете!");
                return true;
            }
            Location nospec = new Location(Bukkit.getWorld(config.getString("spec." + p.getName() + "world")),
                    config.getDouble("spec." + p.getName() + ".x"),
                    config.getDouble("spec." + p.getName() + ".y"),
                    config.getDouble("spec." + p.getName() + ".z"));
            p.teleport(nospec);
            if (config.getString("spec." + p.getName() + ".gamemode").equals("CREATIVE")) {
                p.setGameMode(GameMode.CREATIVE);
            }
            if (config.getString("spec." + p.getName() + ".gamemode").equals("ADVENTURE")) {
                p.setGameMode(GameMode.ADVENTURE);
            }
            if (config.getString("spec." + p.getName() + ".gamemode").equals("SURVIVAL")) {
                p.setGameMode(GameMode.SURVIVAL);
            }
            config.set("spec." + p.getName() + ".spec", "false");
            config.set("spec." + p.getName() + ".gamemode", "unknown");
            config.set("spec." + p.getName() + "world", "unknown");
            config.set("spec." + p.getName() + ".x", "unknown");
            config.set("spec." + p.getName() + ".y", "unknown");
            config.set("spec." + p.getName() + ".z", "unknown");
            saveConfig();
        }
        return false;
        
    }
    
    @EventHandler
    public void onPlayerQuit (PlayerQuitEvent e) {
        Player p = e.getPlayer();
        if (!config.getString("spec." + p.getName() + ".spec").equals("false")) {
            Location nospec = new Location(Bukkit.getWorld(config.getString("spec." + p.getName() + "world")),
                    config.getDouble("spec." + p.getName() + ".x"),
                    config.getDouble("spec." + p.getName() + ".y"),
                    config.getDouble("spec." + p.getName() + ".z"));
            p.teleport(nospec);
        }
        if (config.getString("spec." + p.getName() + ".gamemode").equals("CREATIVE")) {
            p.setGameMode(GameMode.CREATIVE);
        }
        if (config.getString("spec." + p.getName() + ".gamemode").equals("ADVENTURE")) {
            p.setGameMode(GameMode.ADVENTURE);
        }
        if (config.getString("spec." + p.getName() + ".gamemode").equals("SURVIVAL")) {
            p.setGameMode(GameMode.SURVIVAL);
        }
        config.set("spec." + p.getName() + ".gamemode", "unknown");
        config.set("spec." + p.getName() + "world", "unknown");
        config.set("spec." + p.getName() + ".x", "unknown");
        config.set("spec." + p.getName() + ".y", "unknown");
        config.set("spec." + p.getName() + ".z", "unknown");
        config.set("spec." + p.getName() + ".spec", "false");
        saveConfig();
    }
    
    @EventHandler
    public void onPlayerJoin (PlayerJoinEvent e) {
        Player p = e.getPlayer();
        config.set("spec." + p.getName() + ".spec", "false");
        saveConfig();
        p.sendMessage(ChatColor.GREEN + "Добро пожаловать на сервер!");
    }
}

Plugin.yml:
Код:
name: SioRP-Spectate
main: me.qbert.SioRP.SioRP
version: 1.0

commands:
  spec:
    usage: /spec <Игрок>
    permission: SioRP-Spectate.spec
    description: Следить за игроками
  specoff:
    usage: /specoff
    permission: SioRP-Spectate.spec
    description: Выход из режима слежки за игроком
Ну все, только Main Class и plugin.yml
 
plugin.yml где расположен?
 
Ни в каком пакете? В корне src?
 
В /pl плагин есть или пусто?
 
Сто проц либо не в корне plugin.yml, либо ты вообще плагин не закинул на сервер.
Глянь где расположен тот файл именно в скомпиленном плагине (jar). По возможности предоставь весь лог запуска сервера (кидать сюда например: paste.gg)
 
Сто проц либо не в корне plugin.yml, либо ты вообще плагин не закинул на сервер.
Глянь где расположен тот файл именно в скомпиленном плагине (jar). По возможности предоставь весь лог запуска сервера (кидать сюда например: paste.gg)
А в консоли при запуске не пишет: [имя плагина] имя плагина включен на версии...
 
Последнее редактирование:
Логи надо смотреть при запуске, там ошибка. Неправильно как то plugin.yml написан. Правда не вижу явных ошибок, возможно нужно завернуть строки с description в двойные кавычки.
 
Запускаем сервер сервер с плагином и видим:
Код:
[Server thread/ERROR]: Could not load 'plugins\SioRP-Spectate.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
А теперь открываем plugin.yml, а там... русские символы и кодировка Windows 1251!

Сервер работает с кодировкой UTF-8 и поэтому прямое преобразование из других кодировок может приводить к неожиданным результатам.

Чтобы это исправить - нужно перевести файл в UTF-8 (также русский текст можно вставить в кавычки (пример: 'текст'), но это не обязательно).

  • Пример с Notepad++
Откройте ваш plugin.yml в Notepad++ и выберите вкладку "Кодировки":
L5NJauo.png


И выберите "Преобразовать в UTF-8"
lH8GVQm.png


Сохраните и можно отправлять plugin.yml в плагин и на сервер.

  • Вариант с обычным блокнотом
Переименовываем файл в "plugin.yml.txt", открываем в блокноте.

Далее в верхней панели: Файл -> Сохранить как -> в поле выбираем UTF-8 -> сохранить -> переименовываем обратно в "plugin.yml" -> отправляем в плагин и на сервер.
EYLp38R.png


ipdKOh0.png
 
Последнее редактирование:
P.S мне кажется это не лучшая идея - делать обработчик команд в классе, который не реализует интерфейс CommandExecutor :)
Норм, если ему не нужно в другом классе реализовывать обработку.
 
Запускаем сервер сервер с плагином и видим:
Код:
[Server thread/ERROR]: Could not load 'plugins\SioRP-Spectate.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
А теперь открываем plugin.yml, а там... русские символы и кодировка Windows 1251!

Сервер работает с кодировкой UTF-8 и поэтому прямое преобразование из других кодировок может приводить к неожиданным результатам.

Чтобы это исправить - нужно перевести файл в UTF-8 (также русский текст можно вставить в кавычки (пример: 'текст'), но это не обязательно).

  • Пример с Notepad++
Откройте ваш plugin.yml в Notepad++ и выберите вкладку "Кодировки":
L5NJauo.png


И выберите "Преобразовать в UTF-8"
lH8GVQm.png


Сохраните и можно отправлять plugin.yml в плагин и на сервер.

  • Вариант с обычным блокнотом
Переименовываем файл в "plugin.yml.txt", открываем в блокноте.

Далее в верхней панели: Файл -> Сохранить как -> в поле выбираем UTF-8 -> сохранить -> переименовываем обратно в "plugin.yml" -> отправляем в плагин и на сервер.
EYLp38R.png


ipdKOh0.png
Зачем такое делать? мог бы просто сказать, поменяй кодировку на UTF-8 и убери русские буквы из plugin. yml
 
Тему пока не закрою, по позже проверю, если ещё что-то не будет закрою. Заранее всем спасибо
 
Тему пока не закрою, по позже проверю, если ещё что-то не будет закрою. Заранее всем спасибо
Нет необходимости убирать русские буквы. Просто заключи их в кавычки. Причём кодировка тут вообще не влияет.
 
Зачем такое делать? мог бы просто сказать, поменяй кодировку на UTF-8 и убери русские буквы из plugin. yml
Просто кривой plugin.yml (есть определенный синтаксис пробелов который нарушен)
Вот рабочая версия - https://yadi.sk/d/lj4yCQZ4RizAoA
По поводу кода, есть переменная типа boolean (config.set("spec." + p.getName() + ".spec", "false");)
Зачем instance, если он не используется (private static SioRP instance; с продолжением в методе)
Зачем onDisable(), если он не используется.
Если хочешь убрать данные о игроке, сотри секцию вместо записи ненужной инфы(
config.set("spec." + p.getName() + ".gamemode", "unknown");)
и конфигу будет легче от этого.
Типо вот так:
config.set("spec." + p.getName() , null);
 
Просто кривой plugin.yml (есть определенный синтаксис пробелов который нарушен)
Вот рабочая версия - https://yadi.sk/d/lj4yCQZ4RizAoA
По поводу кода, есть переменная типа boolean (config.set("spec." + p.getName() + ".spec", "false");)
Зачем instance, если он не используется (private static SioRP instance; с продолжением в методе)
Зачем onDisable(), если он не используется.
Если хочешь убрать данные о игроке, сотри секцию вместо записи ненужной инфы(
config.set("spec." + p.getName() + ".gamemode", "unknown");)
и конфигу будет легче от этого.
Типо вот так:
config.set("spec." + p.getName() , null);
На счет instance, я по туториалам сделал плагин, и потом его скопировал, и из него создал этот. Насчет config.set("spec." + p.getName() , null); я хз как убирать что-то в конфиге, так что... Теперь знаю))
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх