1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Conorfish, 9 авг 2020.

Статус темы:
Закрыта.
  1. Автор темы
    Conorfish

    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
     
  2. 4APP1

    4APP1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    HappyWaffle
    plugin.yml где расположен?
     
  3. Автор темы
    Conorfish

    Conorfish Активный участник Пользователь

    Баллы:
    76
    в src
     
  4. 4APP1

    4APP1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    HappyWaffle
    Ни в каком пакете? В корне src?
     
  5. Автор темы
    Conorfish

    Conorfish Активный участник Пользователь

    Баллы:
    76
    +
    Ну смотри, примерно так: src > new > file> plugin.yml
     
  6. 4APP1

    4APP1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    HappyWaffle
    В /pl плагин есть или пусто?
     
  7. Автор темы
    Conorfish

    Conorfish Активный участник Пользователь

    Баллы:
    76
    В том то и дело нету
     
  8. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Сто проц либо не в корне plugin.yml, либо ты вообще плагин не закинул на сервер.
    Глянь где расположен тот файл именно в скомпиленном плагине (jar). По возможности предоставь весь лог запуска сервера (кидать сюда например: paste.gg)
     
  9. Автор темы
    Conorfish

    Conorfish Активный участник Пользователь

    Баллы:
    76
    А в консоли при запуске не пишет: [имя плагина] имя плагина включен на версии...
     
  10. Автор темы
    Conorfish

    Conorfish Активный участник Пользователь

    Баллы:
    76
    Если что, скину все завтра
     
  11. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Можешь даже плагин скинуть, если не секретная разработка :D
     
  12. Автор темы
    Conorfish

    Conorfish Активный участник Пользователь

    Баллы:
    76
    Экспортировал, вот держи ссылку)) https://yadi.sk/d/WZjfHLNJUC-bmA
    Надеюсь скажите, почему сервер не видит плагин, я ведь и плагин дал, и plugin.yml и главный(единственный) класс
     
    Последнее редактирование: 10 авг 2020
  13. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Логи надо смотреть при запуске, там ошибка. Неправильно как то plugin.yml написан. Правда не вижу явных ошибок, возможно нужно завернуть строки с description в двойные кавычки.
     
  14. Stas021

    Stas021 Новичок Пользователь

    Баллы:
    16
    Запускаем сервер сервер с плагином и видим:
    Код:
    [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++ и выберите вкладку "Кодировки":
    [​IMG]

    И выберите "Преобразовать в UTF-8"
    [​IMG]

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

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

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

    [​IMG]
     
    Последнее редактирование: 10 авг 2020
  15. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Норм, если ему не нужно в другом классе реализовывать обработку.
     
  16. Автор темы
    Conorfish

    Conorfish Активный участник Пользователь

    Баллы:
    76
    Зачем такое делать? мог бы просто сказать, поменяй кодировку на UTF-8 и убери русские буквы из plugin. yml
     
  17. Автор темы
    Conorfish

    Conorfish Активный участник Пользователь

    Баллы:
    76
    Тему пока не закрою, по позже проверю, если ещё что-то не будет закрою. Заранее всем спасибо
     
  18. deadanykey

    deadanykey Активный участник Пользователь

    Баллы:
    96
    Нет необходимости убирать русские буквы. Просто заключи их в кавычки. Причём кодировка тут вообще не влияет.
     
  19. SaMEC

    SaMEC Старожил Пользователь

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Просто кривой 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);
     
  20. Автор темы
    Conorfish

    Conorfish Активный участник Пользователь

    Баллы:
    76
    На счет instance, я по туториалам сделал плагин, и потом его скопировал, и из него создал этот. Насчет config.set("spec." + p.getName() , null); я хз как убирать что-то в конфиге, так что... Теперь знаю))
     
Статус темы:
Закрыта.

Поделиться этой страницей