Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

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

Discussion in 'Разработка плагинов для новичков' started by Artemon, Jan 25, 2012.

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

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

    Trophy Points:
    63
    Skype:
    temi4_1997
    Всем доброго времени суток!:) Прошу помочь мне с написанием плагина. Я писал, чтобы обучиться Java с сайта http://dmitriymx.ru/blog/bukkit-tutorial . Застрял на одном месте и все никак не знаю где же я ошибся, а так как знаний не хватает( я еще новичок в Java), то не знаю что нужно исправить! Прошу помочь мне, так как уж очень хочется дописать плагин!
    Ниже предоставляю код:
    Code:
    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);
           
        }
     
    }
    
    И еще один:
    Code:
    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. Хостинг MineCraft
    <
  3. Hwo

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

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

    Code:
        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 проверяем вхождения ключей массива в строку чата.
    В случае успеха - меняем вхождение на значение соотв. ключа из ассоциативного массива.
     
  4. D_ART

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

    Trophy Points:
    173
    Skype:
    D_ART98
    Имя в Minecraft:
    D_ART
    bukkit API подключил?
     
  5. Автор темы
    Artemon

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

    Trophy Points:
    63
    Skype:
    temi4_1997
    да все подключено!
    в самом коде ошибка в третьей строчке в слове File
    Code:
     @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)

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

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

    Trophy Points:
    173
    Skype:
    D_ART98
    Имя в Minecraft:
    D_ART
    Скажи для чего твой плагин?
    Если просто так то иди учи Java ИМХО
     
    димон likes this.
  7. Hwo

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

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

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

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

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

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

    Trophy Points:
    63
    Skype:
    temi4_1997
    когда импортирую java.io.File возникает еще одна ошибка
     
  10. vanchezzz

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

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

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


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

Share This Page