KillStreaks

Discussion in 'Plugin Development' started by plisov, Oct 8, 2017.

Thread Status:
Not open for further replies.
  1. Offline

    plisov

    I'm attempting to make a killstreaks plugin and I have the basics done. Here is what I have currently.
    Code:
    package me.plisov.kitpvp.killstreaks;
    
    import java.util.HashMap;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    
    public class KillStreaks implements Listener {
    
        public HashMap<String, Integer> killstreaks = new HashMap<String, Integer>();
    
        @EventHandler
        public void onPlayerKill(PlayerDeathEvent event) {
    
            if (event.getEntity() instanceof Player && event.getEntity().getKiller() instanceof Player) {
    
                Player killer = (Player) event.getEntity().getKiller();
                Player killed = (Player) event.getEntity();
    
                if (!killstreaks.containsKey(killer.getName())) {
    
                    killstreaks.put(killer.getName(), 1);
    
                } else {
    
                    killstreaks.put(killer.getName(), killstreaks.get(killer.getName()) + 1);
    
                    Bukkit.getServer().broadcastMessage(killer.getName() + " " + killstreaks.get(killer.getName()));
    
                    if (killstreaks.get(killed.getName()) >= 5) {
    
                        Bukkit.getServer()
                                .broadcastMessage(ChatColor.YELLOW + killer.getName() + ChatColor.GREEN + " just ended "
                                        + ChatColor.YELLOW + killed.getName() + "'s " + ChatColor.GREEN + " killstreak of "
                                        + ChatColor.YELLOW + killstreaks.get(killed.getName()));
    
                        killstreaks.remove(killed.getName());
    
                    }
    
                    if (killstreaks.get(killer.getName()) == 5) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 5 killstreak!");
    
                    }
                }
            }
        }
    }
    
    It adds numbers to the hashmap perfectly but when it reaches 5 it's supposed to send a message but it doesnt. Could someone take a look and help me out?

    Thanks,
    plisov
     
  2. Offline

    Side8StarLite

    @plisov
    This line here
    Code:
                    if (killstreaks.get(killed.getName()) >= 5) {
    It causes a NullPointerException if killed isn't on the hashmap. As a result, the code breaks here and doesn't continue to the next if statement. Add a null check and it should work.
     
  3. Offline

    mine2012craft

    @plisov try to make the hashmap integer in the else an int variable, then add 1 to it in the process. Then try and check it through the if statement of the killer, as well as setting it as the killer's int.

    Also, place an if statement before getting the killed player's int checking if the player is contained in the hashmap. That will throw a nullpointer if not checked.
     
  4. Offline

    plisov

    So something like this?
    Code:
    package me.plisov.kitpvp.killstreaks;
    
    import java.util.HashMap;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    
    public class KillStreaks implements Listener {
    
        public static HashMap<String, Integer> killstreaks = new HashMap<String, Integer>();
    
        @EventHandler
        public void onPlayerKill(PlayerDeathEvent event) {
    
            if (event.getEntity() instanceof Player && event.getEntity().getKiller() instanceof Player) {
    
                Player killer = (Player) event.getEntity().getKiller();
                Player killed = (Player) event.getEntity();
    
                if (!killstreaks.containsKey(killer.getName()) || !killstreaks.containsKey(killed.getName())) {
    
                    if (!killstreaks.containsKey(killer.getName())) {
    
                        killstreaks.put(killer.getName(), 1);
                    }
    
                    if (!killstreaks.containsKey(killed.getName())) {
    
                        return;
    
                    }
    
                } else {
                    if (killstreaks.get(killed.getName()) >= 5) {
    
                        Bukkit.getServer()
                                .broadcastMessage(ChatColor.YELLOW + killer.getName() + ChatColor.GREEN + " just ended "
                                        + ChatColor.YELLOW + killed.getName() + "'s" + ChatColor.GREEN + " killstreak of "
                                        + ChatColor.YELLOW + killstreaks.get(killed.getName()));
                    }
                    killstreaks.remove(killed.getName());
    
                    if (killstreaks.get(killer.getName()) == 5) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 5 killstreak!");
    
                    }
    
                    killstreaks.put(killer.getName(), killstreaks.get(killer.getName()) + 1);
    
                    if (killstreaks.get(killer.getName()) == 10) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 10 killstreak!");
    
                    }
    
                    if (killstreaks.get(killer.getName()) == 15) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 15 killstreak!");
    
                    }
    
                    if (killstreaks.get(killer.getName()) == 20) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 20 killstreak!");
    
                    }
    
                    if (killstreaks.get(killer.getName()) == 25) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 25 killstreak!");
    
                    }
    
                    if (killstreaks.get(killer.getName()) == 30) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 30 killstreak!");
    
                    }
    
                    if (killstreaks.get(killer.getName()) == 35) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 35 killstreak!");
    
                    }
    
                    if (killstreaks.get(killer.getName()) == 40) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 40 killstreak!");
    
                    }
    
                    if (killstreaks.get(killer.getName()) == 45) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 45 killstreak!");
    
                    }
    
                    if (killstreaks.get(killer.getName()) == 50) {
    
                        Bukkit.getServer().broadcastMessage(ChatColor.GOLD + killer.getName() + " is on a 50 killstreak!");
    
                    }
                }
            }
        }
    }
    
     
  5. Offline

    Caderape2

    @plisov
    you are using killeD here, but everytime before, u only use killeR in your first example. Name can be confusing.
    It wasn't a mistake ? If no, check first if the killeD is in the hashmap.
     
Thread Status:
Not open for further replies.

Share This Page