public boolean storeRealItemStackList(
		ArrayList<? extends RealItemStack> itemStackList, boolean reverse, boolean restoreIfFail
	) {
		boolean ok = true;
		ArrayList<ItemStack[]> itemStackBackup = backup();
		Iterator<? extends RealItemStack> iterator = itemStackList.iterator();
		while (iterator.hasNext()) {
			RealItemStack itemStack = iterator.next();
			int amount = (reverse ? -itemStack.getAmount() : itemStack.getAmount());
			if (amount < 0) {
				ok = ok && remove(itemStack.getTypeId(), -amount, itemStack.getDurability());
			} else {
				ok = ok && add(itemStack.getTypeId(), amount, itemStack.getDurability());
			}
		}
		if (!ok) {
			if (restoreIfFail)  {
				restore(itemStackBackup);
				errorLog = new ArrayList<RealItemStack>();
			}
			return false;
		}
		return true;
	}