Событие убирания itemstak`a из слота инвентаря

craft-russia2013, может тебе не надо обязательно при закрытии окна? Если "Да, не обязательно.", то можно такой пример тебе понадобиться? Вот пример набросал (для 1.7.10):
Код:
private static boolean isTrueItem, isTrueItem_last;
static {isTrueItem = isTrueItem_last = false;}

@SubscribeEvent
public void invPlayer(TickEvent.PlayerTickEvent e) {
    if (e.side == Side.SERVER) {
        EntityPlayer player = e.player;
        if (player != null) {
            for (ItemStack slot : player.inventory.mainInventory) {
                isTrueItem = checkItem(slot, Items.golden_apple);
                if (isTrueItem) break;
            }

            if (!isTrueItem_last && isTrueItem) itemTrue(player);
            if (isTrueItem_last && !isTrueItem) itemFalse(player);

            isTrueItem_last = isTrueItem;

        }
    }
}

private static boolean checkItem(ItemStack check, Item item) {
    if (check != null && check.getItem() == item) return true; else return false;
}

private static void itemTrue(EntityPlayer player) {
    player.addChatMessage(new ChatComponentText("You have is epic apple."));
}

private static void itemFalse(EntityPlayer player) {
    player.addChatMessage(new ChatComponentText("You lost is epic apple."));
}
 
timaxa007 написал(а):
craft-russia2013, может тебе не надо обязательно при закрытии окна? Если "Да, не обязательно.", то можно такой пример тебе понадобиться? Вот пример набросал (для 1.7.10):
Код:
private static boolean isTrueItem, isTrueItem_last;
static {isTrueItem = isTrueItem_last = false;}

@SubscribeEvent
public void invPlayer(TickEvent.PlayerTickEvent e) {
    if (e.side == Side.SERVER) {
        EntityPlayer player = e.player;
        if (player != null) {
            for (ItemStack slot : player.inventory.mainInventory) {
                isTrueItem = checkItem(slot, Items.golden_apple);
                if (isTrueItem) break;
            }

            if (!isTrueItem_last && isTrueItem) itemTrue(player);
            if (isTrueItem_last && !isTrueItem) itemFalse(player);

            isTrueItem_last = isTrueItem;

        }
    }
}

private static boolean checkItem(ItemStack check, Item item) {
    if (check != null && check.getItem() == item) return true; else return false;
}

private static void itemTrue(EntityPlayer player) {
    player.addChatMessage(new ChatComponentText("You have is epic apple."));
}

private static void itemFalse(EntityPlayer player) {
    player.addChatMessage(new ChatComponentText("You lost is epic apple."));
}
В принципе идея не плохая но я боюсь, что если чекать каждый тик, то лагов будит много на сервере, причем ладно если бы чекать по id и мете, но там еще в тегах предмета прописаны эффекты в которых в свою очередь дополнительные данные эффектов, которые тоже надо перебирать (получается 3 цикла перебора вложенных друг в друга), а у одного предмета(из мода) этих чар от 10 до 50(как положительные так и отрицательные), получается если весь инвентарь забит предметами из мода(маловероятно но все же) то чекать 1 инвентарь это от 350, до 1750 циклов перебора каждый тик на 1 игрока ... многовато думаю слишком.
 
Agravaine, да ты прав я забыл изменить. (Привык подобное писать для клиента.)
 
Назад
Сверху