Integer not going any further than 1?

Discussion in 'Plugin Development' started by DaBoltLegend, Mar 6, 2014.

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

    DaBoltLegend

    For some reason, the integer isn't going further than 1. Help?

    Code:
    Code:java
    1.  
    2. private Map<String, Integer> playerDeaths = new HashMap<String, Integer>();
    3. private Map<String, Integer> playerKills = new HashMap<String, Integer>();
    4.  
    5. @EventHandler
    6. public void onPlayerDeath(PlayerDeathEvent e) {
    7. if(this.playerDeaths.containsKey(e.getEntity().getName())) {
    8. this.playerDeaths.put(e.getEntity().getName(), this.playerDeaths.get(e.getEntity().getName() + 1));
    9. return;
    10. } else {
    11. this.playerDeaths.put(e.getEntity().getName(), 1);
    12. }
    13. if(this.playerKills.containsKey(e.getEntity().getKiller().getName())) {
    14. this.playerKills.put(e.getEntity().getKiller().getName(), this.playerKills.get(e.getEntity().getKiller().getName() + 1));
    15. return;
    16. } else {
    17. this.playerKills.put(e.getEntity().getKiller().getName(), 1);
    18. }
    19. }
    20.  
     
  2. Offline

    1Rogue

    It's only staying at 1 because you continually put the number "1" in there. #put() doesn't add numbers, it places whatever value you provide it.
     
  3. Offline

    0x277F

    I agree; I would do :
    Code:java
    1. int formerDeaths = playerDeaths.get(e.getEntity().getName();
    2. //...
    3. this.playerDeaths.put(e.getEntity().getName(), formerDeaths + 1);

    inside your onPlayerDeath method.
     
  4. Offline

    DaBoltLegend

    1Rogue
    Hmm, then do I need to erase that bit and instead just make it add one integer everytime?
     
  5. Offline

    alex123099

    DaBoltLegend
    in some of the put methods, you put the +1 inside the wrong parantheses
     
  6. Offline

    DaBoltLegend

  7. Offline

    Wizehh

    DaBoltLegend
    I think you have a misplaced parenthesis.
    Change:
    Code:java
    1. this.playerDeaths.put(e.getEntity().getName(), this.playerDeaths.get(e.getEntity().getName() + 1));

    to:
    Code:java
    1. this.playerDeaths.put(e.getEntity().getName(), this.playerDeaths.get(e.getEntity().getName()) + 1);

    Replicate that for your other statements.
     
  8. Offline

    DaBoltLegend

    Wizehh
    They are. It still doesn't work.
     
  9. Offline

    Wizehh

    Have you registered your events? What exactly is the problem/error?
     
  10. Offline

    Minesuchtiiii

    DaBoltLegend
    Code:java
    1.  
    2. if(e.getEntity() instanceof Player) {
    3. Player pl = (Player) e.getEntity();
    4. int deaths = this.playerDeaths.get(pl.getName());
    5. this.playerDeaths.put(pl.getName(), deaths+1);
    6. }

     
  11. Offline

    DaBoltLegend

    Minesuchtiiii
    Still doesn't work.

    Anybody?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 7, 2016
  12. Offline

    Alshain01

    Well, I think we need to see an updated version of your code. But one thing I notice is your using if/else and return. That means if your Death map contains e.getEntity, Killer is not going to get updated.
     
  13. Offline

    DaBoltLegend

    Alshain01
    Code:java
    1.  
    2. @EventHandler
    3. public void onPlayerDeath(PlayerDeathEvent e) {
    4. if(e.getEntity() instanceof Player) {
    5. int formerDeaths = this.playerDeaths.get(e.getEntity().getName());
    6. int formerKills = this.playerKills.get(e.getEntity().getName());
    7. if(this.playerDeaths.containsKey(e.getEntity().getName())) {
    8. this.playerDeaths.get(e.getEntity().getName() + 1);
    9. return;
    10. } else {
    11. this.playerDeaths.put(e.getEntity().getName(), formerDeaths + 1);
    12. }
    13. if(this.playerKills.containsKey(e.getEntity().getKiller().getName())) {
    14. this.playerKills.get(e.getEntity().getKiller().getName() + 1);
    15. return;
    16. } else {
    17. this.playerKills.put(e.getEntity().getKiller().getName(), formerKills + 1);
    18. }
    19. }
    20. }
    21.  
     
  14. Offline

    Alshain01

    Part of your problem is your using the same method repeatedly. For the sake of clarity and less chance of making a mistake, when you use it that much you should just pull out into an easy to understand temp variable.

    Code:java
    1.  
    2. private Map<String, Integer> playerDeaths = new HashMap<String, Integer>();
    3. private Map<String, Integer> playerKills = new HashMap<String, Integer>();
    4.  
    5. @EventHandler
    6. public void onPlayerDeath(PlayerDeathEvent e) {
    7. String dead = e.getEntity().getName();
    8. String killer = e.getEntity().getKiller().getName();
    9.  
    10. playerDeaths.put(dead, playerDeaths.containsKey(dead) ? playerDeaths.get(dead) + 1 : 1);
    11. playerKills.put(killer, playerKills.containsKey(killer) ? playerKills.get(killer) + 1 : 1);
    12. }
    13.  
     
    Minesuchtiiii and Wizehh like this.
  15. Offline

    DaBoltLegend

    Alshain01 likes this.
Thread Status:
Not open for further replies.

Share This Page