Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Artemon

Активный участник
Баллы
63
Всем доброго времени суток!:) Прошу помочь мне с написанием плагина. Я писал, чтобы обучиться 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;
    }
 
}
Заранее спасибо!
 
Всем доброго времени суток!:) Прошу помочь мне с написанием плагина. Я писал, чтобы обучиться Java с сайта http://dmitriymx.ru/blog/bukkit-tutorial . Застрял на одном месте и все никак не знаю где же я ошибся, а так как знаний не хватает( я еще новичок в Java), то не знаю что нужно исправить! Прошу помочь мне, так как уж очень хочется дописать плагин!
Сказали бы, как проявляется эта самая ошибка.

Код:
    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 проверяем вхождения ключей массива в строку чата.
В случае успеха - меняем вхождение на значение соотв. ключа из ассоциативного массива.
 
Всем доброго времени суток!:) Прошу помочь мне с написанием плагина. Я писал, чтобы обучиться 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;
    }
 
}
Заранее спасибо!

bukkit API подключил?
 
bukkit API подключил?
да все подключено!
в самом коде ошибка в третьей строчке в слове 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)

но когда импортирую каждый, возникает еще одна ошибка!
что делать?
 
Скажи для чего твой плагин?
Если просто так то иди учи Java ИМХО
 
Вернуться назад и начать писать самостоятельно. Каждый метод.

А тут однозначно нужен пакет java.io.File
 
Вернуться назад и начать писать самостоятельно. Каждый метод.

А тут однозначно нужен пакет java.io.File
когда импортирую java.io.File возникает еще одна ошибка
 
Взял исходный код автора, и вижу следующие моменты:
ошибка о отсутствии класса
org.bukkit.event.player.PlayerListener;
на вскидку не нашел в какой версии поменяли(вроде в версии 1.0 с изменением системы событий), но теперь надо использовать
и объявлении класса поменять с extends PlayerListener на implements Listner.

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

Объявить переменную сказал(а):
public FileConfiguration config;
Добавить в метод onEnable сказал(а):
config = getConfig();
this.config.options().copyDefaults(true);
saveConfig();
try {
this.config.options().copyDefaults(true);
saveConfig();
Config.initialize(this.config, getDataFolder(), getLogger());
} catch (Exception ex) {
getLogger().log(Level.SEVERE, "Сообщение о невозможности загрузить конфиг файл", ex);
}
Создать Config.java с следующим содержанием сказал(а):
package my.chat.plugin;

import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;

public class Config {
public static File dataDir;
public static String world;

public static void initialize(FileConfiguration config, File pluginDir, Logger log) {
try {
dataDir = pluginDir;
if (!dataDir.exists()) {
dataDir.mkdir();
}
ConfigurationSection settings = config.getConfigurationSection("settings");
world = settings.getString("world");
} catch (Exception ex) {
log.log(Level.SEVERE, "Unable to load config!", ex);
}
}
}
Создать config.yml с следующим содержанием(ПРИМЕР!111) сказал(а):
settings:
world: world
items:
- 268.1
- 269.1
- 270.1
- 271.1
- 35.1.4


И последняя ошибка - в строке
getServer().getPluginManager().registerEvent(PLAYER_CHAT, chatListener, Event.Priority.Monitor, this);
Тут можно почитать о новой системе ивентов(в гайде, который использовал автор указана устаревшая информация, и опять же если коротко, то решается так:
Меняем вышеуказанную строку на: сказал(а):
PluginManager pm = getServer().getPluginManager();
pm.registerEvents(new ArtemonChatListener(this), this);
Добавляем в ArtemonChatListener: сказал(а):
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerChat(PlayerChatEvent event){
 

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

Назад
Верх