How to update victim's scoreboard inside onPlayerDeath in below piece of code

49 Views Asked by At

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();
    }
}
0

There are 0 best solutions below