Как сделать рецепт с остающимся предметом?

Версия Minecraft
1.7.10
116
4
Всем привет!
1. Как сделать рецепт, чтобы после крафта в сетке крафта появлялся предмет, который я укажу?
Пример:
javaw_2019-03-19_18-45-00-094.gif
2. Как сделать рецепт, чтобы после крафта оставался тот, же предмет, но значение метаданных у него было на 1 меньше?
Например, рецепт кожаной ленты: нож:59(метаданные = прочность) + кожа = 4 кожаных ленты и нож:58(прочность убавилась на 1).
Пример:
javaw_2019-03-19_18-40-33-524.gif

Буду признателен за помощь!
 

timaxa007

Модератор
5,831
409
672
116
4
Как не добавляю метадату, с предметом можно совершить крафт, лишь тогда, когда он полностью починен. если не хватает одной прочности, например, 99/100, то уже не могу крафтить...
Где надо прописать это значение?
и так делал: this.getMetadata(32767);
и так делал: MyItem.addOreDict
и так делал, что в рецепте писал, после самого предмета многоразового вот так: , "data": 32767
Ничего не помогает, что я делаю не так? Я совсем не в том месте и не то делал?
 

timaxa007

Модератор
5,831
409
672
В качестве ингредиента:
Java:
new ItemStack(Items.iron_axe, 1, OreDictionary.WILDCARD_VALUE)
Items.iron_axe - это тот инструмент, который будет ломаться, но не забираться.
---

Это для другой версии, я просто не стал повторять на счёт OreDictionary.WILDCARD_VALUE и в случаи его альтернативного выбора.
 
116
4
О, я даже так делал, только без "1,", вот так - new ItemStack(Items.iron_axe, OreDictionary.WILDCARD_VALUE)
За что она отвечает? Я как не менял значение, ничего не менялось.
Кстати, а как сделать, чтобы предмет оставался в сетке крафта?
И спасибо тебе огромное за помощь!
 

timaxa007

Модератор
5,831
409
672
new ItemStack(item)
new ItemStack(item, count)
new ItemStack(item, count, metadata)
item (Items.iron_axe) - это объект предмета или объект блока.
count (1) - количества предметов в стаке, для рецепта это не должно играть роли в качестве ингредиента в ваниле.
metadata (32767) - это метадата предмета, в если в рецепте указать метадату как OreDictionary.WILDCARD_VALUE или 32767, то это значит что будет участвовать любая метадата: любые доски этого блока, любой краситель этого предмета, или любое повреждение топора. Метадата - в повреждаемом предмете это значения повреждения предмета.
Не знаю почему у тебя так заработало, ты указываешь количество, а не метадата.
Пожалуйста.
 
116
4
Спасибо тебе огромное, Timaxa!
Спасибо тебе огромное, Yeti!
Вот код, который получился, теперь все отлично работает:
Код:
@Override
    public boolean doesContainerItemLeaveCraftingGrid(ItemStack stack) {
        return false;
    }
  
    public ItemStack getContainerItem(ItemStack is) {
        if (is.getItemDamage() >= 0) {
        is.setItemDamage(is.getItemDamage() + 1);
        return is;
        }
        return super.getContainerItem(is);
        }
 
Сверху