私はキーとしてdamager名を追加しようとしている、とdamageCheckと呼ばれています、私のハッシュマップに値として被害者名。これはすべてEntityDamageByEntityEvent
で行われます。しかし、被害者と被害者の両方を保管しようとすると、すべてが間違っています。Bukkit /インローAPI:マッピングdamagerと被害者
コード:
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!");
}
}
まずメッセージは正しかったです。 GetSparkedは犠牲者であり、フェンディクはダメージを受けています。しかし、2番目のメッセージでハッシュマップから名前を取得しようとすると、出力は間違った値になります。
EDIT:I'vは damageCheck.put(victimName、damagerName)に変更。 〜 damageCheck.put(damagerName、victimName);
これで被害者はnull(初めての打撃)です、なぜですか?
ご協力いただきありがとうございます。私は本当にそれを感謝します。 –