2015-06-05 11 views
-2

Я пытаюсь сделать плагин без ругательств, это не ошибка, но он чувствителен к регистру, хотя я использую equalsIgnoreCase. Я хочу, чтобы он заменил все проклятые слова (как определено в конфиге) словом «проклятие», если есть более 10 получателей сообщения. Почему этот код не работает?Не работает плагин с плагином не работает

Основной код плагина:

public class main extends JavaPlugin implements Listener { 
    public static Bukkit plugin; 
     public void onEnable() 
    { 
     Bukkit.getServer().getPluginManager().registerEvents(this, this); 
     getConfig().options().copyDefaults(true); 
     saveConfig(); 
     this.reloadConfig(); 
     Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "Enabled!"); 
    } 

    public void onDisable() 
    { 
     getLogger(); 
     Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "Disabled!"); 
    } 
    @EventHandler 
    public void playerChat(AsyncPlayerChatEvent e){ 
     Set r = e.getRecipients(); 
     if (r.size() > 10) { 
      List g = this.getConfig().getList("Swears"); 
      for (int i = 0; i < g.size(); i++) { 
       if(g.get(i).tostring().equalsIgnoreCase(e.getMessage())) { 
        String message = e.getMessage().replaceAll(g.get(i).toString(), "curse"); 
        e.setMessage(message); 
       } 
      } 
    } 
} 
} 

config.yml:

#Default Config 
Swears: 

plugin.yml:

name: NoSwear 
main: me.mrpoopy345.bukkitplugin.main 
version: 1.0 
author: mrpoopy345 
description: NoSwear 

commands: 
+0

Может кто-нибудь объяснить downvotes? –

ответ

0

Вот как я бы изменить положение вещей:

//By convention you always capitalize Class names. So I changed the name from "main" to "Main". 
public class Main extends JavaPlugin implements Listener { 

    // I am not sure why you had a static Bukkit variable, so I removed it. 

    // This variable is transient, so it can be safely accessed from other threads 
    public transient List<String> swares; 

    public void onEnable() { 
     Bukkit.getServer().getPluginManager().registerEvents(this, this); 
     getConfig().options().copyDefaults(true); 
     saveConfig(); 
     this.reloadConfig(); 

     // I get the swears out of the config here, so I won't have to 
     // access the config while in the AsyncPlayerChatEvent 
     swares = getConfig().getStringList("Swears"); 


     // A more common way to log something is through the logger, here is an example: 
     getLogger().log(Level.INFO, "Enabled!"); 
     // Also, a good thing to remember is the the console will not see chat colors as their code 
     // So instead of displaying a message as red it would display '§4message' 
    } 

    public void onDisable() { 
     //Here is a different way to use the logger: 
     getLogger().info("Disabled!"); 
    } 

    @EventHandler 
    public void playerChat(AsyncPlayerChatEvent e) { 

     // I combined this to one line, and reversed it so there are less curly braces. 
     if (e.getRecipients().size() > 10) 
      return; 

     // I replaced what you did with this, it's much simpler! 
     for (String sware : swares) { 
      // adding (?i) tells it to ignore case 
      e.setMessage(e.getMessage().replaceAll("(?i)" + sware, "curse")); 
     } 
    } 
} 

Поскольку я изменил имя класса плагина, вам также необходимо будет изменить основной файл plugin.yml на me.mrpoopy345.bukkitplugin.Main

Приветствия!

(я не думаю, что это синхронизирует событие чата в главном потоке, но если это делает кто-то редактировать свой пост и исправить)