Справочники

Номера слотов инвентаря

То самое число, которое пишут в конфиг меню и получают в обработчике клика. Нумерация с нуля, слева направо и сверху вниз — кроме инвентаря игрока, где всё иначе.

Варочная стойка

5 сл.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

Огненный порошок — это топливо, и слот у него последний, а не первый.

Три места, где на этом спотыкаются

  • Счёт с нуля. Второй ряд сундука начинается с 9, а не с десяти; центр меню на 27 слотов — это 13. Номер слота считается как 9 × ряд + столбец, и оба слагаемых тоже с нуля.
  • Инвентарь игрока пронумерован не в том порядке, в каком нарисован. Быстрый доступ — 0–8, и рисуется он внизу; над ним лежат 9–35. То есть слот 0 стоит не в левом верхнем углу, как везде, а в левом нижнем.
  • У блока с рецептом слоты не равноправны. В печи 0 — то, что плавят, а 1 — топливо, хотя нарисовано оно ниже. В верстаке 0 — это результат, и сама сетка начинается с единицы. Перепутать ввод с выводом — самая частая ошибка, и падения от неё не будет: предмет просто окажется не там.

Числа взяты из API Bukkit — того самого, которым пользуются плагины (Inventory.getItem(int)), — и сверены с протокольной таблицей Minecraft Wiki.

Меню плагина

  • Размер обязан быть кратен 9 и не больше 54: 9, 18, 27, 36, 45, 54. Всё остальное сервер отвергает с IllegalArgumentException прямо при создании меню — включая ноль, хотя документация его и упоминает. Переключатель над окном показывает любой из шести.
  • Нумерация одинаковая при любом числе рядов. Меню на 9 слотов — это первый ряд сундука, на 54 — все шесть; ни в том, ни в другом случае номера не сдвигаются, и шесть рядов — это то же окно, что у большого сундука.
  • В обработчике клика номера продолжаются. getSlot() отдаёт номер внутри того инвентаря, по которому щёлкнули, и у нижнего это нумерация игрока — то есть ноль приходит и от результата верстака, и от первой ячейки быстрого доступа. Различает их getRawSlot(): он уникален для всего окна.
  • Сдвиг инвентаря игрока свой у каждого окна. После сундука он начинается с 27, после воронки — с 5, после раздатчика — с 9. Захардкоженное «27» врёт везде, кроме сундука.
  • Щелчок мимо окна — это −999. Слота с таким номером не существует ни в одном инвентаре: так игра сообщает, что предмет выбросили за пределы всех слотов. Обработчик, который не ждёт отрицательного числа, падает на нём с ArrayIndexOutOfBoundsException.

Частые вопросы

Какой номер у центральной ячейки меню на 27 слотов?

13. Счёт идёт с нуля, поэтому второй ряд сундука начинается с девятки, а середина трёхрядного меню приходится на тринадцатый слот.

Почему предмет оказывается не в том слоте?

Чаще всего из-за инвентаря игрока: быстрый доступ 0–8 рисуется ВНИЗУ, а слоты 9–35 над ним. В обработчике клика нумерация вдобавок продолжается по окну, а не по контейнеру.

Что означает слот −999?

Щелчок мимо окна. Слота с таким номером не существует ни в одном инвентаре, и обработчик, не ждущий отрицательного числа, падает на нём с ошибкой.