1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Крафт предмета вещами с метой

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Всем привет. Как вы уже все поняли мне необходимо сделать крафт, где ингредиенты будут вещи с метой.

    Пробовал ловить крафт PrepareItemCraftEvent, но... Все скудно..
    Помогите мне, как мне сделать это.
     
  2. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
  3. XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Тебе нужно изменить ванильный крафт или создать новый?
     
  4. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Читай выше.
    Проблема все еще актуальна
     
  5. jusik

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

    Баллы:
    76
    Skype:
    louky94096
    Имя в Minecraft:
    Jusik
  6. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Мпипец, неужели никто не знает решения моей проблемы?
     
  7. alexandrage

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

    Баллы:
    173
    Да запили ты свою гуищу сундука как это делают нормальные плагины.
     
  8. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Тут отдел помощи, а не идей. Мне надо именно через окно крафта
     
  9. alexandrage

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

    Баллы:
    173
    Ну ты сам сказал, что в том ивенте все скудно, я и дал совет.
     
  10. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Пгп
    Попытка была скудной, может тут помогут с решением.
     
  11. alexandrage

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

    Баллы:
    173
    getInventory(); Пробовал?
     
  12. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я перебирал все предметы в окне крафта, но чет не получилось
     
  13. alexandrage

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

    Баллы:
    173
    Короче попробуй так, создаешь свой кастом крафт. Потом в гетрезульт сморишь твой ли предмет. Если твой, чекай гетинвентарь.
    Там предмет результ тоже показывает в гетинвентарь, если что.
     
  14. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Не работает... По идее, он должен сетить результат на null, если в матриксе предметы без меты. Делаю примерно так:
    Код:
        @EventHandler
        public void cancelCraft(PrepareItemCraftEvent e) {
    
            if (e.getRecipe().getResult() != ListItems.axe) return;
    
            for (ItemStack stack : e.getInventory().getMatrix()) {
    
                if (stack == null) return;
                if (!stack.hasItemMeta()) return;
    
                e.getInventory().setResult(null);
            }
        }
    Вот так я создаю ItemStack, вдруг будут вопросы по этому поводу.

    Код:
        private static ItemStack loadAxe() {
    
            axe = new ItemStack(Material.STONE_AXE);
            ItemMeta meta = axe.getItemMeta();
    
            meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
    
            List<String> lore = new ArrayList<>();
            lore.add(C.c("&a============================="));
            lore.add(C.c("&7Примитивный топорик из"));
            lore.add(C.c("&7осколков камня и ветки от дерева."));
            lore.add(C.c("&7Думаю, что его хватит на пару"));
            lore.add(C.c("&7блоков."));
            lore.add(C.c("&a============================="));
            meta.setLore(lore);
            meta.setDisplayName(C.c("&7&lПримитивный топорик"));
            axe.setDurability((short) 125);
            meta.addEnchant(Enchantment.ARROW_DAMAGE, r.nextInt(), true);
            axe.setItemMeta(meta);
            return axe;
        }
     
  15. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    e.getInventory().setResult(new ItemStack(Material.AIR));

    не проверял, но должно работать
     
  16. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Неа, не сработало. Я продебажил метод и понял, что он не проходит проверку на результ, т.е дальше "1" не идет:

    Код:
    @EventHandler
        public void cancelCraft(PrepareItemCraftEvent e) {
    
            GetLogger.warning("1");
    
            if (e.getRecipe().getResult() != ListItems.axe) return;
    
            GetLogger.warning("2");
    
            for (ItemStack stack : e.getInventory().getMatrix()) {
    
                GetLogger.warning("3");
    
                if (stack == null) return;
    
                GetLogger.warning("4");
    
                if (!stack.hasItemMeta()) return;
    
                GetLogger.warning("5");
    
                e.getInventory().setResult(new ItemStack(Material.AIR));
            }
        }
     
  17. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    ну значит в рез-тате не топор а какаха

    где то кто-то может рецепт забыл создать?

    да и вообще:
    !e.getRecipe().getResult().equals(ListItems.axe)
     
  18. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Рецепт создается, т.к топор появляется
    И с твоим вариантом также дальше "1" не идет
     
  19. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    выводи все параметры ItemStack топора и того что в рез-тате. смотри что не сходится. (а не количество ли случаем, ибо оно тоже участвует в проверке?)
     
  20. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    ItemStack{STONE_AXE x 1, UNSPECIFIC_META:{meta-type=UNSPECIFIC, display-name=Примитивный топорик, lore=[=============================, Примитивный топорик из, осколков камня и ветки от дерева., Думаю, что его хватит на пару, блоков., =============================], enchants={ARROW_DAMAGE=1}, ItemFlags=[HIDE_ENCHANTS]}}

    Мне кажется, что это из-за рандомных чар, я их убрал и теперь дальше "4" не идет...
     

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