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

Помогите Не могу дописать плагин! помогите найти ошибку, пожалуйста!

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

  1. Автор темы
    Artemon

    Artemon Активный участник

    Баллы:
    63
    Skype:
    temi4_1997
    Всем доброго времени суток!:) Прошу помочь мне с написанием плагина. Я писал, чтобы обучиться Java с сайта http://dmitriymx.ru/blog/bukkit-tutorial . Застрял на одном месте и все никак не знаю где же я ошибся, а так как знаний не хватает( я еще новичок в Java), то не знаю что нужно исправить! Прошу помочь мне, так как уж очень хочется дописать плагин!
    Ниже предоставляю код:
    Код:
    package my.chat.plugin;
     
    import java.util.logging.Logger;
     
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.event.Event;
    import org.bukkit.plugin.java.JavaPlugin;
     
     
    public class ArtemonChat extends JavaPlugin{
        public Logger mclog = Logger.getLogger("minecraft");
        public YamlConfiguration config;
        private ArtemonChatListener chatListener = new ArtemonChatListener(this);
     
        @Override
        public void onDisable() {
            mclog.info("[ArtemonChat] Disabled");
            // TODO Auto-generated method stub
           
        }
     
        @Override
        public void onEnable() {
            config = LoadConfig(getDataFolder()+File.separator+"config.yml");
            mclog.info("[ArtemonChat] Enabled");
            // TODO Auto-generated method stub
            getServer().getPluginManager().registerEvent(Event.Type.PLAYER_CHAT, chatListener, Event.Priority.Monitor, this);
           
        }
     
    }
    
    И еще один:
    Код:
    package my.chat.plugin;
     
    import java.util.Set;
     
    import org.bukkit.ChatColor;
    import org.bukkit.event.player.PlayerChatEvent;
    import org.bukkit.event.player.PlayerListener;
     
    public class ArtemonChatListener extends PlayerListener {
        private ArtemonChat plugin;
        private Set<String> userList;
        public ArtemonChatListener(ArtemonChat plg){
            this.plugin = plg;
            userList = plg.config.getKeys(false);
        }
        public void onPlayerChat(PlayerChatEvent event){
            String playerName = event.getPlayer().getName().toLowerCase();
            String thisFormat = "<#b+name#f>: +message";
            if(userList.contains(playerName)){
                thisFormat = plugin.config.getString(playerName) + "+message";
            }
            ConvertFormat(thisFormat);
            event.setFormat(thisFormat);
        }
        private void ConvertFormat(String format){
            //заменяем псевдо-переменные на те, что воспринимает bukkit
            format = format.replace("+name", "%1$s").replace("+message", "%2$s");
            //заменим цветовые коды на коды, понятные bukkit’у
            format = format.replace("#0", ""+ChatColor.BLACK).replace("#1", ""+ChatColor.DARK_BLUE).replace("#2", ""+ChatColor.DARK_GREEN).replace("#3", ""+ChatColor.DARK_AQUA).replace("#4", ""+ChatColor.DARK_RED).replace("#5", ""+ChatColor.DARK_PURPLE).replace("#6", ""+ChatColor.GOLD).replace("#7", ""+ChatColor.GRAY).replace("#8", ""+ChatColor.DARK_GRAY).replace("#9", ""+ChatColor.BLUE).replace("#a", ""+ChatColor.GREEN).replace("#b", ""+ChatColor.AQUA).replace("#c", ""+ChatColor.RED).replace("#d", ""+ChatColor.LIGHT_PURPLE).replace("#e", ""+ChatColor.YELLOW).replace("#f", ""+ChatColor.WHITE);
       
            //Уважаемые программисты на Java. Если вы знаете как можно упростить или оптимизировать эту кошмарную функцию, напишите в комментариях. Очень вас прошу.
       
            return;
        }
     
    }
    
    Заранее спасибо!
     
  2. Hwo

    Hwo Активный участник

    Баллы:
    88
    Сказали бы, как проявляется эта самая ошибка.

    Код:
        private void ConvertFormat(String format){
            //заменяем псевдо-переменные на те, что воспринимает bukkit
            format = format.replace("+name", "%1$s").replace("+message", "%2$s");
            //заменим цветовые коды на коды, понятные bukkit’у
            format = format.replace("#0", ""+ChatColor.BLACK).replace("#1", ""+ChatColor.DARK_BLUE).replace("#2", ""+ChatColor.DARK_GREEN).replace("#3", ""+ChatColor.DARK_AQUA).replace("#4", ""+ChatColor.DARK_RED).replace("#5", ""+ChatColor.DARK_PURPLE).replace("#6", ""+ChatColor.GOLD).replace("#7", ""+ChatColor.GRAY).replace("#8", ""+ChatColor.DARK_GRAY).replace("#9", ""+ChatColor.BLUE).replace("#a", ""+ChatColor.GREEN).replace("#b", ""+ChatColor.AQUA).replace("#c", ""+ChatColor.RED).replace("#d", ""+ChatColor.LIGHT_PURPLE).replace("#e", ""+ChatColor.YELLOW).replace("#f", ""+ChatColor.WHITE);
     
            //Уважаемые программисты на Java. Если вы знаете как можно упростить или оптимизировать эту кошмарную функцию, напишите в комментариях. Очень вас прошу.
     
            return;
        }
     
    }
    
    Упрощение: ассоциативный массив из 16ти эл-тов.
    Ключом массива будет строка вида "#0" а значением соответственно: ChatColor.BLACK

    Потом в цикле foreach проверяем вхождения ключей массива в строку чата.
    В случае успеха - меняем вхождение на значение соотв. ключа из ассоциативного массива.
     
  3. D_ART

    D_ART Старожил Девелопер Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Artarious
    bukkit API подключил?
     
    Сникерсни и димон нравится это.
  4. Автор темы
    Artemon

    Artemon Активный участник

    Баллы:
    63
    Skype:
    temi4_1997
    да все подключено!
    в самом коде ошибка в третьей строчке в слове File
    Код:
     @Override
        public void onEnable() {
            config = LoadConfig(getDataFolder()+File.separator+"config.yml");
            mclog.info("[ArtemonChat] Enabled");
            // TODO Auto-generated method stub
            getServer().getPluginManager().registerEvent(Event.Type.PLAYER_CHAT, chatListener, Event.Priority.Monitor, this);
     
        }
    ошибка: File cannot be resolved to a variable
    есть много вариантов решения, но вот 3 какие-нужны по-моему:
    import 'File' (java.jo)
    import 'File' (org.ibex.nestedvm.util.Seekable)
    import 'File' (com.sun.java.util.jar.pack.Package)

    но когда импортирую каждый, возникает еще одна ошибка!
    что делать?
     
  5. D_ART

    D_ART Старожил Девелопер Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Artarious
    Скажи для чего твой плагин?
    Если просто так то иди учи Java ИМХО
     
    димон нравится это.
  6. Hwo

    Hwo Активный участник

    Баллы:
    88
    Вернуться назад и начать писать самостоятельно. Каждый метод.

    А тут однозначно нужен пакет java.io.File
     
  7. Автор темы
    Artemon

    Artemon Активный участник

    Баллы:
    63
    Skype:
    temi4_1997
    плагин для чата
    а пишу чтобы научиться писать
     
  8. Автор темы
    Artemon

    Artemon Активный участник

    Баллы:
    63
    Skype:
    temi4_1997
    когда импортирую java.io.File возникает еще одна ошибка
     
  9. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Artemon, ну как успехи? ;) Получилось что-то?
     
  10. vanchezzz

    vanchezzz Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    vanchezzz5
    Имя в Minecraft:
    Medved
    Взял исходный код автора, и вижу следующие моменты:
    ошибка о отсутствии класса
    на вскидку не нашел в какой версии поменяли(вроде в версии 1.0 с изменением системы событий), но теперь надо использовать
    и объявлении класса поменять с extends PlayerListener на implements Listner.

    С загрузкой конфига придется помучаться чуть больше конечно(можно в принципе использовать готовый код, который я укажу ниже, но советую для понимания сути скачать исходники моего плагина FirstItems или любого другого, использующего .yml файлы)


    И последняя ошибка - в строке
    Тут можно почитать о новой системе ивентов(в гайде, который использовал автор указана устаревшая информация, и опять же если коротко, то решается так:
     
    NyanCat121 нравится это.

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