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

Помогите Почему не вызывается InventoryMoveItemEvent?

Discussion in 'Разработка плагинов для новичков' started by Den-Xs, Sep 12, 2013.

  1. Автор темы
    Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    Собственно, столкнулся с такой проблемой, что при перемещении предметов как внутри, так и между инвентарями, не вызывается InventoryMoveItemEvent. С чем сей феномен может быть связан?
     
  2. Хостинг MineCraft
    <
  3. Shevchik

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

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    Вроде как этот эвент только хоппер вызывает и всё.
     
  4. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
     
  5. Автор темы
    Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    эм... м.б. я не совсем корректно написал, наверное правильнее сказать, что эвент не регистрируется. Вообще.
     
  6. Shevchik

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

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    А ты его зарегестрировал?
    Что ты конкретно пытакшься сделать?
     
  7. Автор темы
    Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    Code:
    @EventHandler(ignoreCancelled = true)
    public void onItemMove(InventoryMoveItemEvent event) {
        //Тут код, который не хочет выполняться
    }
    И, кстати, не регистрируются почти все эвенты из org.bukkit.event.inventory
     
  8. Shevchik

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

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    Покажи место где ты его регистрируешь.
     
  9. Автор темы
    Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    Всм место?
     
  10. Shevchik

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

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    gtPluginManager().registerEvents(listener, plugin)?
     
  11. Автор темы
    Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    Ну да, у меня в том же классе и другие события регистрируются, и всё нормально. А это никак не хочет (
     
  12. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Trophy Points:
    173
    мб попробуй сделать действие через таймер
     
  13. Автор темы
    Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    в смысле через таймер?
     
    Attelis likes this.
  14. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Trophy Points:
    173
    Пример (Используется другой эвент):

    Code:
        //Событие респавна
        @EventHandler
        public void onPlayerRespawn(PlayerRespawnEvent event){
            final Player player = event.getPlayer();
            final Location respawn = player.getWorld().getSpawnLocation(); 
            //Начинается таймер
            plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() {
                public void run() {         
                    player.teleport(respawn);     
                    player.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 100, 1));
                }
    //Таймер заработает через 1 тик (т.е. меньше секунды)
            }, 1);
        }
    
    [DOUBLEPOST=1379054958,1379054333][/DOUBLEPOST]Ну или ошибка в Bukkit
     
  15. Автор темы
    Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    хм, сча попробую[DOUBLEPOST=1379056268,1379054976][/DOUBLEPOST]Нет-с, не помогло... мб действительно ошибка в бакките, хз, пробовал и спиготу #1081, и CB рек. сборку - везде одна и та же фихня...
     
  16. Shevchik

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

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    Что ты птаешься сделать, может ты не тот эвент юзаешь?
     
  17. Автор темы
    Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    Мне надо, чтобы при помещении определённой вещи в наковальню выполнялось определённое действие. Сначала написал такой код:
    Code:
    @EventHandler(ignoreCancelled = true)
    public void onItemMove(InventoryMoveItemEvent event) {
        Inventory inv = event.getDestination();
        if (inv.getType() == InventoryType.ANVIL) {
            Logger.getLogger("Minecraft").info("Item is placed to Anvil!");
        }
    }
    Он не работал, потом написал то же самое без if (чтобы в консоль печаталось при любом перемещении итемов) - тоже не помогло. Как ни таскал-перетаскивал я вещи между сундуками-печками, ничего не печаталось :D
    Потом я InventoryMoveItemEvent заменил на InventoryEvent - тоже самое, как ни шаманил, не смог его зарегистрировать. Затем, по совету BeYkeR'a попытался зарегистрировать эвент через Scheduler, написал вот такой вот код:
    Code:
    @EventHandler(ignoreCancelled = true)
    public void onItemMove(InventoryMoveItemEvent event) {
        Inventory inv = event.getDestination();
        if (inv.getType() == InventoryType.ANVIL) {
            MainClass plug = new MainClass(); //MainClass extends JavaPlugin
            plug.thisPlugin.getServer().getScheduler().scheduleSyncDelayedTask(plug.thisPlugin, new Runnable() { //Переменная thisPlugin в MainClass = this
                public void run() {
                    Logger.getLogger("Minecraft").info("Event is called!");
                }
            }, 1);
        }
    }
    Да знаю я что быдлокод, но уж хотя бы в консольку ругнулась, чтоле, и то было бы спокойнее :D
    В общем, ничё нипашет, и не знаю даже что делать (((
     
  18. Shevchik

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

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    InventoryMoveItemEvent

    Вызывается только когда хоппер двигает предмет, наковальня то тут причём?
     
  19. Автор темы
    Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    Ну начнём с того, кто такой вообще хоппер? И какой тогда эвент использовать?
    Ну вообще-то более точный перевод выглядит так:
    "вызывается, когда какой-либо энтити или блок (например хоппер) пытается переместить итемы из одного инвентаря в другой (надо думать, инвентарь ;)) "
    Тут же вспоминаем, что каждый Player представляет собой Entity, а наковальня - тоже инвентарь (с.м. InventoryTypе)
     
  20. Shevchik

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

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    Воронка и только вызывает этот эвент.
    Если точнее то блок имеющий инвентарь перетаскивает предмет из одного инвентаря в другой.

    Для остального InventoryClickEvent.
     
    Den-Xs likes this.
  21. Автор темы
    Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    Хм... Значит в джавадоке ерунду написали... Ну чтож, тогда сча попробую InventoryClickEvent...
     

Share This Page