Помогите Крафт в котором должен присутствовать другой кастомный предмет.

  • Автор темы Автор темы R1Z1nka
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

R1Z1nka

Активный участник
Баллы
61
У меня проблема, мне надо создать кастомный рецепт, в котором присутствует другой кастомный предмет, и просто ItemStack не принимает т.к. там нужен материал. Как тут поступить, через проверку или как-то иначе.
Код:
        ItemStack item1 = new ItemStack(Material.WOOD);
        ItemMeta meta1 = item1.getItemMeta();
        meta1.setDisplayName(ChatColor.GOLD + "Прочная доска");
        item1.setItemMeta(meta);
      
        NamespacedKey key1 = new NamespacedKey(this, "stick");
        ShapedRecipe sr1 = new ShapedRecipe(key1, item1);
        sr1.shape("BBB", "BBB", "BBB");
        sr1.setIngredient('B', Material.  );  // тут нужен   другой  ItemStack
        Bukkit.addRecipe(sr1);
 
У меня проблема, мне надо создать кастомный рецепт, в котором присутствует другой кастомный предмет, и просто ItemStack не принимает т.к. там нужен материал. Как тут поступить, через проверку или как-то иначе.
Код:
        ItemStack item1 = new ItemStack(Material.WOOD);
        ItemMeta meta1 = item1.getItemMeta();
        meta1.setDisplayName(ChatColor.GOLD + "Прочная доска");
        item1.setItemMeta(meta);
 
        NamespacedKey key1 = new NamespacedKey(this, "stick");
        ShapedRecipe sr1 = new ShapedRecipe(key1, item1);
        sr1.shape("BBB", "BBB", "BBB");
        sr1.setIngredient('B', Material.  );  // тут нужен   другой  ItemStack
        Bukkit.addRecipe(sr1);
Вроде бы только ивентами. В принципе, как вариант, можно сделать так
PHP:
    private ItemStack stack() {
        ItemStack c = new ItemStack(Material.STONE);
        ItemMeta cM = c.getItemMeta();
        cM.setDisplayName("custom_item");
        c.setItemMeta(cM);
        return c;
    }
PHP:
    private void createRecipe() {
        ItemStack r = new ItemStack(Material.DIAMOND);
        ItemMeta meta = r.getItemMeta();
        meta.setDisplayName("test");
        r.setItemMeta(meta);
        ShapedRecipe recipe = new ShapedRecipe(new NamespacedKey(this, "custom"), r);
        recipe.shape("BBB", "BBB", "BBB");
        recipe.setIngredient('B', Material.STONE);
        Bukkit.addRecipe(recipe);
    }
PHP:
    @EventHandler
    public void onPrepareCraft(PrepareItemCraftEvent e) {
        ShapedRecipe recipe = (ShapedRecipe) e.getRecipe();
        if (recipe == null)
            return;
        if (recipe.getKey().getKey().equals("custom")) {
            for (ItemStack s : e.getInventory().getMatrix()) {
                if (!(s.getItemMeta().equals(stack().getItemMeta()))) {
                    e.getInventory().setResult(null);
                }
            }
        }
    }
 
Последнее редактирование:
Вроде бы только ивентами. В принципе, как вариант, можно сделать так
PHP:
    private ItemStack stack() {
        ItemStack c = new ItemStack(Material.STONE);
        ItemMeta cM = c.getItemMeta();
        cM.setDisplayName("custom_item");
        c.setItemMeta(cM);
        return c;
    }
PHP:
    private void createRecipe() {
        ItemStack r = new ItemStack(Material.DIAMOND);
        ItemMeta meta = r.getItemMeta();
        meta.setDisplayName("test");
        r.setItemMeta(meta);
        ShapedRecipe recipe = new ShapedRecipe(new NamespacedKey(this, "custom"), r);
        recipe.shape("BBB", "BBB", "BBB");
        recipe.setIngredient('B', Material.STONE);
        Bukkit.addRecipe(recipe);
    }
PHP:
    @EventHandler
    public void onPrepareCraft(PrepareItemCraftEvent e) {
        ShapedRecipe recipe = (ShapedRecipe) e.getRecipe();
        if (recipe == null)
            return;
        if (recipe.getKey().getKey().equals("custom")) {
            for (ItemStack s : e.getInventory().getMatrix()) {
                if (!(s.getItemMeta().equals(stack().getItemMeta()))) {
                    e.getInventory().setResult(null);
                }
            }
        }
    }

Что за бред вообще? Это глупо, всё это можно сократить в 3 действия.
 
Предположим, что первый предмет - это
ItemStack item1 = new ItemStack(Material.WOOD);

Из этого предмета нужно сделать второй, допустим
ItemStack item2 = new ItemStack(Material.STONE);


Следовательно, выносишь это "ItemStack item1 = new ItemStack(Material.WOOD);" перед public void onEnable();
То-есть создание первого предмета должно быть над onEnable.

После чего в item2 при создании крафта, указываешь ячейки, пусть 'A' - это сам первый итем
получаешь его тип item1.getType();
jznUWma.png

fnKZWun.png
 
Последнее редактирование:
Предположим, что первый предмет - это
ItemStack item1 = new ItemStack(Material.WOOD);

Из этого предмета нужно сделать второй, допустим
ItemStack item2 = new ItemStack(Material.STONE);


Следовательно, выносишь это "ItemStack item1 = new ItemStack(Material.WOOD);" перед public void onEnable();
То-есть создание первого предмета должно быть над onEnable.

После чего в item2 при создании крафта, указываешь ячейки, пусть 'A' - это сам первый итем
получаешь его тип item1.getType();
Ты тему читал? Ему нужны КАСТОМНЫЕ предметы в крафте, у которых своя мета. Ты в рецепт передаешь только Material, но не мету.
 
Только я не делал поддержку перевернутой сетки, если надо сам придумаешь.
 
Ты тему читал? Ему нужны КАСТОМНЫЕ предметы в крафте, у которых своя мета. Ты в рецепт передаешь только Material, но не мету.

Что за дурь ты несёшь? Я это делаю на протяжении 4 месяцев, и даже мета с разным лором спокойно используется в крафте и ничего не граничит.

и где я ПЕРЕДАЮ МАТЕРИАЛ? Я передаю весь итем
Еслиб я передавал материал, то передавал бы его Material.
А там я передаю весь тип предмета, ты сам себя слышишь, что говоришь?
 
Что за дурь ты несёшь? Я это делаю на протяжении 4 месяцев, и даже мета с разным лором спокойно используется в крафте и ничего не граничит.

и где я ПЕРЕДАЮ МАТЕРИАЛ? Я передаю весь итем
Еслиб я передавал материал, то передавал бы его Material.
А там я передаю весь тип предмета, ты сам себя слышишь, что говоришь?
Держу в курсе: s.setIngredient('B', item1.getType());
Ты передаешь Material. Ознакомься с Bukkit API. ItemStack 110 строка:
PHP:
    public Material getType() {
        return getType0(this.getTypeId());
    }
 
Последнее редактирование:
Что за дурь ты несёшь? Я это делаю на протяжении 4 месяцев, и даже мета с разным лором спокойно используется в крафте и ничего не граничит.

и где я ПЕРЕДАЮ МАТЕРИАЛ? Я передаю весь итем
Еслиб я передавал материал, то передавал бы его Material.
А там я передаю весь тип предмета, ты сам себя слышишь, что говоришь?
И еще, по поводу того, что у тебя там все используется. Автору темы как раз надо, чтобы в крафте использовался ТОЛЬКО нужный ему итемстак с заданной метой, а не любой другой (Опять же, прочитай тему).
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх