gpt4 book ai didi

java - Bukkit/Spigot API : Mapping damager and Victim

转载 作者:行者123 更新时间:2023-11-30 06:48:22 26 4
gpt4 key购买 nike

我正在尝试将损坏者名称作为键添加,将受害者名称作为值添加到名为damageCheck。这一切都在 EntityDamageByEntityEvent 中完成。然而,当我尝试存储受害者和破坏者时,一切都出错了。

代码:

    private HashMap<String, String> damageCheck = new HashMap<String, String>();

@EventHandler
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {

if(event.getEntity() instanceof Player || event.getDamager() instanceof Player) {
Player victim = (Player) event.getEntity();
Player damager = (Player) event.getDamager();

String victimName = victim.getDisplayName(); // getting the victim name
String damagerName = damager.getDisplayName(); // getting the damager name

Bukkit.getServer().broadcastMessage("");
Bukkit.getServer().broadcastMessage(victim.getDisplayName() + " is the victim!");
Bukkit.getServer().broadcastMessage(damager.getDisplayName() + " is the damager!");
Bukkit.getServer().broadcastMessage("");

try {
if(!damageCheck.containsKey(damagerName)) {
damageCheck.put(victimName, damagerName);

Bukkit.getServer().broadcastMessage("");
Bukkit.getServer().broadcastMessage(damageCheck.get(victimName) + " is victim!");
Bukkit.getServer().broadcastMessage(damageCheck.get(damagerName) + " is damager!");
Bukkit.getServer().broadcastMessage("");
} else if(damageCheck.containsKey(damagerName)) {
damageCheck.replace(damagerName, damagerName, damagerName);

Bukkit.getServer().broadcastMessage("");
Bukkit.getServer().broadcastMessage(damageCheck.get(victimName) + " is victim!");
Bukkit.getServer().broadcastMessage(damageCheck.get(damagerName) + " is damager!");
Bukkit.getServer().broadcastMessage("");
}
} catch (NullPointerException e) {
// do nothing lol
}

} else {
Bukkit.getServer().broadcastMessage("There is no entity or damager!");
}
}

enter image description here

第一条消息是正确的。 GetSparked 是受害者,Fendyk 是破坏者。但是在第二条消息中,当尝试从 HashMap 中获取名称时,它输出了错误的值。

编辑:我改变了damageCheck.put(victimName, DamagerName);damageCheck.put(damagerName,victimName);

但现在它给受害者null(第一次击中),这是为什么?

enter image description here

最佳答案

所以,我正在测试一种全新的方法,因为我不太明白你指的是什么,无论如何,这就是代码,我认为这就是你真正需要的

不需要 new HashMap <String, String>

private HashMap<String, String> damageCheck = new HashMap<>();

代码:

@EventHandler
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {

if(!(event.getDamager() instanceof Player) || !(event.getEntity() instanceof Player) ) return;

String damagerName = event.getDamager().getName();
String victimName = event.getEntity().getName();

damageCheck.put(victimName, damagerName);

Bukkit.broadcastMessage(ChatColor.GRAY + "" + ChatColor.STRIKETHROUGH + "-------------[ X ]-------------");
Bukkit.broadcastMessage(ChatColor.DARK_AQUA + damagerName + ChatColor.GRAY + " is the damager");
Bukkit.broadcastMessage(ChatColor.DARK_AQUA + victimName + ChatColor.GRAY + " is the victim");
Bukkit.broadcastMessage(ChatColor.GRAY + "" + ChatColor.STRIKETHROUGH + "-------------[ X ]-------------");

Bukkit.getLogger().info(damageCheck.toString());

}

从 HashMap 中删除实体数据尽管有时不准确

@EventHandler
public void onEntityDeathEvent(EntityDeathEvent event){
damageCheck.remove(event.getEntity().getName());
damageCheck.remove(event.getEntity().getKiller().getName());
}

您只能删除对玩家的检查,它适用于任何实体 只需删除

if(!(event.getDamager() instanceof Player) || !(event.getEntity() instanceof Player) ) return;

关于java - Bukkit/Spigot API : Mapping damager and Victim,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43287732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com