Как забирать из инвентаря игрока сразу несколько предметов одного типа?

Версия Minecraft
1.7.10
1,007
36
206
Мне нужно чтобы при нажатии ПКМ на предмете у игрока сразу удалялось 10 предметов. Как это сделать?
 
Решение
Сделать 10 проверок, есть-ли <этот> предмет в инвентаре и удалять <этот> предмет из инвентаря.
Из лука:
player.inventory.hasItem(Items.arrow) - Есть-ли предмет <стрела> в инвентаре.
player.inventory.consumeInventoryItem(Items.arrow); - Убрать предмет <стрела> из инвентаря.


junkil335 написал(а):
при нажатии ПКМ на предмете
Можно воспользоваться, методом onItemRightClick в предмете.


Код:
@Override
public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) {
	Item findItem = Items.stick;
	int i = 0;
	for (ItemStack item : player.inventory.mainInventory) {
		if (item != null && item.getItem() == findItem)
			i += item.stackSize;
		if (i >= 10) break;
	}
	if (i >= 10) {
//Было лень дальше писать по своему, просто...

timaxa007

Модератор
5,831
409
672
Сделать 10 проверок, есть-ли <этот> предмет в инвентаре и удалять <этот> предмет из инвентаря.
Из лука:
player.inventory.hasItem(Items.arrow) - Есть-ли предмет <стрела> в инвентаре.
player.inventory.consumeInventoryItem(Items.arrow); - Убрать предмет <стрела> из инвентаря.


junkil335 написал(а):
при нажатии ПКМ на предмете
Можно воспользоваться, методом onItemRightClick в предмете.


Код:
@Override
public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) {
	Item findItem = Items.stick;
	int i = 0;
	for (ItemStack item : player.inventory.mainInventory) {
		if (item != null && item.getItem() == findItem)
			i += item.stackSize;
		if (i >= 10) break;
	}
	if (i >= 10) {
//Было лень дальше писать по своему, просто создал такой приметив.
		for (int j = 0; j < 10; ++j)
			player.inventory.consumeInventoryItem(findItem);

		if (!player.capabilities.isCreativeMode) --is.stackSize;
	}
	return super.onItemRightClick(is, world, player);
}
 
7,099
324
1,510
А чтобы ItemStack удалить из инветаря, это как сделать? Нужно же еще и метадату и нбт проверять
 

timaxa007

Модератор
5,831
409
672
Код:
@Override
public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) {

	ItemStack findItem = new ItemStack(Blocks.stone);
	findItem.addEnchantment(Enchantment.fortune, 1);

	for (int i = 0; i < player.inventory.getSizeInventory(); ++i) {
		ItemStack item = player.inventory.getStackInSlot(i);
		if (
				item != null &&
				item.getItemDamage() == findItem.getItemDamage() &&
				ItemStack.areItemStackTagsEqual(item, findItem)
				) {
			player.inventory.setInventorySlotContents(i, null);
		}
	}

	return super.onItemRightClick(is, world, player);
}
 
Сверху