Открытие инвентаря

Tofa_

Пользователь
Сообщения
124
Решения
2
Другие ядра
  1. PaperSpigot
Как мне слушать открытие инвентаря без костыля на таймере?


Java:
public void OpenInvent(InventoryOpenEvent e) {
        Player p = (Player) e.getPlayer();
        if(p.getInventory().getType() == InventoryType.PLAYER){
        что-то
     }
Не вариант так как этот ивент вызывается при открытии сундуков, хопперов, и.т.д. но не собственного инвентаря игрока
 
Как мне слушать открытие инвентаря без костыля на таймере?


Java:
public void OpenInvent(InventoryOpenEvent e) {
        Player p = (Player) e.getPlayer();
        if(p.getInventory().getType() == InventoryType.PLAYER){
        что-то
     }
Не вариант так как этот ивент вызывается при открытии сундуков, хопперов, и.т.д. но не собственного инвентаря игрока
Насколько я помню, инвентарь игрока для сервера всегда открыт. Поэтому отследить на сервере открытие / закрытие инвентаря игрока невозможно.

P. S. По крайней мере, тестировал это на версии 1.16.5. Возможно в новых версиях что-то поменялось.
 
Как мне слушать открытие инвентаря без костыля на таймере?


Java:
public void OpenInvent(InventoryOpenEvent e) {
        Player p = (Player) e.getPlayer();
        if(p.getInventory().getType() == InventoryType.PLAYER){
        что-то
     }
Не вариант так как этот ивент вызывается при открытии сундуков, хопперов, и.т.д. но не собственного инвентаря игрока
Открытие и закрытие инвентаря вызывается ТОЛЬКО на стороне клиента.
Авто объединение сообщений:

Видел костыль, что можно проверять по достижению по открытию инвентаря
 
Открытие и закрытие инвентаря вызывается ТОЛЬКО на стороне клиента.
Авто объединение сообщений:

Видел костыль, что можно проверять по достижению по открытию инвентаря
Пробовал, не работает к сожалению
Java:
public class Main extends JavaPlugin{

     public void onEnable() {
         StartInventoryEvent();
     }
     private void StartInventoryEvent() {
            ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(this, PacketType.Play.Client.CLIENT_COMMAND){
                @Override
                public void onPacketReceiving(PacketEvent e){
                    if(e.getPacket().getClientCommands().read(0) == EnumWrappers.ClientCommand.OPEN_INVENTORY_ACHIEVEMENT){
                        Player p = e.getPlayer();
                        p.sendMessage("Ивент открытия инвентаря сработал");
                    }
                }
            });
     }
}
 
Пробовал, не работает к сожалению
Java:
public class Main extends JavaPlugin{

     public void onEnable() {
         StartInventoryEvent();
     }
     private void StartInventoryEvent() {
            ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(this, PacketType.Play.Client.CLIENT_COMMAND){
                @Override
                public void onPacketReceiving(PacketEvent e){
                    if(e.getPacket().getClientCommands().read(0) == EnumWrappers.ClientCommand.OPEN_INVENTORY_ACHIEVEMENT){
                        Player p = e.getPlayer();
                        p.sendMessage("Ивент открытия инвентаря сработал");
                    }
                }
            });
     }
}

Java:
@EventHandler
public void onJoin(PlayerJoinEvent event){
event.getPlayer().removeAchievement(Achievement.OPEN_INVENTORY);
}

@EventHandler
public void onInventoryOpenEvent(PlayerAchievementAwardedEvent event){
if(event.getAchievement().equals(Achievement.OPEN_INVENTORY)){
event.setCancelled(true);
//do other stuff here
}
}
с бакита взял
Авто объединение сообщений:
 
Последнее редактирование:
Java:
@EventHandler
public void onJoin(PlayerJoinEvent event){
event.getPlayer().removeAchievement(Achievement.OPEN_INVENTORY);
}

@EventHandler
public void onInventoryOpenEvent(PlayerAchievementAwardedEvent event){
if(event.getAchievement().equals(Achievement.OPEN_INVENTORY)){
event.setCancelled(true);
//do other stuff here
}
}
с бакита взял
Авто объединение сообщений:
Ивент PlayerAchievementAwardedEvent с 1.12.2 удалили :(
 
Ивент PlayerAchievementAwardedEvent с 1.12.2 удалили :(
???
Авто объединение сообщений:

Ивент PlayerAchievementAwardedEvent с 1.12.2 удалили :(
Я понял тебя. Если он @Deprecated, то не значит что он удалён. Я думаю, он также вполне работает.
 
???
Авто объединение сообщений:


Я понял тебя. Если он @Deprecated, то не значит что он удалён. Я думаю, он также вполне работает.
Так ты же кинул доки на 1.12.2 версию, на 1.16+ документации на этот ивент нету
 
Опечаточка произошла. Я имел ввиду что после 1.12.2 этот ивент убрали
 
Да, как раз собирался. Как попробую - отвечу
Смотря для чего тебе нужно. Ты можешь с помощью Protocolib слушать нужные пакеты и выполнять свой ивент. Альтернатива - это путь через рефлексию. Если ты хочешь понимать состояние инвентаря в других плагинах (потипу DeluxMenu), то выше описанное не имеет смысла. Проще уже обращаться к ихнему апи или же писать свой.
 
Смотря для чего тебе нужно. Ты можешь с помощью Protocolib слушать нужные пакеты и выполнять свой ивент. Альтернатива - это путь через рефлексию. Если ты хочешь понимать состояние инвентаря в других плагинах (потипу DeluxMenu), то выше описанное не имеет смысла. Проще уже обращаться к ихнему апи или же писать свой.
Рефлексия чего? Не видел, чтобы в каком-то классе было отслеживание открытие инвентаря игрока
 
Включение, выключение инвентаря отследить не реальною. Вполне реально отследить если игрок бегает и взаимодействует с инвентарем
 
Назад
Сверху Снизу