Справочники
Номера слотов инвентаря
То самое число, которое пишут в конфиг меню и получают в обработчике клика. Нумерация с нуля, слева направо и сверху вниз — кроме инвентаря игрока, где всё иначе.
Раздатчик и выбрасыватель
9 сл.Три на три, нумерация та же — слева направо, сверху вниз. Центр — слот 4.
Три места, где на этом спотыкаются
- Счёт с нуля. Второй ряд сундука начинается с 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?
Щелчок мимо окна. Слота с таким номером не существует ни в одном инвентаре, и обработчик, не ждущий отрицательного числа, падает на нём с ошибкой.
