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

Помогите Не работает ивент PrepareItemCraft

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

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

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    PHP:
    @SuppressWarnings("unused")
        @
    EventHandler
        
    public void CraftCheck(PrepareItemCraftEvent e ) {
            
    ItemStack item = new ItemStack(Material.EYE_OF_ENDER);
            
    ItemMeta meta item.getItemMeta();
            
    meta.setDisplayName(ChatColor.translateAlternateColorCodes('&'"&6Хилер"));
            List<
    Stringlore = new ArrayList<String>();
            
    lore.add(ChatColor.DARK_PURPLE "Будет лечить Вас от всех ран в течении 5 секунд!");
            
    lore.add(ChatColor.AQUA "Использовать на ПКМ!");
            
    meta.setLore(lore);
            
    item.setItemMeta(meta);
            
    ShapedRecipe shapedCraft = new ShapedRecipe(item);
            
    ItemStack item1 = new ItemStack(Material.SAND);
            
    ItemStack item2 = new ItemStack(Material.SAND);
            
    ItemStack item3 = new ItemStack(Material.SAND);
            
    ItemStack item4 = new ItemStack(Material.SAND);
            
    ItemStack item5 = new ItemStack(Material.SAND);
            
    ItemStack item6 = new ItemStack(Material.SAND);
            
    ItemStack item7 = new ItemStack(Material.SAND);
            
    ItemStack item8 = new ItemStack(Material.SAND);
            
    ItemStack item9 = new ItemStack(Material.SAND);
            
    ItemStack item10 = new ItemStack(Material.POTION1, (short)8197);
            
    ItemStack item11 = new ItemStack(Material.ENDER_PEARL);
            
    //Item defining
            
            
            
    Map<Character,ItemStackingredients shapedCraft.getIngredientMap();
            for (
    String shape:shapedCraft.getShape()) {
                
    item1 ingredients.get(shape.charAt(0));
                
    item2 ingredients.get(shape.charAt(1));
                
    item3 ingredients.get(shape.charAt(2));
                
    item4 ingredients.get(shape.charAt(3));
                
    item5 ingredients.get(shape.charAt(4));
                
    item6 ingredients.get(shape.charAt(5));
                
    item7 ingredients.get(shape.charAt(6));
                
    item8 ingredients.get(shape.charAt(7));
                
    item9 ingredients.get(shape.charAt(8));
                    }
            if (
    item1.equals(item10) && item3.equals(item10) && item7.equals(item10) && item9.equals(item10) && item5.equals(item11)) {
                
    e.getInventory().setResult(item);
                }

        }
    Ну вот разобрался с кастомными стаками, теперь хочу сделать этот крафт. Из главного класса убрал старый рецепт(дабы не перехватывал ивент) написал код. И почему-то не работает...
    Заранее благодарен за помощь :3
    Мур-мур
     
  2. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
  3. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
  4. Sonicxd2

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

    Баллы:
    76
    Offtopic:
    [​IMG]

    Итак, ты понимаешь, что этот код делает? Я тоже нет((
     
  5. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Я понимаю. Получает что есть в верстаке, потом сверяет, и если правильно, то ставит результат!
     
  6. Sonicxd2

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

    Баллы:
    76
    Нуу, как бы это по мягче сказать. Ты инициализируешь все вещи во время КАЖДОГО выполнения евента, далее ты СОЗДАЕШЬ НОВЫЙ РЕЦЕПТ из которого В ЦИКЛЕ ДОСТАЕШЬ ВСЕ вещи, и потом ты что то сверяешь. Надежный план. Как швейцарские часы.
     
  7. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Окей, щас переделаю. Но вопрос почему крафт не работает?
     
  8. Dan_Ender

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

    Баллы:
    76
    Код создания самого крафта дай
     
  9. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    У тебя сейчас черти что... Можешь подождать немного и я сделаю тебе нормальный код(который будет работать на костылях. Ну а что ты хотел, если делал свой крафт) крафта.
     
  10. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Вверх смотри
     
  11. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Спасибо, буду этим шаблоном пользоваться, ибо нужно очень много крафтов с кастомным стаками, абилками.
     
  12. M1fest

    M1fest Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Mifest
    Спасибо за шаблон
     
  13. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Поздравляю, он не рабочий. Мде
     
  14. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Короче...
    Я сделал так:
    Сам крафт.
    Код:
    public void onEnable() {
            ItemStack superItem = new ItemStack(Material.DIAMOND_SWORD, 1);
            ItemMeta i_meta = superItem.getItemMeta();
            i_meta.setDisplayName("§c§lДрагнир");
            i_meta.setLore(Arrays.asList(new String[] {
              "§cДрагнир §8- §7меч короля гномов §cФесса",
              "§7Говорят, что этот мечь",
              "§7король гномов выковал из своей кожи,",
              "§7которая по легендам была кожей дракона.",
              "",
              "§7Говорят, этот мечь невозможно сломать..." }));
            superItem.setItemMeta(i_meta);
            ShapedRecipe s_sword = new ShapedRecipe(superItem);
            s_sword.shape("-_-","_!_","-_-");
            s_sword.setIngredient('-', Material.ENCHANTMENT_TABLE);
            s_sword.setIngredient('_', Material.DIAMOND_BLOCK);
            s_sword.setIngredient('!', Material.DIAMOND_SWORD);
            getServer().addRecipe(s_sword);;
        }
    Ивент проверки:
    Код:
        @EventHandler
        public void onCraft(CraftItemEvent e) {
            CraftingInventory inv = e.getInventory();
            ItemStack result = inv.getResult();
            ItemMeta i_meta = result.getItemMeta();
            if(i_meta != null && i_meta.hasDisplayName() && i_meta.getDisplayName().equals("§c§lДрагнир")) {
                for(ItemStack item : inv.getContents()) {
                    if(item != null && item.getType() == Material.DIAMOND_SWORD) {
                        if(item.getEnchantments().isEmpty()) {
                            e.setCancelled(true);
                            break;
                        }
                    }
                }
            }
        }
    Мне было лень делать нормально, но суть тут уловить можно.
    Если меч не будет зачарован, то скрафтить предмет просто не получится.
    Суть такова: Нужно проверять все предметы в инвентаре или по его ячейкам ну и сравнивать с нужными тебе предметами. Будь то меч с зачарованием или что-то в этом роде.
    P.S. Если есть более адекватный способ, то прошу описать. Ибо мне было лень искать что-то другое, а потому сделал так.
    P.S. @alexandrage может ты шаришь в этих крафтах. Можешь поправить меня, если я вдруг сделал не так или костылей перекинул.
     
  15. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Спасибо, всё понял:good:Благодарочка, здоровья, добра и счастья, тему закрывать не буду специально для @alexandrage
     
  16. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Не робит. Вот код:

    PHP:
    public static void craft() {
            
    ItemStack item = new ItemStack(Material.EYE_OF_ENDER);
            
    ItemMeta meta item.getItemMeta();
            
    meta.setDisplayName(ChatColor.translateAlternateColorCodes('&'"&6Хилер"));
            List<
    Stringlore = new ArrayList<String>();
            
    lore.add(ChatColor.DARK_PURPLE "Будет лечить Вас от всех ран в течении 5 секунд!");
            
    lore.add(ChatColor.AQUA "Использовать на ПКМ!");
            
    meta.setLore(lore);
            
    item.setItemMeta(meta);
            
            
    ShapedRecipe s = new ShapedRecipe(item);
            
    s.shape(new String[] {"A A"" B ""A A"});
            
    s.setIngredient('A'Material.POTION);
            
    s.setIngredient('B'Material.ENDER_PEARL);
            
    Bukkit.getServer().addRecipe(s);
            
        }

    PHP:
        @EventHandler
        
    public void CraftCheck(PrepareItemCraftEvent e ) {
            
    CraftingInventory inv e.getInventory();
            
    ItemStack res inv.getResult();
            
    ItemMeta res_meta res.getItemMeta();
            if(
    res_meta.getLore() != null && res_meta.hasDisplayName() && res_meta.getDisplayName().equals(ChatColor.translateAlternateColorCodes('&'"&6Хилер"))) {
                for (
    ItemStack item inv.getContents()) {
                    if(
    item != null && item.getType().equals(Material.POTION)) {
                        if(!
    item.equals(new ItemStack(Material.POTION1, (short)8197))) {
                            
    inv.setResult(new ItemStack(Material.AIR));
                            break;
                        }
                    }
                }
            }
        }
    Желаю добра тому кто поможет)
     
  17. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Я кинул рабочий калокод. Если не работает, то пробуй заново начать с моего кода.
     
  18. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Я ивент не тот поставил, щас если не заробит попробую
     
  19. Dan_Ender

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

    Баллы:
    76
    Исходя из этого:

    Код:
    ItemStack itemA = ingredients.get('A');
    ItemStack itemB = ingredients.get('B');
     
  20. Автор темы
    thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Я так понял с зельем не работает хоть ивент и поменял. Буду по другому значит делать.
     

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