在bukkit上启用侦听器


package me.TimewalkerZ.Broadcastoncommand;
import java.util.List;
import java.util.logging.Logger;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;
import net.minecraft.server.v1_8_R1.*;
public class Broadcastoncommand extends JavaPlugin implements Listener {
   public final Logger logger = Logger.getLogger("Minecraft");
   public static Broadcastoncommand plugin;
   @Override
   public void onDisable() {
           PluginDescriptionFile pdfFile = this.getDescription();
           this.logger.info(pdfFile.getName() +  " Has been Disabled!");
    }
   @Override
   public void onEnable() {
           PluginDescriptionFile pdfFile = this.getDescription();
           this.logger.info(pdfFile.getName() + " Version " + pdfFile.getVersion() +  " Has been Enabled!");
           getConfig().options().copyDefaults(true);
           saveConfig();
   }
   @EventHandler
   public void onPlayerCommandPreprocessEvent(PlayerCommandPreprocessEvent event) {
       Player p = event.getPlayer();
       if(!p.hasPermission("Broadcastoncommand.silent")) {
           List<String> cmds = plugin.getConfig().getStringList("CommandsBC");
           for (String command : cmds) {
               if(event.getMessage().toLowerCase().startsWith("/" + command)) {
               p.sendMessage("§6" + p + "§6 just did the command " + command + "§6 join them if you have the command unlocked.");
             }
           }
         }
       }

嗨,我试着运行这个,但它似乎根本不起作用。我的意思是,它编译和运行没有错误,但它不做任何游戏。顺便说一下,这个插件的目的是广播当有人在配置中使用命令时。

在您的onEnable方法中添加这一行:

getServer().getPluginManager().registerEvents(this, this);

第一个this参数是要注册事件的插件,第二个this参数是插件的监听器。


与此同时,一个NullPointerException被抛出,因为"插件"。这将返回null,因为plugin没有设置为任何东西。相反,使用

List<String> cmds = this.getConfig().getStringList("CommandsBC");
另一种保持单例模式的方法是在启动时将插件实例分配给plugin,通过在onEnable中添加这一行:
plugin = this;

要注册您的事件,您需要添加:

Bukkit.getPluginManager().registerEvents(this, this);

注册this监听器到this


你也得到一个NullPointerException,因为:

  • 1。)plugin是空的,最终你可以删除plugin.,因为它是你的主类和getConfig()是父类中的一个方法。
  • 2)。getConfig()返回null,因为文件不存在或没有生成。您需要将config.yml添加到项目中的src文件夹中,在此之后,您将需要在插件启用时使用saveDefaultConfig()方法生成它,如果文件不存在。例如:

    try 
    {
        File config  = new File(getDataFolder(), "config.yml");
        if(!getDataFolder().exists())getDataFolder().mkdirs();
        if(!config.exists())saveDefaultConfig();
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }
    
  • 3)。配置文件中指定的路径不存在。记住路径是区分大小写的。getConfig().getStringList("CommandsBC")可能由于空列表而返回null,或者路径不存在(记住它是区分大小写的)。

    这些选项可能导致您的NullPointerException,如果您需要更多信息,请留下评论

最新更新