Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Ошибка при addPotionEffect

nikvas2000

Активный участник
Пользователь
Баллы
63
Имя в Minecraft
the_nacho
Помогите,
я не знаю почему эффект не накладывается на игрока.
Eclipse ничего не подчеркивает.
Код:
@EventHandler
    public void click(PlayerInteractEvent e){
        if(e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR){
            Player p = e.getPlayer();
            if(p.getItemInHand().getType() == Material.GOLD_BLOCK){
                ItemMeta goldblockmeta = p.getItemInHand().getItemMeta();
                if(goldblockmeta.getDisplayName() == "Jump"){
                    p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 10, 3));
                }
                if (goldblockmeta.getDisplayName() == "Speed"){
                    p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 10, 3));
                }
            }
            if (p.getItemInHand().getType() == Material.DIAMOND_BLOCK){
                ItemMeta diamondblockmeta = p.getItemInHand().getItemMeta();
                if(diamondblockmeta.getDisplayName() == "Jump"){
                    p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 10, 5));
                }
                if (diamondblockmeta.getDisplayName() == "Speed"){
                    p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 10, 5));
                }
            }
        }
    }
 
Вероятно не срабатывают if'ы, поставь после каждого ифа например p.sendMessage('***'); и посмотри какие срабатывают, а какие нет
 
Код:
goldblockmeta.getDisplayName() == "Speed"

Строки нельзя сравнивать на равенство. Строки нужно сравнивать на эквиваленцию.
В первом случае сравнивается их ссылки, во втором - содержимое.

Код:
goldblockmeta.getDisplayName().equals("Speed")

И, вообще, делайте сообщения для отладки, помогает.
 
dark32, сравнение строк оператором == вернет true, когда обе переменные указывают на один объект в памяти.
 
Ну, а я что написал?
...В первом случае сравнивается их ссылки...
Если ссылки на объект равны, то это один объект, но ещё есть пул коротких строк, но на него лучше не надеяться.
Но всё равно сравнивать строки с помощью == к хорошему не приводит.
 

Поделиться этой страницей

Назад
Верх