Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Поймать предмет перемещаемый с инвентаря в наковальню

Тема в разделе "Разработка плагинов для новичков", создана пользователем Korvinius, 20 авг 2016.

  1. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Здравствуйте, в версии 1.8.8, не знаю как в остальных, можно переместить предмет в наковальню таким способом:
    допустим у нас в инвентаре, в 1 слоте лежит какой то предмет, открываем наковальню, наводим курсор на слот в наковальне и нажимаем на клавиатуре, клавишу [1], и этот предмет благополучно перекочевывает в наковальню, само событие это ловится без проблем, проблема заключается в том, что я не могу поймать сам перемещаемый предмет, кто знает, подскажите, как мне определить перемещаемый таким способом предмет?
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    методы getCursor() и getCurrentItem() не видят его, других подходящих методов я не смог найти .
     
  4. 152*

    152* Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    152
    на каком событии ловите это?
     
  5. _EnderWorld_

    _EnderWorld_ Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    Steve
    Лучше отловить ивент получения предмета в наковальне, итоговый.
     
  6. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    InventoryClickEvent, InventoryAction: HOTBAR_SWAP[DOUBLEPOST=1471672801,1471672733][/DOUBLEPOST]
    этот вариант не подходит
     
  7. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Берёте тип действия, берёте номер кнопки и ручками вытаскиваете.
     
  8. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Чтобы не париться, вообще запретил таким способом перемещать что либо в наковальню.
     
  9. _EnderWorld_

    _EnderWorld_ Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    Steve
    Ну вообще я когда писал свое сообщение имел ввиду, что можно отловить ивент когда именнно он кликал по результату, а не просто появление.
    Нашел статью на Bukkit.org : https://bukkit.org/threads/inventory-anvil-events.142990/

    Код на переименование (Взят с ссылки выше.):
    Код:
    @EventHandler(priority = EventPriority.MONITOR)
    public void onInventoryClick(InventoryClickEvent e){
    // check if the event has been cancelled by another plugin
    if(!e.isCancelled()){
    HumanEntity ent = e.getWhoClicked();
    // not really necessary
    if(ent instanceof Player){
    Player player = (Player)ent;
    Inventory inv = e.getInventory();
    // see if the event is about an anvil
    if(inv instanceof AnvilInventory){
    InventoryView view = e.getView();
    int rawSlot = e.getRawSlot();
    // compare the raw slot with the inventory view to make sure we are talking about the upper inventory
    if(rawSlot == view.convertSlot(rawSlot)){
    /*
    slot 0 = left item slot
    slot 1 = right item slot
    slot 2 = result item slot
    see if the player clicked in the result item slot of the anvil inventory
    */
    if(rawSlot == 2){
    /*
    get the current item in the result slot
    I think inv.getItem(rawSlot) would be possible too
    */
    ItemStack item = e.getCurrentItem();
    // check if there is an item in the result slot
    if(item != null){
    ItemMeta meta = item.getItemMeta();
    // it is possible that the item does not have meta data
    if(meta != null){
    // see whether the item is beeing renamed
    if(meta.hasDisplayName()){
    String displayName = meta.getDisplayName();
    // do something
    }
    }
    }
    }
    }
    }
    }
    }
    }
    
     

Поделиться этой страницей