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

Помогите Получить число из Lore предмета.

Тема в разделе "Разработка плагинов для новичков", создана пользователем Mr_RoboMan, 20 апр 2015.

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

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

    Баллы:
    123
    У меня есть определенные предметы на сервере.
    У этих предметов 2 строчка Lore это надпись: "&e&lStatTrack: число".
    Как мне получить это число?)
     
  2. Хостинг MineCraft
    <
  3. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Как-то так
    Код:
    int i = Integer.parseInt("&e&lStatTrack: число".split(": ")[1]);
     
  4. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    А можете еще рассказать как это работает?)[DOUBLEPOST=1429551503,1429551054][/DOUBLEPOST]А как изменить это число? Ну вернее увеличить его на 1 и поставить на то же место!
     
  5. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Сначала разбивает на 2 части, границами которых является ": ", потом из второй строки(которая является числом) извлекает само число.
    Извлекаешь обе части. Вторую превращаешь в число и прибавляешь 1, потом соеденяешь 2 части обратно и присваиваешь лору
     
  6. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Не пашет... Ругается IDE.. "Array type expected; found ""java.lang.String";
     
  7. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Тот код, который я дал, работает. Ну IDE, по крайней мере, не ругается.
    Скинь свой код
     
  8. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Код:
        @EventHandler
        public void addST(EntityDamageByEntityEvent event)
        {
            if (event.getDamager() instanceof Player && event.getEntity() instanceof Player)
            {
                Player agree = (Player) event.getDamager();
                Player disagree = (Player) event.getEntity();
                if (disagree.isDead()) {
                    if (agree.getInventory().getItemInHand().getItemMeta().getLore().get(1).contains(ChatColor.translateAlternateColorCodes('&', "&e&lStatTrack: ")))
                    {
                        String lore = agree.getInventory().getItemInHand().getItemMeta().getLore().get(1);
                        int ST = Integer.parseInt(lore.split(": "[1]));
                    }
                }
            }
        }
    
     
  9. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Код:
    int ST = Integer.parseInt(lore[0].split(": ")[1]);
    
     
  10. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    lore это строка а не массив..[DOUBLEPOST=1429555001,1429553400][/DOUBLEPOST]Ругается на
    Код:
    (": ")
     
  11. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Зачем split(": ")? Оптимизация рулит: split(" ") :D
     
  12. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Рулить то рулит, но IDE все равно ругается на текст.
     
  13. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Дай текст ошибки, или вообще скрин скинь.
     
  14. aceJKE

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

    Баллы:
    123
    мб ...lore.get(0)...
     
  15. Timings

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

    Баллы:
    88
    Имя в Minecraft:
    NextGeneric
    При помощи getLore() выводишь содержимое Лора в ArrayList, получаешь 2-й его элемент как строку, сплитишь ее, получаешь нужный элемент[DOUBLEPOST=1429603105,1429602921][/DOUBLEPOST]List<String> lore = ItemStack.getLore();

    int number = Integer.valueOf(lore.get(1).split(" ")[1]);

    А, ну number - то, что и требовалось
     
  16. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Ошибок не бьет, Lore не изменяется...
    Код:
        @EventHandler
        public void addST(EntityDamageByEntityEvent event)
        {
            if (event.getDamager() instanceof Player && event.getEntity() instanceof Player)
            {
                Player agree = (Player) event.getDamager();
                Player disagree = (Player) event.getEntity();
                if (disagree.isDead()) {
                    if (agree.getInventory().getItemInHand().getItemMeta().getLore().get(1).contains(ChatColor.translateAlternateColorCodes('&', "&e&lСтатТрек: ")))
                    {
                        int number = Integer.valueOf(agree.getInventory().getItemInHand().getItemMeta().getLore().get(1).split(" ")[1]);
                        number++;
                        ItemMeta meta = agree.getInventory().getItemInHand().getItemMeta();
                        ArrayList<String> lore = new ArrayList<String>();
                        lore.add(meta.getLore().get(0));
                        lore.add(ChatColor.translateAlternateColorCodes('&', "&e&lСтатТрек: " + number));
                        meta.setLore(lore);
                        agree.getInventory().getItemInHand().setItemMeta(meta);
                    }
                }
            }
        }
    
     
  17. Timings

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

    Баллы:
    88
    Имя в Minecraft:
    NextGeneric

    Раз не передаются исключения и лор не меняется - проверь, выполняется ли вообще условие

    if (agree.getInventory().getItemInHand().getItemMeta().getLore().get(1).contains(ChatColor.translateAlternateColorCodes('&', "&e&lСтатТрек: "))
    1. Я бы вообще сделал так:
      if (agree.getItemInHand().getItemMeta().getLore().get(1).contains("СтатТрек"))) {


      Ну и на всякий - agree.updateInventory()
     
  18. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Ни пашит(9((99(9((((((
    PHP:
        @EventHandler
        
    public void addST(EntityDamageByEntityEvent event)
        {
            if (
    event.getDamager() instanceof Player && event.getEntity() instanceof Player)
            {
                
    Player agree = (Playerevent.getDamager();
                
    Player disagree = (Playerevent.getEntity();
                if (
    disagree.isDead()) {
                    if (
    agree.getInventory().getItemInHand().getItemMeta().getLore().get(1).contains("&e&lСтатТрек: "))
                    {
                        
    int number Integer.valueOf(agree.getInventory().getItemInHand().getItemMeta().getLore().get(1).split(" ")[1]);
                        
    number++;
                        
    ItemMeta meta agree.getInventory().getItemInHand().getItemMeta();
                        
    ArrayList<Stringlore = new ArrayList<String>();
                        
    lore.add(meta.getLore().get(0));
                        
    lore.add(ChatColor.translateAlternateColorCodes('&'"&e&lСтатТрек: " number));
                        
    meta.setLore(lore);
                        
    agree.getInventory().getItemInHand().setItemMeta(meta);
                        
    agree.updateInventory();
                    }
                }
            }
        }
    [DOUBLEPOST=1429725864,1429725617][/DOUBLEPOST]Поставив "отладку" выявил что не работает проверка на "смерть"... Как правильно проверить умрет ли игрок после нанесения урона в этом евенте?
     
  19. Timings

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

    Баллы:
    88
    Имя в Minecraft:
    NextGeneric
    Почему бы не воспользоваться, например, евентом смерти ентити?

    EntityDeathEvent
     
  20. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Вообще-то не подумал...
    Щя попробую.[DOUBLEPOST=1429770226,1429770152][/DOUBLEPOST]
    В EDE можно получить только одного игрока... Не подскажете, это кто убийца или убитый?[DOUBLEPOST=1429779392][/DOUBLEPOST]Зароботало, всем спасибо :D
     
  21. Timings

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

    Баллы:
    88
    Имя в Minecraft:
    NextGeneric
    e.getEntity() возвращает убитое ентити

    e.getEntity().getKiller() возвращает убийцу, необходимо привести к Player
     

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