Забрать результат крафта

Версия Minecraft
1.12.2
API
Forge
183
8
16
И так, мне нужно, чтобы результат крафта пропал. Логично было бы сделать как-то так:

Bla-bla.java:
@SubscribeEvent
public static void onItemCrafted(PlayerEvent.ItemCraftedEvent e) {
    e.player.inventory.clearMatchingItems(e.crafting.getItem(), e.crafting.getMetadata(), e.crafting.getCount(), null);
}
Но это работает, только если результат был забран шифт+клик, а если перетаскивать, то метод выше срабатывает до того, как предмет окажется в инвентаре, соответственно из инвентаря убран не будет. Так что надо как-то убрать предмет или из курсора мышки (что вряд-ли получится) либо как-то пометить в игроке, что он скрафтил какой-то предмет, и потом, когда предмет попадёт в инвентарь, убрать его.
 
Решение
Так ладно, пока вроде робит просто
EventHandler.java:
@SubscribeEvent
public static void onItemCrafted(PlayerEvent.ItemCraftedEvent e) {
    if (!e.player.world.isRemote) {
        e.player.inventory.clearMatchingItems(e.crafting.getItem(), e.crafting.getMetadata(), e.crafting.getCount(), null);
    }
}
просто хоть стак и можно забрать в инвентарь, но при попытке его оттуда взять, он удалится, а другие вещи с ним не стакаются
7,099
324
1,510
e.setCanceled(true) попробуй
 
7,099
324
1,510
Ок, тогда юзай clearMatchingItems+удаляй предмет в мышке(player.setCurrentItem, че-то такое)
~~~
Протестируй такой кейс: возьми в инвентарь несколько стаков того же самого предмета, полный и неполных стаков, и попробуй скрафтить с применением clearMatchingItems
 
7,099
324
1,510
player.inventory.setItemStack, хреновое название, но по комментарию можно понять
1612291666749.png
 
183
8
16
А убирать их же надо на сервере? Я просто сделал так:
EventHandler.java:
if (!e.player.world.isRemote) {
    e.player.inventory.clearMatchingItems(e.crafting.getItem(), e.crafting.getMetadata(), e.crafting.getCount(), null);
    e.player.inventory.setItemStack(ItemStack.EMPTY);
}
И оно как-то странно убирается. Просто оно отаётся в инвентаре, а когда я кликаю на стак, то он провадает дважды, то есть если у меня в одном слоте было 64 каменных полублока и я скрафтил ещё 6, то у меня эти шесть попадают в инвентарь, а если на них нажать, то провадают они, а вместе с ними ещё 6 из стака с 64. Итого скрафтив 6, у меня отнялось 12.
 
Последнее редактирование:
183
8
16
Так ладно, пока вроде робит просто
EventHandler.java:
@SubscribeEvent
public static void onItemCrafted(PlayerEvent.ItemCraftedEvent e) {
    if (!e.player.world.isRemote) {
        e.player.inventory.clearMatchingItems(e.crafting.getItem(), e.crafting.getMetadata(), e.crafting.getCount(), null);
    }
}
просто хоть стак и можно забрать в инвентарь, но при попытке его оттуда взять, он удалится, а другие вещи с ним не стакаются
 
Сверху