JavaPluginClass 似乎不适用于 Listener class

JavaPluginClass doesn't seem to work with Listener class

我正在尝试像往常一样处理事件,但是这个不起作用,而且对我来说绝对是 0 个错误。大家有什么想法吗?

 public class JavaPluginClass extends JavaPlugin{

 HashMap<String, Location> games = new HashMap<String, Location>();
 HashMap<String, Location> currentLocation = new HashMap<String, Location>();
 ArrayList<String> gamesList = new ArrayList<String>();
 HashMap<String, String> attackersPlayers = new HashMap<String, String>();
 HashMap<String, String> defensePlayers = new HashMap<String, String>();
 HashMap<String, Boolean> playerJoined = new HashMap<String, Boolean>();

 //Teams:
 ScoreboardManager manager = Bukkit.getScoreboardManager();
 Scoreboard board = manager.getNewScoreboard();
 Team attack = board.registerNewTeam("Attacker");
 Team defense = board.registerNewTeam("Defense");

 StringBuilder sb = new StringBuilder();

 public void onEnable(){
        new joinOrNot(this);
  getLogger().info("Final Frontier enabled!");
 }

 public void onDisable(){
  getLogger().info("Final Frontier disabled!");
 }


 public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){

  Player p = (Player) sender;

  attack.setAllowFriendlyFire(false);
  defense.setAllowFriendlyFire(false);

  if (cmd.getName().equalsIgnoreCase("ff")){


    if (args.length == 0){
     //Help page: come back to this
     p.sendMessage("This will display help page");
     return true;
    }


   if (args.length == 1){
    if (args[0].equalsIgnoreCase("create") || args[0].equalsIgnoreCase("join")){
     p.sendMessage(ChatColor.RED + "Invalid usage! Type /ff for a bit o' help!");
     return true;
    }
    if (args[0].equalsIgnoreCase("list")){

     p.sendMessage(ChatColor.YELLOW + "Available games: " + ChatColor.GREEN + sb.toString());
     return true;

    }

    if (args[0].equalsIgnoreCase("attack") && playerJoined.get(p.getName()) == true){
     p.sendMessage(ChatColor.RED + "You are now attacking! Better watch out, eh?");
     attack.addPlayer(p);
     return true;
    }
    else if(args[0].equalsIgnoreCase("defend") && playerJoined.get(p.getName()) == true){
     p.sendMessage(ChatColor.YELLOW + "You are now defending! Whip dem weapons out!");
     defense.addPlayer(p);
     return true;
    }
    else if (args[0].equalsIgnoreCase("attack") || args[0].equalsIgnoreCase("defend") && playerJoined.get(p.getName()) == false){
     p.sendMessage(ChatColor.RED + "You should probably join first! God darn kids these days!");
     return true;
    }

    else if (args[0].equalsIgnoreCase("leave")){
     playerJoined.remove(p.getName());
     playerJoined.put(p.getName(), false);
     return true;
    }

   }

    if (args.length == 2){

     if (args[0].equalsIgnoreCase("create")){
      if(args[1] != null){
       p.sendMessage(ChatColor.GREEN + "You have created game " + args[1]);
       games.put(args[1], p.getLocation());
       sb.append(args[1] + ", ");
       return true;
      }

    }

     if (args[0].equalsIgnoreCase("join")){
      if (args[1] != null && games.containsKey(args[1])){

       playerJoined.remove(p.getName());
       playerJoined.put(p.getName(), true);
       p.teleport(games.get(args[1]));
       p.sendMessage(ChatColor.GREEN + "You have joined the battle of "
       + ChatColor.YELLOW + "Final Frontier! Now choose a god darn team!");
       return true;
      }
      if (!games.containsKey(args[1])){
       p.sendMessage(ChatColor.RED + "Woooah watch it soldier! Don't get cocky! That arena don't darn exist!");
       return true;
      }
     }

   }


  }

  return false;
 }
}

这是监听器 class:

package me.katsunicalis.finalfrontier;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

public class joinOrNot implements Listener{

 JavaPluginClass getter;

 public joinOrNot(JavaPluginClass plugin){

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

 }

 @EventHandler
 public void playerJoins(PlayerJoinEvent e){
  Player p = e.getPlayer();

  getter.playerJoined.put(p.getName(), false);
 }

}

然而,当我尝试做我正在做的事情时,它向我抛出一个错误,即使没有任何问题。

您没有在 "joirOrNot" class 中初始化字段 "getter"。

JavaPluginClass getter;

该字段有空值(因为您没有将其设置为任何值)。当您加入服务器时,您的错误是 NullPointerException,因为您正在访问一个字段或来自一个空字段的方法:

getter.playerJoined.put(p.getName(), false);

要解决此问题,只需使用以下方法初始化监听器构造函数中的字段:

this.getter = plugin;

旁注:

  • 您可以将您的 "getter" 字段声明为 "final",以便您的 IDE 会通知您此类错误
  • 遵循 Java 约定,您的 class 姓名 "joinOrNot" 应以大写字母开头。