Помогите getInventory.addItem() Баг

pro100koder

Активный участник
Пользователь
Баллы
76
В общем, есть у меня "Выдаватель", при нажатии ПКМ которого, должен выдаваться другой предмет, после чего этот выдаватель удаляется. Всё нормально работает, но если "открывать" выдаватель справа, то предмет не выдаётся. Я не знаю, как понятно объяснить суть проблемы, но через getInventory.addItem() происходит такой баг. Немного кода:
Код:
@EventHandler
    public void onRR(PlayerInteractEvent e){
        Player p = e.getPlayer();
        if(!e.getAction().equals(Action.RIGHT_CLICK_AIR) && !e.getAction().equals(Action.RIGHT_CLICK_BLOCK)){return;}
//Проверки на мету предмета...
ItemStack item = p.getInventory().getItemInMainHand();
item.setAmount(item.getAmount()-1);
//Дальше выдача предмета через p.getInventory.addItem(...);
 
В общем, есть у меня "Выдаватель", при нажатии ПКМ которого, должен выдаваться другой предмет, после чего этот выдаватель удаляется. Всё нормально работает, но если "открывать" выдаватель справа, то предмет не выдаётся. Я не знаю, как понятно объяснить суть проблемы, но через getInventory.addItem() происходит такой баг. Немного кода:
Код:
@EventHandler
    public void onRR(PlayerInteractEvent e){
        Player p = e.getPlayer();
        if(!e.getAction().equals(Action.RIGHT_CLICK_AIR) && !e.getAction().equals(Action.RIGHT_CLICK_BLOCK)){return;}
//Проверки на мету предмета...
ItemStack item = p.getInventory().getItemInMainHand();
item.setAmount(item.getAmount()-1);
//Дальше выдача предмета через p.getInventory.addItem(...);
Объясни нормально, потом поможем.. Я даже не понял что за "выдаватель" и как открывать его "справа" ._.
 
но если "открывать" выдаватель справа, то предмет не выдаётся.
if(!e.getAction().equals(Action.RIGHT_CLICK_AIR) && !e.getAction().equals(Action.RIGHT_CLICK_BLOCK)){return;}
Если это не то что ты ищешь, то объясни что ты хочешь человеческим языком.
 
Если это не то что ты ищешь, то объясни что ты хочешь человеческим языком.
Я не знаю, как это объяснить... "Выдаватель" - предмет, которым если кликнешь, выдаётся случайный дроп. Но если все ячейки (или все ячейки слева от ячейки самого "выдавателя") заполнены чем-то, то этот самый предмет не выдаётся. Надеюсь, на этот раз я объяснил понятнее
 
Я не знаю, как это объяснить... "Выдаватель" - предмет, которым если кликнешь, выдаётся случайный дроп. Но если все ячейки (или все ячейки слева от ячейки самого "выдавателя") заполнены чем-то, то этот самый предмет не выдаётся. Надеюсь, на этот раз я объяснил понятнее
Я заметил, что этот баг работает только в креативе, но всё-же интересно, как и там его пофиксить.
 
Это не баг

Правильный код:

Код:
ItemStack item = p.getInventory().getItemInHand();
item.setAmount(item.getAmount() - 1);
p.getInventory().setItemInHand(item);
p.updateInventory();
 
Это не баг

Правильный код:

Код:
ItemStack item = p.getInventory().getItemInHand();
item.setAmount(item.getAmount() - 1);
p.getInventory().setItemInHand(item);
p.updateInventory();
Зачем убирать 1 предмет, если всё равно в руке появится другой? И если "выдавателей" стак?
 
Потому что очевидно работать надо с рукой с которой произошёл эвент, а не всегда с главной.
 
Код:
        HashMap<Integer, ItemStack> over = player.getInventory().addItem(item);
        if(over.size()>0) {
            player.sendMessage("Нет места!");
        }
 
Код:
        HashMap<Integer, ItemStack> over = player.getInventory().addItem(item);
        if(over.size()>0) {
            player.sendMessage("Нет места!");
        }
Даже если в инвентаре есть много свободного места, и ты в креативе, если вактивных слотах левее, чем сама рулетка, нет пустого слота, то предмет (выдающийся через addItem()) не выдастся, а рулетку уберут. Этот баг не работает в режиме выживания/приключения, хотя пофиксить всё-же хочется. Может быть, посоветуете какой-нибудь аналог give? Где предмет появляется в игроке, с таймером "неподбирания" 0? Или в /give всё как-то по-другому устроено?
 
Там вроде можно поставить время подбора 0, чтобы он моментально поднимался. Смотри как работает команда give.
 
Даже если в инвентаре есть много свободного места, и ты в креативе, если вактивных слотах левее, чем сама рулетка, нет пустого слота, то предмет (выдающийся через addItem()) не выдастся, а рулетку уберут. Этот баг не работает в режиме выживания/приключения, хотя пофиксить всё-же хочется. Может быть, посоветуете какой-нибудь аналог give? Где предмет появляется в игроке, с таймером "неподбирания" 0? Или в /give всё как-то по-другому устроено?
Я тебе и скинул твой give. Нормально там все работает. Где player.sendMessage("Нет места!"); можно дропнуть на землю.
 
Назад
Верх