Что в 1.12.2 использовать вместо .stackSize?

Версия Minecraft
1.12.2
26
0
Всем привет! Я создавал предмет наподобие молотка из IC2. Предмет с прочностью, и при крафте прочность на 1 уменьшается. Короче на версии 1.10 код работал идеально, но перешел на 1.12.2 и параметр stackSize-- не работает. То есть он теперь невидимый в ItemStack. Вот этот код:
Java:
@SubscribeEvent
    public void onCrafting(ItemCraftedEvent event) {
       
       
        final IInventory craftMatrix = null;
       
        for(int i = 0; i < event.craftMatrix.getSizeInventory(); i++) {
           
            if(event.craftMatrix.getStackInSlot(i) != null) {
               
                //KitchenKnife
                ItemStack item0 = event.craftMatrix.getStackInSlot(i);
                if(item0 != null && item0.getItem() ==InitItems.KITCHEN_KNIFE) {
                    ItemStack k = new ItemStack(InitItems.KITCHEN_KNIFE, 2, (item0.getItemDamage() + 1));
                   
                    if(k.getItemDamage() >= k.getMaxDamage()) {
                      k.stackSize--;
                       
                    }
                    event.craftMatrix.setInventorySlotContents(i, k);
            }
        }

Если кто знает что вместо stackSize надо использовать в 1.12.2 напишите. Буду благодарен)
 

timaxa007

Модератор
5,831
409
672
А ты убрал возможность его ремонтировать? Если да, то тогда зачем ты в ...
ItemStack k = new ItemStack(InitItems.KITCHEN_KNIFE, 2, (item0.getItemDamage() + 1));
... указываешь количество 2?
 

timaxa007

Модератор
5,831
409
672
Ну точно ответа не дам, а вот вопросами закидаю.
- Если у тебя InitItems.KITCHEN_KNIFE не стакуемый (т.е. размер стака всегда 1), то тебе нужно не "k.stackSize--;" а "event.craftMatrix.setInventorySlotContents(i, null);". А если даже нужно тебе "k.stackSize--", то "k.stackSize" проверять на 0 и сделать "event.craftMatrix.setInventorySlotContents(i, null);".
- И наверное будет лучше не:
ItemStack k = new ItemStack(InitItems.KITCHEN_KNIFE, 2, (item0.getItemDamage() + 1));
А:
Java:
ItemStack k = item0.copy();
k.setItemDamage(result.getItemDamage() + 1);
При этом сохраняться зачарки и всякие другие дополнения.
- Почему используешь ItemCraftedEvent, а не метод в предмете, он же вроде твой предмет?
 
Последнее редактирование:

timaxa007

Модератор
5,831
409
672
Я забыл что не null, а ItemStack.EMPTY.
JSON:
{
    "type": "minecraft:crafting_shapeless",
    "ingredients": [
        {
        "item": "examplemod:item_test",
        "data": 32767
        },
        {
        "item": "minecraft:bone"
        }
    ],
    "result": {
        "item": "minecraft:dye",
        "data": 15,
        "count": 4
    }
}
Java:
    @Override
    public boolean hasContainerItem(ItemStack stack) {
        return true;
    }

    @Override
    public ItemStack getContainerItem(ItemStack itemStack) {
        ItemStack result = itemStack.copy();
        result.setItemDamage(result.getItemDamage() + 1);
        if (result.getItemDamage() >= result.getMaxDamage())//Не обязательно
            return ItemStack.EMPTY;
        return result;
    }
 
Последнее редактирование:
26
0
А куда это вписывать просто я не очень шарю) В класс моего предмета? Или вместо
ItemStack item0 = event.craftMatrix.getStackInSlot(i);...........

Java:
 @Override
    public boolean hasContainerItem(ItemStack stack) {
        return true;
    }

    @Override
    public ItemStack getContainerItem(ItemStack itemStack) {
        ItemStack result = itemStack.copy();
        result.setItemDamage(result.getItemDamage() + 1);
        if (result.getItemDamage() >= result.getMaxDamage())//Не обязательно
            return ItemStack.EMPTY;
        return result;
    }
 

timaxa007

Модератор
5,831
409
672
Добавить в предмет.
Не знаю почему у тебя так. Когда я использую, он у меня доходит до 0, а дальше он исчезает. Хм... Может типа мешает, что-то, типа твоего эвента.
Сейчас в 0 не уходит (наверное из-за не обязательной проверки).
 
Последнее редактирование:
Сверху