当前位置: 首页 > 知识库问答 >
问题:

EntitytDamageByEntity事件上的NullPointerException Bukkit[重复]

仉刚洁
2023-03-14
public class MineSurvival extends JavaPlugin implements Listener{

private HashMap<String, Long> lastUsage = new HashMap<String, Long>();
private HashMap<String, Integer> daysMap = new HashMap<>();
private HashMap<String, Long> damage = new HashMap<>();
private HashMap<String, Boolean> killable = new HashMap<>();
private final int cdtime = 10;
private final int damagetime = 10;
@Override
public void onEnable(){
getServer().getPluginManager().registerEvents(this, this);
getConfig();
for(String str:getConfig().getKeys(true)) {
int p = getConfig().getInt(str);
daysMap.put(str, p);
}
saveConfig();
}

@Override
public void onDisable(){
for(Entry<String, Integer> pointstostore: daysMap.entrySet()) {
getConfig().set(pointstostore.getKey(), pointstostore.getValue());
}
saveConfig();
}

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
    final Player player = (Player) sender;
    Integer days = this.daysMap.get(player.getName());
    PermissionUser user = PermissionsEx.getUser(player);
if(commandLabel.equalsIgnoreCase("days")){
    if(player.hasPermission("minesurvival.days") || player.hasPermission("minesurvival.hcdays")){
    long lastUsed = 0;
    if(lastUsage.containsKey(player.getName())){
        lastUsed = lastUsage.get(player.getName());
    }

    long cdmillis = System.currentTimeMillis() + (cdtime * 1000);;

    if(System.currentTimeMillis()-lastUsed>=cdmillis){
        if(daysMap.containsKey(player.getName())){
            days++;
            this.daysMap.put(player.getName(), days);
            player.sendMessage(ChatColor.RED + "You have stayed alive for " + ChatColor.BLUE + days + ChatColor.RED + " days!");
            getServer().dispatchCommand(getServer().getConsoleSender(), "pex user " + player.getName() + " prefix &c[&b" + days + "&c]");
        lastUsage.put(player.getName(), System.currentTimeMillis());

        }
        else if(daysMap.containsKey(player.getName())){
            if(days==10 || days==99){
            days++;
            this.daysMap.put(player.getName(), days);
            Bukkit.broadcastMessage(ChatColor.GREEN +(player.getDisplayName() + ChatColor.RED + "Has survived" + ChatColor.BLUE + days + ChatColor.RED + "!"));
            lastUsage.put(player.getName(), System.currentTimeMillis());
        }
        }
        else if(!daysMap.containsKey(player.getName())){
            daysMap.put(player.getName(), 0);
        }
    }
    else{
        int timeLeft = (int) (cdtime-((System.currentTimeMillis()-lastUsed)/1000));
        player.sendMessage(ChatColor.RED + "It hasn't been a day yet " + ChatColor.GREEN + timeLeft + ChatColor.RED + " seconds left");
        return true;
    }


}
    else if(!player.hasPermission("minesurvival.days")){
        player.sendMessage(ChatColor.RED + "No permission");
    }
}
if(commandLabel.equalsIgnoreCase("hardcore")){
    if(!player.hasPermission("minesurvival.normal")){
        user.addPermission("minesurvival.hardcore");
    player.sendMessage(ChatColor.RED + "You are now playing hardcore");
}
    else if(player.hasPermission("minesurvival.normal")){
        player.sendMessage(ChatColor.RED + "You cannot switch from normal to hardcore!");
    }
}
if(commandLabel.equalsIgnoreCase("normal")){
    if(!player.hasPermission("minesurvival.hardcore")){
        user.addPermission("minesurvival.normal");
    player.sendMessage(ChatColor.RED + "You are now playing normal");
    }
    else if(player.hasPermission("minesurvival.hardcore")){
        player.sendMessage(ChatColor.RED + "You cannot switch from hardcore to normal!");
    }
}
if(commandLabel.equalsIgnoreCase("timeleft")){
    if(damage.containsKey(player.getName())){
            damage.put(player.getName(), System.currentTimeMillis());

            }
        }
return false;

}
@EventHandler
public void onPlayerDeathEvent(PlayerDeathEvent event){
    Player player = (Player) event.getEntity();
    PermissionUser user = PermissionsEx.getUser(player);
    if(player instanceof Player){
        Integer daysdeath = this.daysMap.get(player.getName());
        if(player.hasPermission("minesurvival.normal")){
            Integer death = (int) Math.round((daysdeath-((daysdeath*20)/100)));
            this.daysMap.put(player.getName(), death);
            user.removePermission("minesurvival.normal");
            player.sendMessage(ChatColor.RED + "Because you were playing normal, your days have been reset to " + ChatColor.GREEN + death);
        }
        else if(player.hasPermission("minesurvival.hardcore")){
            Integer hcdeath = (int) Math.round((daysdeath-((daysdeath*80)/100)));
            this.daysMap.put(player.getName(), hcdeath);
            user.removePermission("minesurvival.hardcore");
            player.sendMessage(ChatColor.RED + "Because you were playing hardcore, your days have been reset to " + ChatColor.GREEN + hcdeath);
        }
        else{
            return;
        }
    }
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
    ItemStack is = event.getItem();
    Player player = event.getPlayer();
    long dmgmillis = System.currentTimeMillis() + (damagetime * 1000);
    long DamageUsed = 0;
    if (is.getType() == Material.NETHER_STAR) {
        player.sendMessage("4");
        damage.put(player.getName(), (long) 1);
        player.getInventory().remove(Material.NETHER_STAR);
        player.sendMessage(ChatColor.GREEN + "You have activated your 10 second powerup!");
        DamageUsed = damage.get(player.getName());
        if(System.currentTimeMillis()-DamageUsed>=dmgmillis){
            player.sendMessage("3");
            killable.put(player.getName(), true);
        }
}
    else{
        return;
    }
}
@EventHandler
public void onPlayerDamage(EntityDamageByEntityEvent event){
    Entity damagedE = event.getEntity();
    Entity damagerE = event.getDamager();
    if(!(damagedE instanceof Player)) return;
    if(!(damagerE instanceof Player)) return;

    Player damaged = (Player) event.getEntity();
    if(damaged instanceof Player){
        damaged.sendMessage("2");
    if(killable.get(damaged.getName())){
        damaged.sendMessage("1");
        event.setCancelled(true);
    }
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
    Player player = event.getPlayer();
    killable.put(player.getName(), false);
}
}

共有1个答案

祖迪
2023-03-14

问题在代码的第172行:

at com.minetendo.minesurvival.MineSurvival.onPlayerDamage(MineSurvival.java:172)

好像是代码中的这一行:

if(killable.get(damaged.getName())){

这是因为您的killableHashMap不包含受损播放器的名称。要解决这个问题,应该检查killable.contains(damaged.getname())

@EventHandler
public void onPlayerDamage(EntityDamageByEntityEvent event){
  Entity damagedE = event.getEntity();
  Entity damagerE = event.getDamager();
  if(!(damagedE instanceof Player)) return;
  if(!(damagerE instanceof Player)) return;

  Player damaged = (Player) event.getEntity();
  if(damaged instanceof Player){
    damaged.sendMessage("2");
    if(killable.contains(damaged.getName())){//check if killable contains the damaged player's name
      if(killable.get(damaged.getName())){
        damaged.sendMessage("1");
        event.setCancelled(true);
      }
    }
  }
}
 类似资料:
  • 很多企业在使用诸葛io时,会采集和分析数量非常多(可能会多达几百上千)的用户行为事件。这时,事件查找和组织就变得不够方便。 为此,诸葛io提供了事件分组和重要事件(星标事件)标注功能,当事件很多时,可以对事件进行分门别类地管理。同时,可以从产品业务角度将重要的用户行为标注出来,以便可以在分析时方便、快捷地查找常用、重要的事件。 一、使用场景 1. 在众多事件中,方便、快捷地查找重要事件 在分析过程

  • 这是我代码的一小部分。问题就在于此。“this”下面的代码引用了HomeView类,因为我这样做了。_changeLanguage.bind(this)。如果我移除绑定(this)部分,那么它将引用li元素,但我无法调用它。\ u renderHTML()方法。 在这样的单击事件上运行_changeLanguage方法的最干净的方法是什么。

  • 我使用形状和画布,我想做一些像地图编辑器的东西。当鼠标在画布上移动时,我会在每次移动时将实际选定的对象绘制到画布上的鼠标位置,以便使用该程序的用户可以看到该对象放置在画布上时的外观。 单击鼠标,我将当前对象/位置添加到列表中,其中包含每次更新都需要在画布上绘制的放置元素。 问题是,如果鼠标移动处理程序处于活动状态(绑定到画布),那么click事件不会一直触发,我需要连续单击大约十次来放置元素。如果

  • 问题内容: 我在Netbeans中的Java中创建了一个表,并在其中填充了一些数据。现在,我想在单击该单元格时在与行中的特定列相对应的文本区域中显示一些详细信息。如何使用事件侦听器找出单元用户已单击的位置。 问题答案: 找到点击事件的位置并获取要搜索的单元格:

  • 我试图创建一个反应组件,这是一个文本输入。当有人按下回车键时,必须调用mymethod()。但是在handleKeyPress,我不能访问类范围。我怎样才能解决这个问题?

  • 如何在这里设置我自己的消息,在我自己的语言上 无论设置为得到的消息是

  • 第一次问问题,请耐心听我说。非常感谢你的帮助! 我的代码如下所示。我正在尝试创建一个琐事游戏。

  • 我们观察到,其中一位消费者多次试图从Kafka主题中选取事件。我们在消费者应用程序方面有以下内容。spring.kafka.consumer.enable auto commit=false