I was wondering how I could update the victim's scoreboard inside the if (killer != null) in my onPlayerDeath script. I want it so that when the player dies to another player it updates the victim's scoreboard but currently it only updates it for the killer.
I tried importing the code below into my onPlayerDeath script inside the if (killer != null) but it didn't work.
Imported code:
UUID victimId = victim.getUniqueId();
int victimKillStreak = killStreaks.getOrDefault(victimId, 0);
int limitedVictimKillStreak = Math.min(victimKillStreak, 5);
ChatColor victimKillStreakColor = getColorForKillStreak(limitedVictimKillStreak);
String coloredVictimKillStreak = victimKillStreakColor + String.valueOf(limitedVictimKillStreak);
victim.setPlayerListName(victim.getName() + " " + victimKillStreakColor + "[" + coloredVictimKillStreak + "]" + ChatColor.RESET);
updatePlayerScoreboard(victim);
Full onPlayerDeath script:
@EventHandler
public void onPlayerDeath(PlayerDeathEvent event) {
Player victim = event.getEntity();
Player killer = victim.getKiller();
// Check the last damage cause
EntityDamageEvent lastDamage = victim.getLastDamageCause();
EntityDamageEvent.DamageCause cause = lastDamage != null ? lastDamage.getCause() : null;
// Decrease the victim's killstreak by 1 only if the death was not caused by a player
if (cause != EntityDamageEvent.DamageCause.ENTITY_ATTACK && cause != EntityDamageEvent.DamageCause.ENTITY_SWEEP_ATTACK) {
UUID victimId = victim.getUniqueId();
int victimKillStreak = killStreaks.getOrDefault(victimId, 0);
if (victimKillStreak > 0) {
killStreaks.put(victimId, victimKillStreak - 1);
victim.sendMessage(ChatColor.RED + "Your killstreak has been decreased due to your death.");
}
}
// Update the victim's scoreboard
UUID victimId = victim.getUniqueId();
int victimKillStreak = killStreaks.getOrDefault(victimId, 0);
int limitedVictimKillStreak = Math.min(victimKillStreak, 5);
ChatColor victimKillStreakColor = getColorForKillStreak(limitedVictimKillStreak);
String coloredVictimKillStreak = victimKillStreakColor + String.valueOf(limitedVictimKillStreak);
victim.setPlayerListName(victim.getName() + " " + victimKillStreakColor + "[" + coloredVictimKillStreak + "]" + ChatColor.RESET);
updatePlayerScoreboard(victim);
if (killer != null) {
UUID killerId = killer.getUniqueId();
int killerKillStreak = killStreaks.getOrDefault(killerId, 0);
if (killerKillStreak < 5) {
killStreaks.put(killerId, killerKillStreak + 1);
killer.sendMessage(ChatColor.GREEN + "You have received +1 killstreak! Your current killstreak is: " + (killerKillStreak + 1));
}
// Apply special effects based on killstreak
if (killerKillStreak + 1 >= 1) {
killer.addPotionEffect(new PotionEffect(PotionEffectType.LUCK, Integer.MAX_VALUE, 0)); // Luck 1 for infinite time
killer.addPotionEffect(new PotionEffect(PotionEffectType.HERO_OF_THE_VILLAGE, Integer.MAX_VALUE, 0)); // Hero of the Village 1 for infinite time
killer.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 0)); // Speed 1 for infinite time
}
// Attack speed attribute
AttributeInstance attackSpeedAttribute = killer.getAttribute(Attribute.GENERIC_ATTACK_SPEED);
if (attackSpeedAttribute != null) {
if (killerKillStreak + 1 >= 2) {
attackSpeedAttribute.setBaseValue(1024);
} else {
attackSpeedAttribute.setBaseValue(4.0); // Default attack speed for players
}
}
// Knockback resistance attribute
AttributeInstance knockbackResistanceAttribute = killer.getAttribute(Attribute.GENERIC_KNOCKBACK_RESISTANCE);
if (knockbackResistanceAttribute != null) {
if (killerKillStreak + 1 >= 3) {
knockbackResistanceAttribute.setBaseValue(1.0);
} else {
knockbackResistanceAttribute.setBaseValue(0.0); // Default knockback resistance for players
}
}
if (killerKillStreak + 1 >= 4) {
killer.addPotionEffect(new PotionEffect(PotionEffectType.HEALTH_BOOST, Integer.MAX_VALUE, 0)); // Health Boost 1 for infinite time
}
if (killerKillStreak + 1 >= 5) {
killer.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, Integer.MAX_VALUE, 0)); // Strength 1 for infinite time
}
// Update the killer's scoreboard
int limitedKillStreak = Math.min(killerKillStreak + 1, 5);
ChatColor killStreakColor = getColorForKillStreak(limitedKillStreak);
String coloredKillStreak = killStreakColor + String.valueOf(limitedKillStreak);
killer.setPlayerListName(killer.getName() + " " + killStreakColor + "[" + coloredKillStreak + "]" + ChatColor.RESET);
updatePlayerScoreboard(killer);
saveKillStreaks();
}
}