2015-04-19 2 views
0

Так что проблема в том, что когда я говорю ovrxp = ovrxp + xp, он никогда не складывает и просто сбрасывает каждое убийство. Исправить это и объяснить, почему это не работает, было бы очень полезно.Добавление двух ints ничего не делает

@EventHandler 
public void onDeath(EntityDeathEvent e) { 

    Player player = (Player) e.getEntity().getKiller(); 
    Skeleton s = (Skeleton) e.getEntity(); 

    int ovrlvl = 1; 
    int ovrxp = 0; 

    Random random = new Random(); 
    int xp = random.nextInt(30) + 21; 

    if (ovrlvl == 1 && ovrxp >= 200) { 
     player.sendMessage(ChatColor.GREEN + "You are now level two!"); 
     player.playSound(player.getLocation(), Sound.LEVEL_UP, 1.0F, 0.0F); 
     ovrlvl = 2; 
    } 
    if (ovrlvl == 2 && ovrxp >= 400) { 
     player.sendMessage(ChatColor.GREEN + "You are now level three!"); 
     player.playSound(player.getLocation(), Sound.LEVEL_UP, 1.0F, 0.0F); 
     ovrlvl = 3; 
    } 

    ovrxp = ovrxp + xp; 

    if (s.getCustomName() == "Undead Recruit") { 
     if (ovrlvl == 1) { 
      player.sendMessage(ChatColor.GREEN + "" + ovrxp + "/200"); 
     } 
     if (ovrlvl == 2) { 
      player.sendMessage(ChatColor.GREEN + "" + ovrxp + "/400"); 
     } 
    } 
} 
} 

ответ

1

Вы объявили ovrxp как локальной переменной - это инициализируется каждый раз, когда onDeath называется.

Если вы хотите, чтобы значение сохранялось между несколькими вызовами метода, вам необходимо сделать поле переменной (частью самого объекта). Предполагая, что метод всегда вызывается на одном и том же объекте, и в том же потоке просто нужно создать поле экземпляра.

Смежные вопросы