Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите По чему это значение не равно этому значению?

Discussion in 'Разработка плагинов для новичков' started by MinotaurWorld, Dec 23, 2016.

  1. Автор темы
    MinotaurWorld

    MinotaurWorld Активный участник Пользователь

    Trophy Points:
    66
    Имя в Minecraft:
    MinotaurWorld
    Я писал плагин на ключи для сундуков. И столкулся с проблемой. Есть 2 String переменные. В первой переменной хранится имя сундука, во второй переменной хранится имя ключа. Вот пример:

    Code:
    Chest chest = (Chest) event.getClickedBlock().getState();
    String chestname = chest.getCustomName();
    String keyname =  player.getItemInHand().getItemMeta().getDisplayName();
    if (chestname == keyname){
        player.sendMessage(Подходит.);
    }
    if (chestname != keyname){
        player.sendMessage(Не подходит.);
    }
    Когда я переименовываю сундук и ключ в разные имена, он пишет (Не подходит.). Если одинаковые то, он пишет (Не подходит.). Почему? Подходит он пишет, только если оба значения null.
     
  2. Хостинг MineCraft
    <
  3. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    chestname.equals(keyname)
     
  4. Ission

    Ission Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    lokivava
    Потому что сравниваются ссылки на объекты и равны они будут только если это один и тот же объект.
     
  5. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    +1
     
  6. iD3LSY

    iD3LSY Активный участник Пользователь

    Trophy Points:
    46
    Имя в Minecraft:
    opy
    Code:
    Chest chest = (Chest) event.getClickedBlock().getState();
            if(event.getPlayer().getItemInHand().getItemMeta().getDisplayName() == "Название шмотки" &&
                    chest.getBlockInventory().getTitle() == "Название инвенторя") {
                player.sendMessage("Подходит.");
            } else {
                player.sendMessage("Не подходит.");
            }
    Пробуй.

    Ну или
    Code:
    if(event.getPlayer().getItemInHand().getItemMeta().getDisplayName() == "Название шмотки" &&
                    chest.getBlockInventory().getTitle() == "Название инвенторя") {
    Замени на
    Code:
    if(event.getPlayer().getItemInHand().getItemMeta().getDisplayName() == chest.getBlockInventory().getTitle()) {
     
  7. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    нельзя так делать
     
  8. iD3LSY

    iD3LSY Активный участник Пользователь

    Trophy Points:
    46
    Имя в Minecraft:
    opy
    Извини, я не тестил xd
     
  9. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    так вообще делать нельзя. строки через equals надо сравнивать.
     
  10. iD3LSY

    iD3LSY Активный участник Пользователь

    Trophy Points:
    46
    Имя в Minecraft:
    opy
    ..? Я лично всегда сравнивал через ==. Вообще, в чём отличие? По сути дела, одно и тоже.
     
  11. Ission

    Ission Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    lokivava
    Оператор == используется для проверки, что две строки указывают на один и тот же объект.
    Code:
    // Эти строки имеют одно и тоже же значение
    new String("test").equals("test") // --> true 
    
    // ...но это разные объекты
    new String("test") == "test" // --> false 
    
    // ...эти строки тоже разные объекты
    new String("test") == new String("test") // --> false 
    
    // ...но эти строки указывают на один и тот же объект,
    // потому что компилятор добавляет все литералы в пул.
    "test" == "test" // --> true 
    
    // Конкатенация литералов тоже происходит на стадии компиляции,
    // поэтому они указывают на один объект
    "test" == "te" + "st" // --> true
    
    // но вызов substring() происходит во время выполнения,
    // в результате получаются разные объекты.
    "test" == "!test".substring(1) // --> false
    
    // Строки из пула могут быть получены с помощью вызова intern().
    "test" == "!test".substring(1).intern() // --> true
    Надо отметить, что == заметно быстрее, чем equals (сравнение ссылки вместо вызова метода и посимвольного сравнения, если строки разной длины), поэтому, если вы работаете со строками из пула (или системного, или своего), замена equals на == может привести к заметному ускорению.
     
  12. iD3LSY

    iD3LSY Активный участник Пользователь

    Trophy Points:
    46
    Имя в Minecraft:
    opy
    Воу воу воу xd. Полегче))0[DOUBLEPOST=1482526891,1482525996][/DOUBLEPOST]Крч, люди, разобрался. Хз почему, но предметы, название которых не имеет цвета, не проходят проверку. Установи любой цвет, будь то даже §f. То есть выдавай игроку не "key", а "§fkey". Цвет не поменяется, а вот работать всё будет.
    Code:
    public void onInteract(PlayerInteractEvent e) {
            if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK) && e.getClickedBlock().getType() == Material.CHEST) {
                Chest chest = (Chest) e.getClickedBlock().getState();
                if (!chest.getBlockInventory().getName().equals("container.chest") && e.getPlayer().getItemInHand().getItemMeta().getDisplayName() == "§fkey") {
                    e.getPlayer().sendMessage(chest.getBlockInventory().getName());
                } else {
                    e.getPlayer().sendMessage("sosi");
                }
            }
        }
    Хотя мне пришлось немного прокакать на это время, но всё же :)
     
  13. Fenix78563

    Fenix78563 Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    и все таки когда работаешь со строками лучше использовать equals. (ну кроме тех случаев которые нам так ахриненно расписал Ission
     

Share This Page