Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Проверял, и по нумерации они совпадают с обычным инвентарем(а именно нумеруется как 1,2,3,4), что соответствует нижней части инвентаря самого игрока.Открытие собственного инвентаря детектится только через пакеты. Насчет скрина выше, могу с неуверенностью сказать, что слоты на разных версия разные, так что проверяй слоты через инвентари клик.
В каждой версии своя нумерация. И там она бесполезна
Хорошо, открытие я отслежу через пакет, через getView(), я не как заблаговременно не запихну в нужные слоты предмет, т.к. ивент сработает после клика,а не до.В инвенторе клике есть такая штука как *event.getView()*, там ты получаешь 2 инвентаря и их типы, у которых своя нумерация, если ты хочешь делать что-то при нажатии на кнопку E, детекти это через пакеты.
Отследил пакет ==> получил игрока ==> засетил ему айтемстак в нужный слот, если не обновится попробуй updateInventory()Хорошо, открытие я отслежу через пакет, через getView(), я не как заблаговременно не запихну в нужные слоты предмет, т.к. ивент сработает после клика,а не до.
Я знаю номер слота, знаю тип, но как положить туда что-то пока загадка
Нет пакета на открытие инвентаря, есть только на закрытие.Отследил пакет ==> получил игрока ==> засетил ему айтемстак в нужный слот, если не обновится попробуй updateInventory()
И не должно, это же инвентарь игрока и он всегда при нем. То есть инвентарь игрока всегда открыт.Нет пакета на открытие инвентаря, есть только на закрытие.
Вопрос как засетить в нужный слот айтемстак, если этот слот нельзя указать?
@EventHandler
public void pice(InventoryClickEvent e) {
Player p = (Player) e.getWhoClicked();
InventoryView inventory = p.getOpenInventory();
for (int i = 0; i < inventory.countSlots(); i++) {
p.sendMessage("item " + inventory.getItem(i) + " slot " + i);
}
}
Вот пакеты, которые отправляются с клиента когда я открываю инвентарь(то есть он не проверяет)https://bukkit.org/threads/open-player-inventory-event.402205/ - Про пакет открытия собственного инвентаря.

public static void pl1() {
ProtocolManager pm = ProtocolLibrary.getProtocolManager();
pm.addPacketListener(new PacketAdapter(Core.main, ListenerPriority.NORMAL, PacketType.Play.Client.CLIENT_COMMAND) {
@Override
public void onPacketReceiving(PacketEvent event) {
Bukkit.broadcastMessage("" + event.getPacket());
}
});
}
[20:38:40 INFO]: PacketContainer[type=CLIENT_COMMAND[class=PacketPlayInClientCommand, id=4], structureModifier=StructureModifier[fieldType=class java.lang.Object, data=[private net.minecraft.server.v1_8_R3.PacketPlayInClientCommand$EnumClientCommand net.minecraft.server.v1_8_R3.PacketPlayInClientCommand.a]]]
Это не пакет открытия инвенторя, а ачивка. И это работает до 1.12 вроде, не помню точно верию. Если игрок зайдет с 1.12+ ивент соснет.https://bukkit.org/threads/open-player-inventory-event.402205/ - Про пакет открытия собственного инвентаря.
Так ты узнаешь какой слот тебе нужен(помести туда шмотку чтобы в чате написало), потом сетаешь что тебе надо и всеКод:@EventHandler public void pice(InventoryClickEvent e) { Player p = (Player) e.getWhoClicked(); InventoryView inventory = p.getOpenInventory(); for (int i = 0; i < inventory.countSlots(); i++) { p.sendMessage("item " + inventory.getItem(i) + " slot " + i); } }
В таком случае можно обойтись эвентами получения ачивок. Делать что-то когда далась ачивка *открой инвентарь* , и сразу ремувать ееЭто не пакет открытия инвенторя, а ачивка. И это работает до 1.13 кстати. Если игрок зайдет с 1.13+ ивент соснет.
Вот только клиент больше не шлет тот пакет и ачивка то не сработает.В таком случае можно обойтись эвентами получения ачивок. Делать что-то когда далась ачивка *открой инвентарь* , и сразу ремувать ее
.Я чего-то не так понял? Овнер темы юзает 1.12.2 все должно сработатьВот только клиент больше не шлет ничего и ачивка то не сработает.![]()
Inventory inventory = e.getPlayer().getOpenInventory().getTopInventory();
if(inventory instanceof CraftingInventory) {
setItems(inventory); //это предметы
}