Вопрос объясните пожалуйста, почему не удаляются предметы из левой руки и слотов для брони

Версия Minecraft
1.17.X

SophiaWagner

Пользователь
Сообщения
266
Решения
1
я все еще новичок в java и это все еще мой перывй плагин, но как по мне что то странное происходит..
пишу плагин который стакает зелья в инвентаре игрока.
Есть код на проверку инвентаря игрока и поиск там зелий


Код:
for (ItemStack item : player.getInventory().getContents()) {

    if (item != null && item.getType() == Material.POTION) {

        potions.add(item);

        player.getInventory().removeItem(item);

    }

}

Почему то этот код находит и добавляет в массив potions, но не удаляет зелья из слотов для брони и из левой руки. Получается что зелья в левой руке и слотов для брони остаются на месте, но добавляются в массив potions, далее массив potions перебирается по новой и зелья из этого массива добавляются в инвентарь в стакнутом виде. В итоге получается дюп.

Немного изменила код, теперь все ок, но мне кажется это странным

Код:
for (int i = 0; i < 36; i++) {

    ItemStack item = player.getInventory().getContents()[i];

    if (item != null && item.getType() == Material.POTION) {

        potions.add(item);

        player.getInventory().removeItem(item);

    }

}
 
Последнее редактирование:
плагин который стакает зелья в инвентаре
Гиблое дело, имхо.
for (int i = 0; i < 36; i++)
Первый вариант кода более верный, во втором случае почему-то перебор только 36 элементов (основного ивентаря), что естественно неверно, если есть потребность перебирать предметы в дополнительной руке, слотах для брони.

В общем, решение скорее всего заключается в замене метода Inventory#removeItem(...) на .
Мастер-совет – всегда обращать внимание на Javadoc описание к методу или чему бы то ни было еще.

UPD: возможно, стоит пояснить, как работать с Javadoc, особенно в текущем контексте.
Во-первых, обычно его нужно подгружать вручную, в случае с использованием Maven достаточно в Intellij IDEA два раза нажать левый Shift и в поиске выбрать пункт "Download Documentation".
Вам необходимо зарегистрироваться для просмотра изображений-вложений
После этого в IDE появится возможность просматривать Javadoc для всех зависимостей, что есть в проекте (если она есть).
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Последнее редактирование:
Гиблое дело, имхо.
Можно прдробнее?
во втором случае почему-то перебор только 36 элементов (основного ивентаря), что естественно неверно
ну если отталкиваться от логики, то скорее второй вариант логичнее т.к зелья хранятся только в основном инвентаре, на голове и в правой руке им делать нечего поэтому логично эти слоты не проверять. Но в любом случает второй вариант был сделан т.к removeItem(item); не удаляет предметы из слотов правой руки и слотов для брони, а про . я не знала


как по мне странно что команда для удаления предмета из инвентаря не может удалить предмет из любого слота инвентаря, а для удаления из любого слота инвентаря есть отдельная команда зачем то
 
Последнее редактирование:
Можно прдробнее?
Наверняка будут всплывать проблемы с дюпом или стаканием, есть некоторый опыт.

Почему то этот код находит и добавляет в массив potions, но не удаляет зелья из слотов для брони и из левой руки.
ну если отталкиваться от логики, то скорее второй вариант логичнее т.к зелья хранятся только в основном инвентаре
Я тогда не понимаю, как эти два утверждения между собой связаны и в чем вопрос заключается тогда.

и в правой руке им делать нечего
Почему?

то скорее второй вариант логичнее т.к зелья хранятся только в основном инвентаре
Вы уверены, что в массиве предметы лежат в том порядке, который вы подразумеваете? Я вот понятия не имею, в каком порядке они лежат. Некоторая логика подсказывает, что может быть сначала там лежат предметы, который находятся в основном инвентаре, но таковое не делает утверждение правдой.
 
ну ладно, из правой руки их можно пить, этого не знала.

основная суть вопросы была в том что странно что метод для удаления предметов не удаляет предметы из определенных слотов инвентаря, а чтоб удалять из любого слота нужен другой метод для удаления, о котором не знала
Наверняка будут всплывать проблемы с дюпом или стаканием, есть некоторый опыт.
проблемы с дюпом весь день исправляла, пока вроде все испарвилось
 
основная суть вопросы была в том что странно что метод для удаления предметов не удаляет предметы из определенных слотов инвентаря, а чтоб удалять из любого слота нужен другой метод для удаления, о котором не знала
Этот метод существует только в Paper API и просто является более совершенным с точки зрения применения, нежели Inventory#removeItem(...) из Spigot API (Paper – форк Spigot). Так бывает.
 
проблемы с дюпом весь день исправляла, пока вроде все испарвилось
Проверь ещё в креативе и при взаимодействии с меню из других плагинов. Насчёт креатива можешь сразу отключить работу плагина с ним потому что там невозможно различать типы кликов
 
Назад
Сверху Снизу