Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Den-Xs

Старожил
Пользователь
Баллы
103
Собственно, столкнулся с такой проблемой, что при перемещении предметов как внутри, так и между инвентарями, не вызывается InventoryMoveItemEvent. С чем сей феномен может быть связан?
 
Вроде как этот эвент только хоппер вызывает и всё.
 
эм... м.б. я не совсем корректно написал, наверное правильнее сказать, что эвент не регистрируется. Вообще.
 
Код:
@EventHandler(ignoreCancelled = true)
public void onItemMove(InventoryMoveItemEvent event) {
    //Тут код, который не хочет выполняться
}
И, кстати, не регистрируются почти все эвенты из org.bukkit.event.inventory
 
Покажи место где ты его регистрируешь.
 
мб попробуй сделать действие через таймер
 
в смысле через таймер?

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

Код:
    //Событие респавна
    @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);
    }

Ну или ошибка в Bukkit
 
Пример (Используется другой эвент):

Код:
    //Событие респавна
    @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);
    }
хм, сча попробую
Нет-с, не помогло... мб действительно ошибка в бакките, хз, пробовал и спиготу #1081, и CB рек. сборку - везде одна и та же фихня...
 
Что ты птаешься сделать, может ты не тот эвент юзаешь?
Мне надо, чтобы при помещении определённой вещи в наковальню выполнялось определённое действие. Сначала написал такой код:
Код:
@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, написал вот такой вот код:
Код:
@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
В общем, ничё нипашет, и не знаю даже что делать (((
 
InventoryMoveItemEvent

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

Для остального InventoryClickEvent.
 
Воронка и только вызывает этот эвент.
Если точнее то блок имеющий инвентарь перетаскивает предмет из одного инвентаря в другой.

Для остального InventoryClickEvent.
Хм... Значит в джавадоке ерунду написали... Ну чтож, тогда сча попробую InventoryClickEvent...
 

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

Назад
Верх