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
@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.
@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.
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!"); } } } } }
@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.