[1.7.10] Обратная команда /give

1,239
2
24
Всем привет.Нужна обратная команда /ungive <player> <id> <count> , а надо чтобы не дать, а забрать.Есть у кого идеи?
 
Сам команду создать сможешь?
Вот логика "убирания" предмета (с примером входных данных в качестве предмета красителя):
Код:
        EntityPlayer player = (EntityPlayer)sender;
        Item itemToRemove = Items.dye;
        int metadata = 2;
        int countToRemove = 90;
        for (int i = 0; i < player.inventory.getSizeInventory() && countToRemove > 0; i++) {
            ItemStack itemStack = player.inventory.getStackInSlot(i);
            if (itemStack == null || (itemStack.getItemDamage() != metadata && metadata >= 0) || itemStack.getItem() != itemToRemove)
                continue;
            
            int toRemove = Math.min(countToRemove, itemStack.stackSize);
            itemStack.stackSize -= toRemove;
            if (itemStack.stackSize <= 0)
                player.inventory.setInventorySlotContents(i, null);
            countToRemove -= toRemove;
        }
Если хочешь убрать предмет с любой метадатой - передаешь метадату равную любому отрицательному значению. Можешь сделать отдельный флаг.


А ещё можно просто
Код:
for (int i = 0; i < N; i++)
    player.inventory.consumeInventoryItem(itemToRemove);

Но в этом случае нельзя указать метадату, да и решение говнистое, как по мне.
 
Команды не умею добавлять,нашел 1 тутор на английском на версию 1.6.4 но с английским у меня все плохо,да и непонятный он какой то
Oldestkon написал(а):
Сам команду создать сможешь?
Вот логика "убирания" предмета (с примером входных данных в качестве предмета красителя):
Код:
        EntityPlayer player = (EntityPlayer)sender;
        Item itemToRemove = Items.dye;
        int metadata = 2;
        int countToRemove = 90;
        for (int i = 0; i < player.inventory.getSizeInventory() && countToRemove > 0; i++) {
            ItemStack itemStack = player.inventory.getStackInSlot(i);
            if (itemStack == null || (itemStack.getItemDamage() != metadata && metadata >= 0) || itemStack.getItem() != itemToRemove)
                continue;
            
            int toRemove = Math.min(countToRemove, itemStack.stackSize);
            itemStack.stackSize -= toRemove;
            if (itemStack.stackSize <= 0)
                player.inventory.setInventorySlotContents(i, null);
            countToRemove -= toRemove;
        }
Если хочешь убрать предмет с любой метадатой - передаешь метадату равную любому отрицательному значению. Можешь сделать отдельный флаг.


А ещё можно просто
Код:
for (int i = 0; i < N; i++)
    player.inventory.consumeInventoryItem(itemToRemove);

Но в этом случае нельзя указать метадату, да и решение говнистое, как по мне.
 
Я сделал команду опираясь на /give. Поищи отсылки к командам, там и регистрацию найдешь.
[merge_posts_bbcode]Добавлено: 16.03.2015 13:03:17[/merge_posts_bbcode]

Я сделал команду опираясь на /give. Поищи отсылки к командам, там и регистрацию найдешь.
 
Назад
Сверху