Не появляется дроп.

Версия Minecraft
1.12.2
5
0
Добрый вечер.
Столкнулся с проблемой, что не выпадают предметы после поломки итема. Вернее, событие происходит, в дебаге пишет что дроп попал в инвентарь, но их попросту нет.
Суть в том, что когда я освободил первые два слота, то они выпали. Оба. Оставил первый слот свободным, второй занял, выпал только 1 предмет.
В общем, как я понял, дроп пытается занять первые слоты, а если у него не выходит, то он делитается.
Помогите решить эту проблему, буду очень благодарен
Ну или скиньте код дабы дроп выпадал в мир, а не в инвентарь

А вот и код собсна
Java:
    @SubscribeEvent
    public static void onPlayerDestroyItem(PlayerDestroyItemEvent e) {
        Item item = e.getOriginal().getItem();
        EntityPlayer player = e.getEntityPlayer();
        ItemStack drop1 = new ItemStack(InitItems.SIBERIA);
        ItemStack drop2 = new ItemStack(InitBlocks.VTORYAK_BLOCK);
        player.sendMessage(new TextComponentString("Сломалось"));
        if (item == InitItems.SIBERIA_SWORD && !player.capabilities.isCreativeMode) {
            if (!player.inventory.addItemStackToInventory(drop1))
                player.dropItem(drop1, false);
            if (!player.inventory.addItemStackToInventory(drop2))
                player.dropItem(drop2, false);
        }
    }
 
Решение
Скинь окончательный вариант кода (тот что на последнем видео)
Возможно, тебе нужно обернуть свой код в:
Java:
if(event.getEntityPlayer().getEntityWorld().isRemote) {
   
}
UPD: Здесь ошибка! Проверьте моё сообщение ниже.

tox1cozZ

aka Agravaine
8,454
598
2,890
Эм, по твоим словам ты где-то нашел код и не можешь в нем разобраться, а под спойлером выпрашиваешь готовый :m_faceplam:
У тебя тут так: если в инвентаре нет места для дропа, то он вылетает в мир.
 
5
0
Эм, по твоим словам ты где-то нашел код и не можешь в нем разобраться, а под спойлером выпрашиваешь готовый :m_faceplam:
У тебя тут так: если в инвентаре нет места для дропа, то он вылетает в мир.
Дк я знаю как работает этот код, мне знакомый подсказал его. Но прикол в том, что он у него нормально работает, а у меня нет. Проблему я описал в посте
 

Eifel

Модератор
1,623
78
608
Гораздо проще и эффективней было бы ручками написать цикл и пробежаться по слотам, закинуть в пустые что надо или дропнуть, если не закинулось после пробежки(2 булева). В итоге, не надо будет 2 раза вызывать addItemStackToInventory, который делает то же самое по идее + точно будешь уверен, что все нормально. Делать на серверной стороне и после закидывания в слот, лучше вызывать еще player#container#detectAndSendChanges (не уверен точно ли так на 1.12, т.к. пишу с памяти)
 

Eifel

Модератор
1,623
78
608
А что эффективного в изобретении велосипеда для заполнения слотов? addItemsTackToInventory делает именно то что нужно и возвращает булеан :unsure:
Как вариант - не делать 2 ненужных обхода всего инвентаря (если я правильно понял цель ТС'а), сделать проще и прозрачнее (если другие варианты у ТС'а не работают)
 
Последнее редактирование:
5
0
Что забив первые слоты левым хламом, что не забив...
Да, я не так описал проблему. После перепроверки я понял, что если перед инструментом, который должен сломаться и дропнуть предметы, нет свободных слотов, то при поломке инструмента, дропается 1 предмет, а слот с бывшим инструментом остается пустым.
Первые два примера удачные, третий - нет.
 
917
22
332
Скинь окончательный вариант кода (тот что на последнем видео)
Возможно, тебе нужно обернуть свой код в:
Java:
if(event.getEntityPlayer().getEntityWorld().isRemote) {
   
}
UPD: Здесь ошибка! Проверьте моё сообщение ниже.
 
Последнее редактирование:
5
0
Скинь окончательный вариант кода (тот что на последнем видео)
Возможно, тебе нужно обернуть свой код в:
На видео тот же код..Он очень странно себя ведет. И кстати, я как раз изменил код подобным образом, и он, наконец, заработал должным образом. В любом случае, спасибо за ответ!
 
Сверху